1
1
package edu.wpi.axon.plugin
2
2
3
3
import io.kotlintest.matchers.collections.shouldBeEmpty
4
+ import io.kotlintest.matchers.collections.shouldContainExactly
4
5
import io.kotlintest.matchers.collections.shouldContainExactlyInAnyOrder
5
6
import io.kotlintest.shouldThrow
6
7
import java.io.File
@@ -13,7 +14,7 @@ internal class LocalPluginManagerTest {
13
14
@Test
14
15
fun `list plugins with just official plugins` (@TempDir tempDir : File ) {
15
16
val pluginCacheFile = File (tempDir, " cache.json" ).apply { createNewFile() }
16
- val officialPlugins = listOf (
17
+ val officialPlugins = setOf (
17
18
Plugin .Official (" a" , " a" ),
18
19
Plugin .Official (" b" , " b" )
19
20
)
@@ -26,9 +27,9 @@ internal class LocalPluginManagerTest {
26
27
@Test
27
28
fun `list plugins with just unofficial plugins` (@TempDir tempDir : File ) {
28
29
val pluginCacheFile = File (tempDir, " cache.json" ).apply { createNewFile() }
29
- val manager = LocalPluginManager (pluginCacheFile, listOf ())
30
+ val manager = LocalPluginManager (pluginCacheFile, setOf ())
30
31
manager.initialize()
31
- val unofficialPlugins = listOf (
32
+ val unofficialPlugins = setOf (
32
33
Plugin .Unofficial (" a" , " a" ),
33
34
Plugin .Unofficial (" b" , " b" )
34
35
)
@@ -39,12 +40,12 @@ internal class LocalPluginManagerTest {
39
40
@Test
40
41
fun `list plugins with official and unofficial plugins` (@TempDir tempDir : File ) {
41
42
val pluginCacheFile = File (tempDir, " cache.json" ).apply { createNewFile() }
42
- val officialPlugins = listOf (
43
+ val officialPlugins = setOf (
43
44
Plugin .Official (" a" , " a" ),
44
45
Plugin .Official (" b" , " b" )
45
46
)
46
47
47
- val unofficialPlugins = listOf (
48
+ val unofficialPlugins = setOf (
48
49
Plugin .Unofficial (" a" , " a" ),
49
50
Plugin .Unofficial (" b" , " b" )
50
51
)
@@ -58,22 +59,22 @@ internal class LocalPluginManagerTest {
58
59
@Test
59
60
fun `list plugins with calling initialize` (@TempDir tempDir : File ) {
60
61
File (tempDir, " cache.json" ).apply { createNewFile() }
61
- shouldThrow<IllegalStateException > { LocalPluginManager (tempDir, listOf ()).listPlugins() }
62
+ shouldThrow<IllegalStateException > { LocalPluginManager (tempDir, setOf ()).listPlugins() }
62
63
}
63
64
64
65
@Test
65
66
fun `load plugins from local cache` (@TempDir tempDir : File ) {
66
67
val pluginCacheFile = File (tempDir, " cache.json" ).apply { createNewFile() }
67
68
val exampleCacheData = PluginCache (
68
- listOf (
69
+ setOf (
69
70
Plugin .Unofficial (" a" , " a" ),
70
71
Plugin .Unofficial (" b" , " b" )
71
72
)
72
73
)
73
74
74
75
pluginCacheFile.writeText(exampleCacheData.serialize())
75
76
76
- val manager = LocalPluginManager (pluginCacheFile, listOf ())
77
+ val manager = LocalPluginManager (pluginCacheFile, setOf ())
77
78
manager.initialize()
78
79
manager.listPlugins().shouldContainExactlyInAnyOrder(exampleCacheData.plugins)
79
80
}
@@ -84,10 +85,10 @@ internal class LocalPluginManagerTest {
84
85
val plugin1 = Plugin .Unofficial (" a" , " a" )
85
86
val plugin2 = Plugin .Unofficial (" b" , " b" )
86
87
87
- val exampleCacheData = PluginCache (listOf (plugin1))
88
+ val exampleCacheData = PluginCache (setOf (plugin1))
88
89
pluginCacheFile.writeText(exampleCacheData.serialize())
89
90
90
- val manager = LocalPluginManager (pluginCacheFile, listOf ())
91
+ val manager = LocalPluginManager (pluginCacheFile, setOf ())
91
92
manager.initialize()
92
93
manager.addUnofficialPlugin(plugin2)
93
94
@@ -101,23 +102,40 @@ internal class LocalPluginManagerTest {
101
102
val plugin1 = Plugin .Unofficial (" a" , " a" )
102
103
val plugin2 = Plugin .Unofficial (" b" , " b" )
103
104
104
- val exampleCacheData = PluginCache (listOf (plugin1, plugin2))
105
+ val exampleCacheData = PluginCache (setOf (plugin1, plugin2))
105
106
pluginCacheFile.writeText(exampleCacheData.serialize())
106
107
107
- val manager = LocalPluginManager (pluginCacheFile, listOf ())
108
+ val manager = LocalPluginManager (pluginCacheFile, setOf ())
108
109
manager.initialize()
109
- manager.removeUnofficialPlugin(plugin1)
110
+ manager.removeUnofficialPlugin(plugin1.name )
110
111
PluginCache .deserialize(pluginCacheFile.readText()).plugins
111
- .shouldContainExactlyInAnyOrder (plugin2)
112
+ .shouldContainExactly (plugin2)
112
113
}
113
114
114
115
@Test
115
116
fun `initialize with an invalid cache file` (@TempDir tempDir : File ) {
116
117
val pluginCacheFile = File (tempDir, " cache.json" ).apply { createNewFile() }
117
118
pluginCacheFile.writeText(RandomStringUtils .randomAlphanumeric(10 ))
118
119
119
- val manager = LocalPluginManager (pluginCacheFile, listOf ())
120
+ val manager = LocalPluginManager (pluginCacheFile, setOf ())
120
121
manager.initialize()
121
122
manager.listPlugins().shouldBeEmpty()
122
123
}
124
+
125
+ @Test
126
+ fun `modifying a plugin modifies it in the cache` (@TempDir tempDir : File ) {
127
+ val pluginCacheFile = File (tempDir, " cache.json" ).apply { createNewFile() }
128
+ val plugin1 = Plugin .Unofficial (" a" , " a" )
129
+ val plugin2 = Plugin .Unofficial (" b" , " b" )
130
+
131
+ val exampleCacheData = PluginCache (setOf (plugin1, plugin2))
132
+ pluginCacheFile.writeText(exampleCacheData.serialize())
133
+
134
+ val manager = LocalPluginManager (pluginCacheFile, setOf ())
135
+ manager.initialize()
136
+ val newPlugin1 = Plugin .Unofficial (" a" , " a1" )
137
+ manager.modifyUnofficialPlugin(plugin1.name, newPlugin1)
138
+ PluginCache .deserialize(pluginCacheFile.readText()).plugins
139
+ .shouldContainExactlyInAnyOrder(newPlugin1, plugin2)
140
+ }
123
141
}
0 commit comments