@@ -22,6 +22,9 @@ data class SimpleNodeA(
22
22
val child : SimpleNodeB ?
23
23
) : Named, SimpleDecl(), MyRelevantInterface, MyIrrelevantInterface
24
24
25
+ @LionWebPartition
26
+ data class MyPartition (val roots : MutableList <SimpleRoot >) : Node()
27
+
25
28
interface MyIrrelevantInterface
26
29
27
30
@NodeType
@@ -116,6 +119,104 @@ class LionWebLanguageConverterTest {
116
119
assertEquals(true , validationResult.isSuccessful, validationResult.issues.toString())
117
120
}
118
121
122
+ @Test
123
+ fun exportSimpleLanguageWithPartitions () {
124
+ val kLanguage = KolasuLanguage (" com.strumenta.SimpleLang" ).apply {
125
+ addClass(SimpleRoot ::class )
126
+ addClass(MyPartition ::class )
127
+ }
128
+ assertEquals(6 , kLanguage.astClasses.size)
129
+ val lwLanguage = LionWebLanguageConverter ().exportToLionWeb(kLanguage)
130
+ assertEquals(" 1" , lwLanguage.version)
131
+ assertEquals(6 , lwLanguage.elements.size)
132
+
133
+ val myPartition = lwLanguage.getConceptByName(" MyPartition" )!!
134
+ val simpleRoot = lwLanguage.getConceptByName(" SimpleRoot" )!!
135
+ val simpleDecl = lwLanguage.getConceptByName(" SimpleDecl" )!!
136
+ val simpleNodeA = lwLanguage.getConceptByName(" SimpleNodeA" )!!
137
+ val simpleNodeB = lwLanguage.getConceptByName(" SimpleNodeB" )!!
138
+ val myRelevantInterface = lwLanguage.getInterfaceByName(" MyRelevantInterface" )!!
139
+ assertNull(lwLanguage.getInterfaceByName(" MyIrrelevantInterface" ))
140
+
141
+ assertEquals(" MyPartition" , myPartition.name)
142
+ assertEquals(true , myPartition.isPartition)
143
+ assertSame(lwLanguage, myPartition.language)
144
+ assertEquals(StarLasuLWLanguage .ASTNode , simpleRoot.extendedConcept)
145
+ assertEquals(emptyList(), simpleRoot.implemented)
146
+ assertEquals(false , simpleRoot.isAbstract)
147
+ assertEquals(2 , simpleRoot.features.size)
148
+ assertEquals(2 , simpleRoot.allFeatures().size)
149
+
150
+ assertEquals(" SimpleRoot" , simpleRoot.name)
151
+ assertEquals(false , simpleRoot.isPartition)
152
+ assertSame(lwLanguage, simpleRoot.language)
153
+ assertEquals(StarLasuLWLanguage .ASTNode , simpleRoot.extendedConcept)
154
+ assertEquals(emptyList(), simpleRoot.implemented)
155
+ assertEquals(false , simpleRoot.isAbstract)
156
+ assertEquals(2 , simpleRoot.features.size)
157
+ assertEquals(2 , simpleRoot.allFeatures().size)
158
+
159
+ val simpleRootID = simpleRoot.getPropertyByName(" id" )!!
160
+ assertEquals(" id" , simpleRootID.name)
161
+ assertEquals(false , simpleRootID.isOptional)
162
+ assertEquals(LionCoreBuiltins .getInteger(), simpleRootID.type)
163
+
164
+ val simpleRootChildren = simpleRoot.getContainmentByName(" childrez" )!!
165
+ assertEquals(" childrez" , simpleRootChildren.name)
166
+ assertEquals(true , simpleRootChildren.isOptional)
167
+ assertEquals(true , simpleRootChildren.isMultiple)
168
+ assertEquals(simpleDecl, simpleRootChildren.type)
169
+
170
+ assertEquals(" SimpleDecl" , simpleDecl.name)
171
+ assertEquals(false , simpleDecl.isPartition)
172
+ assertSame(lwLanguage, simpleDecl.language)
173
+ assertEquals(StarLasuLWLanguage .ASTNode , simpleDecl.extendedConcept)
174
+ assertEquals(emptyList(), simpleRoot.implemented)
175
+ assertEquals(true , simpleDecl.isAbstract)
176
+
177
+ assertEquals(" SimpleNodeA" , simpleNodeA.name)
178
+ assertEquals(false , simpleNodeA.isPartition)
179
+ assertSame(lwLanguage, simpleNodeA.language)
180
+ assertEquals(simpleDecl, simpleNodeA.extendedConcept)
181
+ assertEquals(listOf (LionCoreBuiltins .getINamed(), myRelevantInterface), simpleNodeA.implemented)
182
+ assertEquals(false , simpleNodeA.isAbstract)
183
+ assertEquals(2 , simpleNodeA.features.size)
184
+ assertEquals(3 , simpleNodeA.allFeatures().size)
185
+
186
+ assertEquals(
187
+ true ,
188
+ LionCoreBuiltins .getINamed().getPropertyByName(" name" ) in simpleNodeA.allFeatures()
189
+ )
190
+
191
+ val simpleNodeARef = simpleNodeA.getReferenceByName(" ref" )!!
192
+ assertEquals(" ref" , simpleNodeARef.name)
193
+ assertEquals(false , simpleNodeARef.isOptional)
194
+ assertEquals(false , simpleNodeARef.isMultiple)
195
+ assertEquals(simpleNodeA, simpleNodeARef.type)
196
+
197
+ val simpleNodeAChild = simpleNodeA.getContainmentByName(" child" )!!
198
+ assertEquals(" child" , simpleNodeAChild.name)
199
+ assertEquals(true , simpleNodeAChild.isOptional)
200
+ assertEquals(false , simpleNodeAChild.isMultiple)
201
+ assertEquals(simpleNodeB, simpleNodeAChild.type)
202
+
203
+ assertEquals(" SimpleNodeB" , simpleNodeB.name)
204
+ assertEquals(false , simpleNodeB.isPartition)
205
+ assertSame(lwLanguage, simpleNodeB.language)
206
+ assertEquals(simpleDecl, simpleNodeB.extendedConcept)
207
+ assertEquals(false , simpleNodeB.isAbstract)
208
+ assertEquals(1 , simpleNodeB.features.size)
209
+ assertEquals(1 , simpleNodeB.allFeatures().size)
210
+
211
+ val simpleNodeBValue = simpleNodeB.getPropertyByName(" value" )!!
212
+ assertEquals(" value" , simpleNodeBValue.name)
213
+ assertEquals(false , simpleNodeBValue.isOptional)
214
+ assertEquals(LionCoreBuiltins .getString(), simpleNodeBValue.type)
215
+
216
+ val validationResult = LanguageValidator ().validate(lwLanguage)
217
+ assertEquals(true , validationResult.isSuccessful, validationResult.issues.toString())
218
+ }
219
+
119
220
@Test(expected = RuntimeException ::class )
120
221
fun conversionOfNullableContainmentListIsForbidden () {
121
222
val kLanguage = KolasuLanguage (" com.strumenta.SimpleLang" ).apply {
0 commit comments