Skip to content

Commit ae3bb1e

Browse files
committed
test(mps-sync-plugin): check that stub models are ignored
1 parent d567939 commit ae3bb1e

File tree

46 files changed

+1400
-0
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

46 files changed

+1400
-0
lines changed

mps-sync-plugin3/build.gradle.kts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,9 @@ plugins {
2323
intellij {
2424
localPath = copyMps().absolutePath
2525
instrumentCode = false
26+
plugins = listOf(
27+
"jetbrains.mps.ide.java", // for loading stub models in tests
28+
)
2629
}
2730

2831
dependencies {

mps-sync-plugin3/src/test/kotlin/org/modelix/mps/sync3/ProjectSyncTest.kt

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,14 @@
11
package org.modelix.mps.sync3
22

33
import com.intellij.configurationStore.saveSettings
4+
import com.intellij.openapi.util.use
5+
import com.intellij.openapi.application.ApplicationInfo
46
import io.ktor.client.HttpClient
57
import io.ktor.client.engine.cio.CIO
68
import io.ktor.client.plugins.ResponseException
79
import io.ktor.client.request.get
810
import io.ktor.http.HttpStatusCode
11+
import jetbrains.mps.ide.project.ProjectHelper
912
import jetbrains.mps.smodel.SNodeUtil
1013
import jetbrains.mps.smodel.adapter.ids.SConceptId
1114
import jetbrains.mps.smodel.adapter.ids.SContainmentLinkId
@@ -41,6 +44,7 @@ import org.modelix.model.mutable.asModelSingleThreaded
4144
import org.modelix.model.oauth.IAuthConfig
4245
import org.modelix.model.operations.IOperation
4346
import org.modelix.model.server.ModelServerPermissionSchema
47+
import org.modelix.mps.api.ModelixMpsApi
4448
import org.modelix.mps.multiplatform.model.MPSIdGenerator
4549
import org.modelix.mps.sync3.ui.OpenFrontendAction
4650
import org.modelix.streams.getBlocking
@@ -49,6 +53,7 @@ import java.nio.file.Path
4953
import java.util.concurrent.atomic.AtomicLong
5054
import kotlin.io.path.readText
5155
import kotlin.io.path.writeText
56+
import kotlin.test.assertContains
5257
import kotlin.test.assertFailsWith
5358
import kotlin.test.assertNotEquals
5459
import kotlin.time.Duration.Companion.seconds
@@ -499,6 +504,32 @@ class ProjectSyncTest : MPSTestBase() {
499504
assertEquals(expectedSnapshot, project.captureSnapshot())
500505
}
501506

507+
private fun getMPSPlatformVersion(): Int {
508+
val info = ApplicationInfo.getInstance()
509+
return (info.majorVersion.toInt() - 2000) * 10 + info.minorVersionMainPart.toInt()
510+
}
511+
512+
fun `test change in stub model`(): Unit = runWithModelServer { port ->
513+
if (getMPSPlatformVersion() <= 211) return@runWithModelServer // not worth maintaining these old versions
514+
515+
// ensure stub model loading works
516+
openTestProject("with-stub-models").also { p ->
517+
val mpsProject = ProjectHelper.fromIdeaProject(p)!!
518+
mpsProject.modelAccess.runReadAction {
519+
val module = mpsProject.projectModules.first { it.moduleName == "SolutionWithJavaSourceStubs" }
520+
assertEquals(listOf("org.modelix.sync.sandbox@java_stub"), module.models.map { it.name.value })
521+
}
522+
p.close()
523+
}
524+
525+
val branchRef = RepositoryId("sync-test").getBranchReference("branchA")
526+
val version1 = syncProjectToServer("with-stub-models", port, branchRef)
527+
528+
val version2 = syncProjectToServer("with-stub-models-changed", port, branchRef, version1.getContentHash())
529+
// stub models are ignored and changes in them have no effect
530+
assertEquals(version1.getContentHash(), version2.getContentHash())
531+
}
532+
502533
fun `test missing permission on initial sync is detected`(): Unit = runWithModelServer(hmacKey = "abc") { port ->
503534
val branchRef = RepositoryId("sync-test").getBranchReference("branchA")
504535
AppLevelModelSyncService.getInstance().getOrCreateConnection(
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
# Default ignored files
2+
/shelf/
3+
/workspace.xml
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<project version="4">
3+
<component name="MigrationProperties">
4+
<entry key="project.baseline.version" value="211" />
5+
</component>
6+
</project>
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<project version="4">
3+
<component name="MPSProject">
4+
<projectModules>
5+
<modulePath path="$PROJECT_DIR$/devkits/NewDevkit/NewDevkit.devkit" folder="" />
6+
<modulePath path="$PROJECT_DIR$/languages/NewLanguage/NewLanguage.mpl" folder="" />
7+
<modulePath path="$PROJECT_DIR$/solutions/NewRuntimeSolution/NewRuntimeSolution.msd" folder="" />
8+
<modulePath path="$PROJECT_DIR$/solutions/NewSolution/NewSolution.msd" folder="" />
9+
<modulePath path="$PROJECT_DIR$/solutions/SolutionWithJavaSourceStubs/SolutionWithJavaSourceStubs.msd" folder="" />
10+
<modulePath path="$PROJECT_DIR$/solutions/ToBeDeleted/ToBeDeleted.msd" folder="" />
11+
</projectModules>
12+
</component>
13+
</project>
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<project version="4">
3+
<component name="VcsDirectoryMappings">
4+
<mapping directory="$PROJECT_DIR$/../../.." vcs="Git" />
5+
</component>
6+
</project>
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<dev-kit name="NewDevkit" uuid="568b2514-a608-45b5-aea5-6ffd231cea1d">
3+
<exported-language name="96c7c023-6829-44d0-b358-661f058f1c31(NewLanguage)" />
4+
<extendedDevKits>
5+
<extendedDevKit>fbc25dd2-5da4-483a-8b19-70928e1b62d7(jetbrains.mps.devkit.general-purpose)</extendedDevKit>
6+
</extendedDevKits>
7+
<exported-solutions>
8+
<exported-solution>4eb87a8f-881e-4d34-9514-f5002000c363(NewRuntimeSolution)</exported-solution>
9+
<exported-solution>6354ebe7-c22a-4a0f-ac54-50b52ab9b065(JDK)</exported-solution>
10+
</exported-solutions>
11+
</dev-kit>
Lines changed: 143 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,143 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<language namespace="NewLanguage" uuid="96c7c023-6829-44d0-b358-661f058f1c31" languageVersion="0" moduleVersion="0">
3+
<models>
4+
<modelRoot contentPath="${module}" type="default">
5+
<sourceRoot location="models" />
6+
</modelRoot>
7+
</models>
8+
<facets>
9+
<facet type="java">
10+
<classes generated="true" path="${module}/classes_gen" />
11+
</facet>
12+
</facets>
13+
<accessoryModels />
14+
<generators>
15+
<generator alias="main" namespace="NewLanguage.generator" uuid="6d5e9772-42f2-4376-adca-80393565af00">
16+
<models>
17+
<modelRoot contentPath="${module}/generator" type="default">
18+
<sourceRoot location="templates" />
19+
</modelRoot>
20+
</models>
21+
<facets>
22+
<facet type="java">
23+
<classes generated="true" path="${module}/generator/classes_gen" />
24+
</facet>
25+
</facets>
26+
<external-templates />
27+
<languageVersions>
28+
<language slang="l:f3061a53-9226-4cc5-a443-f952ceaf5816:jetbrains.mps.baseLanguage" version="11" />
29+
<language slang="l:fd392034-7849-419d-9071-12563d152375:jetbrains.mps.baseLanguage.closures" version="0" />
30+
<language slang="l:83888646-71ce-4f1c-9c53-c54016f6ad4f:jetbrains.mps.baseLanguage.collections" version="1" />
31+
<language slang="l:f2801650-65d5-424e-bb1b-463a8781b786:jetbrains.mps.baseLanguage.javadoc" version="2" />
32+
<language slang="l:760a0a8c-eabb-4521-8bfd-65db761a9ba3:jetbrains.mps.baseLanguage.logging" version="0" />
33+
<language slang="l:a247e09e-2435-45ba-b8d2-07e93feba96a:jetbrains.mps.baseLanguage.tuples" version="0" />
34+
<language slang="l:ceab5195-25ea-4f22-9b92-103b95ca8c0c:jetbrains.mps.lang.core" version="2" />
35+
<language slang="l:b401a680-8325-4110-8fd3-84331ff25bef:jetbrains.mps.lang.generator" version="4" />
36+
<language slang="l:d7706f63-9be2-479c-a3da-ae92af1e64d5:jetbrains.mps.lang.generator.generationContext" version="2" />
37+
<language slang="l:289fcc83-6543-41e8-a5ca-768235715ce4:jetbrains.mps.lang.generator.generationParameters" version="0" />
38+
<language slang="l:446c26eb-2b7b-4bf0-9b35-f83fa582753e:jetbrains.mps.lang.modelapi" version="0" />
39+
<language slang="l:3a13115c-633c-4c5c-bbcc-75c4219e9555:jetbrains.mps.lang.quotation" version="5" />
40+
<language slang="l:13744753-c81f-424a-9c1b-cf8943bf4e86:jetbrains.mps.lang.sharedConcepts" version="0" />
41+
<language slang="l:7866978e-a0f0-4cc7-81bc-4d213d9375e1:jetbrains.mps.lang.smodel" version="18" />
42+
<language slang="l:c7fb639f-be78-4307-89b0-b5959c3fa8c8:jetbrains.mps.lang.text" version="0" />
43+
<language slang="l:9ded098b-ad6a-4657-bfd9-48636cfe8bc3:jetbrains.mps.lang.traceable" version="0" />
44+
</languageVersions>
45+
<dependencyVersions>
46+
<module reference="3f233e7f-b8a6-46d2-a57f-795d56775243(Annotations)" version="0" />
47+
<module reference="6354ebe7-c22a-4a0f-ac54-50b52ab9b065(JDK)" version="0" />
48+
<module reference="6ed54515-acc8-4d1e-a16c-9fd6cfe951ea(MPS.Core)" version="0" />
49+
<module reference="8865b7a8-5271-43d3-884c-6fd1d9cfdd34(MPS.OpenAPI)" version="0" />
50+
<module reference="96c7c023-6829-44d0-b358-661f058f1c31(NewLanguage)" version="0" />
51+
<module reference="6d5e9772-42f2-4376-adca-80393565af00(NewLanguage.generator)" version="0" />
52+
<module reference="ceab5195-25ea-4f22-9b92-103b95ca8c0c(jetbrains.mps.lang.core)" version="0" />
53+
</dependencyVersions>
54+
<mapping-priorities />
55+
</generator>
56+
<generator alias="toBeDeletedGenerator" namespace="NewLanguage.generator01" uuid="a8303696-b490-4dad-9595-e52191c9dddf" generatorOutputPath="${module}/generator1/source_gen">
57+
<models>
58+
<modelRoot contentPath="${module}/generator1" type="default">
59+
<sourceRoot location="templates" />
60+
</modelRoot>
61+
</models>
62+
<facets>
63+
<facet type="java">
64+
<classes generated="true" path="${module}/generator1/classes_gen" />
65+
</facet>
66+
</facets>
67+
<external-templates />
68+
<languageVersions>
69+
<language slang="l:f3061a53-9226-4cc5-a443-f952ceaf5816:jetbrains.mps.baseLanguage" version="11" />
70+
<language slang="l:fd392034-7849-419d-9071-12563d152375:jetbrains.mps.baseLanguage.closures" version="0" />
71+
<language slang="l:83888646-71ce-4f1c-9c53-c54016f6ad4f:jetbrains.mps.baseLanguage.collections" version="1" />
72+
<language slang="l:f2801650-65d5-424e-bb1b-463a8781b786:jetbrains.mps.baseLanguage.javadoc" version="2" />
73+
<language slang="l:760a0a8c-eabb-4521-8bfd-65db761a9ba3:jetbrains.mps.baseLanguage.logging" version="0" />
74+
<language slang="l:a247e09e-2435-45ba-b8d2-07e93feba96a:jetbrains.mps.baseLanguage.tuples" version="0" />
75+
<language slang="l:ceab5195-25ea-4f22-9b92-103b95ca8c0c:jetbrains.mps.lang.core" version="2" />
76+
<language slang="l:b401a680-8325-4110-8fd3-84331ff25bef:jetbrains.mps.lang.generator" version="4" />
77+
<language slang="l:d7706f63-9be2-479c-a3da-ae92af1e64d5:jetbrains.mps.lang.generator.generationContext" version="2" />
78+
<language slang="l:289fcc83-6543-41e8-a5ca-768235715ce4:jetbrains.mps.lang.generator.generationParameters" version="0" />
79+
<language slang="l:446c26eb-2b7b-4bf0-9b35-f83fa582753e:jetbrains.mps.lang.modelapi" version="0" />
80+
<language slang="l:3a13115c-633c-4c5c-bbcc-75c4219e9555:jetbrains.mps.lang.quotation" version="5" />
81+
<language slang="l:13744753-c81f-424a-9c1b-cf8943bf4e86:jetbrains.mps.lang.sharedConcepts" version="0" />
82+
<language slang="l:7866978e-a0f0-4cc7-81bc-4d213d9375e1:jetbrains.mps.lang.smodel" version="18" />
83+
<language slang="l:c7fb639f-be78-4307-89b0-b5959c3fa8c8:jetbrains.mps.lang.text" version="0" />
84+
<language slang="l:9ded098b-ad6a-4657-bfd9-48636cfe8bc3:jetbrains.mps.lang.traceable" version="0" />
85+
</languageVersions>
86+
<dependencyVersions>
87+
<module reference="3f233e7f-b8a6-46d2-a57f-795d56775243(Annotations)" version="0" />
88+
<module reference="6354ebe7-c22a-4a0f-ac54-50b52ab9b065(JDK)" version="0" />
89+
<module reference="6ed54515-acc8-4d1e-a16c-9fd6cfe951ea(MPS.Core)" version="0" />
90+
<module reference="8865b7a8-5271-43d3-884c-6fd1d9cfdd34(MPS.OpenAPI)" version="0" />
91+
<module reference="96c7c023-6829-44d0-b358-661f058f1c31(NewLanguage)" version="0" />
92+
<module reference="a8303696-b490-4dad-9595-e52191c9dddf(NewLanguage.generator01)" version="0" />
93+
<module reference="ceab5195-25ea-4f22-9b92-103b95ca8c0c(jetbrains.mps.lang.core)" version="0" />
94+
</dependencyVersions>
95+
<mapping-priorities />
96+
</generator>
97+
</generators>
98+
<sourcePath />
99+
<languageVersions>
100+
<language slang="l:f3061a53-9226-4cc5-a443-f952ceaf5816:jetbrains.mps.baseLanguage" version="11" />
101+
<language slang="l:443f4c36-fcf5-4eb6-9500-8d06ed259e3e:jetbrains.mps.baseLanguage.classifiers" version="0" />
102+
<language slang="l:fd392034-7849-419d-9071-12563d152375:jetbrains.mps.baseLanguage.closures" version="0" />
103+
<language slang="l:83888646-71ce-4f1c-9c53-c54016f6ad4f:jetbrains.mps.baseLanguage.collections" version="1" />
104+
<language slang="l:f2801650-65d5-424e-bb1b-463a8781b786:jetbrains.mps.baseLanguage.javadoc" version="2" />
105+
<language slang="l:760a0a8c-eabb-4521-8bfd-65db761a9ba3:jetbrains.mps.baseLanguage.logging" version="0" />
106+
<language slang="l:a247e09e-2435-45ba-b8d2-07e93feba96a:jetbrains.mps.baseLanguage.tuples" version="0" />
107+
<language slang="l:aee9cad2-acd4-4608-aef2-0004f6a1cdbd:jetbrains.mps.lang.actions" version="4" />
108+
<language slang="l:af65afd8-f0dd-4942-87d9-63a55f2a9db1:jetbrains.mps.lang.behavior" version="2" />
109+
<language slang="l:3f4bc5f5-c6c1-4a28-8b10-c83066ffa4a1:jetbrains.mps.lang.constraints" version="6" />
110+
<language slang="l:e51810c5-7308-4642-bcb6-469e61b5dd18:jetbrains.mps.lang.constraints.msg.specification" version="0" />
111+
<language slang="l:47257bf3-78d3-470b-89d9-8c3261a61d15:jetbrains.mps.lang.constraints.rules" version="0" />
112+
<language slang="l:5dae8159-ab99-46bb-a40d-0cee30ee7018:jetbrains.mps.lang.constraints.rules.kinds" version="0" />
113+
<language slang="l:134c38d4-e3af-4d9e-b069-1c7df0a4005d:jetbrains.mps.lang.constraints.rules.skeleton" version="0" />
114+
<language slang="l:3ad5badc-1d9c-461c-b7b1-fa2fcd0a0ae7:jetbrains.mps.lang.context" version="0" />
115+
<language slang="l:ea3159bf-f48e-4720-bde2-86dba75f0d34:jetbrains.mps.lang.context.defs" version="0" />
116+
<language slang="l:ceab5195-25ea-4f22-9b92-103b95ca8c0c:jetbrains.mps.lang.core" version="2" />
117+
<language slang="l:f4ad079d-bc71-4ffb-9600-9328705cf998:jetbrains.mps.lang.descriptor" version="0" />
118+
<language slang="l:18bc6592-03a6-4e29-a83a-7ff23bde13ba:jetbrains.mps.lang.editor" version="14" />
119+
<language slang="l:ad93155d-79b2-4759-b10c-55123e763903:jetbrains.mps.lang.messages" version="0" />
120+
<language slang="l:446c26eb-2b7b-4bf0-9b35-f83fa582753e:jetbrains.mps.lang.modelapi" version="0" />
121+
<language slang="l:d4615e3b-d671-4ba9-af01-2b78369b0ba7:jetbrains.mps.lang.pattern" version="2" />
122+
<language slang="l:3a13115c-633c-4c5c-bbcc-75c4219e9555:jetbrains.mps.lang.quotation" version="5" />
123+
<language slang="l:982eb8df-2c96-4bd7-9963-11712ea622e5:jetbrains.mps.lang.resources" version="2" />
124+
<language slang="l:b3551702-269c-4f05-ba61-58060cef4292:jetbrains.mps.lang.rulesAndMessages" version="0" />
125+
<language slang="l:d8f591ec-4d86-4af2-9f92-a9e93c803ffa:jetbrains.mps.lang.scopes" version="0" />
126+
<language slang="l:13744753-c81f-424a-9c1b-cf8943bf4e86:jetbrains.mps.lang.sharedConcepts" version="0" />
127+
<language slang="l:7866978e-a0f0-4cc7-81bc-4d213d9375e1:jetbrains.mps.lang.smodel" version="18" />
128+
<language slang="l:c72da2b9-7cce-4447-8389-f407dc1158b7:jetbrains.mps.lang.structure" version="9" />
129+
<language slang="l:c7fb639f-be78-4307-89b0-b5959c3fa8c8:jetbrains.mps.lang.text" version="0" />
130+
<language slang="l:9ded098b-ad6a-4657-bfd9-48636cfe8bc3:jetbrains.mps.lang.traceable" version="0" />
131+
<language slang="l:7a5dda62-9140-4668-ab76-d5ed1746f2b2:jetbrains.mps.lang.typesystem" version="5" />
132+
</languageVersions>
133+
<dependencyVersions>
134+
<module reference="3f233e7f-b8a6-46d2-a57f-795d56775243(Annotations)" version="0" />
135+
<module reference="6354ebe7-c22a-4a0f-ac54-50b52ab9b065(JDK)" version="0" />
136+
<module reference="6ed54515-acc8-4d1e-a16c-9fd6cfe951ea(MPS.Core)" version="0" />
137+
<module reference="8865b7a8-5271-43d3-884c-6fd1d9cfdd34(MPS.OpenAPI)" version="0" />
138+
<module reference="96c7c023-6829-44d0-b358-661f058f1c31(NewLanguage)" version="0" />
139+
<module reference="ceab5195-25ea-4f22-9b92-103b95ca8c0c(jetbrains.mps.lang.core)" version="0" />
140+
<module reference="a9e4c532-c5f5-4bb7-99ef-42abb73bbb70(jetbrains.mps.lang.descriptor.aspects)" version="0" />
141+
</dependencyVersions>
142+
<extendedLanguages />
143+
</language>
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<model ref="r:59e10122-4a73-4f29-8d78-e2f39f37056d(NewLanguage.generator.templates@generator)">
3+
<persistence version="9" />
4+
<languages>
5+
<devkit ref="a2eb3a43-fcc2-4200-80dc-c60110c4862d(jetbrains.mps.devkit.templates)" />
6+
</languages>
7+
<imports>
8+
<import index="mioq" ref="r:3467edfa-6d06-43c6-a5a6-c4c01110f8e6(NewLanguage.structure)" />
9+
</imports>
10+
<registry>
11+
<language id="b401a680-8325-4110-8fd3-84331ff25bef" name="jetbrains.mps.lang.generator">
12+
<concept id="1095416546421" name="jetbrains.mps.lang.generator.structure.MappingConfiguration" flags="ig" index="bUwia" />
13+
</language>
14+
<language id="ceab5195-25ea-4f22-9b92-103b95ca8c0c" name="jetbrains.mps.lang.core">
15+
<concept id="1169194658468" name="jetbrains.mps.lang.core.structure.INamedConcept" flags="ng" index="TrEIO">
16+
<property id="1169194664001" name="name" index="TrG5h" />
17+
</concept>
18+
</language>
19+
</registry>
20+
<node concept="bUwia" id="7bG66aOHu1W">
21+
<property role="TrG5h" value="main" />
22+
</node>
23+
</model>
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<model ref="r:66f1bfcb-5e7d-4ad2-bd1a-495bfaf48ded(NewLanguage.generator01.templates@generator)">
3+
<persistence version="9" />
4+
<languages>
5+
<devkit ref="a2eb3a43-fcc2-4200-80dc-c60110c4862d(jetbrains.mps.devkit.templates)" />
6+
</languages>
7+
<imports>
8+
<import index="mioq" ref="r:3467edfa-6d06-43c6-a5a6-c4c01110f8e6(NewLanguage.structure)" />
9+
</imports>
10+
<registry>
11+
<language id="b401a680-8325-4110-8fd3-84331ff25bef" name="jetbrains.mps.lang.generator">
12+
<concept id="1095416546421" name="jetbrains.mps.lang.generator.structure.MappingConfiguration" flags="ig" index="bUwia" />
13+
</language>
14+
<language id="ceab5195-25ea-4f22-9b92-103b95ca8c0c" name="jetbrains.mps.lang.core">
15+
<concept id="1169194658468" name="jetbrains.mps.lang.core.structure.INamedConcept" flags="ng" index="TrEIO">
16+
<property id="1169194664001" name="name" index="TrG5h" />
17+
</concept>
18+
</language>
19+
</registry>
20+
<node concept="bUwia" id="4OfPYN8Ll9G">
21+
<property role="TrG5h" value="main" />
22+
</node>
23+
</model>

0 commit comments

Comments
 (0)