diff --git a/.gitignore b/.gitignore index febce236986fe6c4520d73c3aef799915ca9be2e..59ea87058c768c6d4f9d8434c5f1995368ed2fb4 100644 --- a/.gitignore +++ b/.gitignore @@ -29,3 +29,8 @@ src/test/jastadd/serializer/Serializer.jadd src/test/jastadd/serializer/SerializerSerializer.jadd src/test/jastadd/serializer/SerializerRefResolver.jadd src/test/jastadd/serializer/SerializerResolverStubs.jrag +src/test/jastadd/serializer-names/Serializer.ast +src/test/jastadd/serializer-names/Serializer.jadd +src/test/jastadd/serializer-names/SerializerSerializer.jadd +src/test/jastadd/serializer-names/SerializerRefResolver.jadd +src/test/jastadd/serializer-names/SerializerResolverStubs.jrag \ No newline at end of file diff --git a/build.gradle b/build.gradle index b87e92bca0da5825980e9885e4e0ae8d1a63d0d0..9c1a469a5993565d84049c56aa5fdb633f55f489 100644 --- a/build.gradle +++ b/build.gradle @@ -377,6 +377,41 @@ task compileSerializerTest(type: JavaExec, group: 'verification') { 'src/test/jastadd/Utils.jadd' } +task preprocessSerializerOriginalNamesTest(type: JavaExec, group: 'verification') { + + doFirst { + delete 'src/test/jastadd/serializer-names/Serializer.ast', + 'src/test/jastadd/serializer-names/Serializer.jadd', + 'src/test/jastadd/serializer-names/SerializerRefResolver.jadd', + 'src/test/jastadd/serializer-names/SerializerSerializer.jadd', + 'src/test/jastadd/serializer-names/SerializerRefResolver.jadd', + 'src/test/jastadd/serializer-names/SerializerResolverStubs.jrag' + } + + classpath = sourceSets.main.runtimeClasspath + main = 'org.jastadd.relast.compiler.Compiler' + //noinspection GroovyAssignabilityCheck + args 'src/test/jastadd/serializer-names/Serializer.relast', '--file', '--grammarName=src/test/jastadd/serializer-names/Serializer', '--serializer=jackson' +} + +task compileSerializerOriginalNamesTest(type: JavaExec, group: 'verification') { + + doFirst { + delete 'src/test/java-gen/serializer' + } + + classpath = sourceSets.main.runtimeClasspath + main = 'org.jastadd.JastAdd' + //noinspection GroovyAssignabilityCheck + args '--o=src/test/java-gen/', '--package=defaultnames.serializer.ast', + 'src/test/jastadd/serializer-names/Serializer.ast', + 'src/test/jastadd/serializer-names/Serializer.jadd', + 'src/test/jastadd/serializer-names/SerializerRefResolver.jadd', + 'src/test/jastadd/serializer-names/SerializerSerializer.jadd', + 'src/test/jastadd/serializer-names/SerializerResolverStubs.jrag', + 'src/test/jastadd/Utils.jadd' +} + test { outputs.upToDateWhen { false } useJUnitPlatform() @@ -406,5 +441,10 @@ compileResolver2Test.dependsOn preprocessResolver2Test test.dependsOn compileListNamesTest compileListNamesTest.dependsOn preprocessListNamesTest + test.dependsOn compileSerializerTest compileSerializerTest.dependsOn preprocessSerializerTest + + +test.dependsOn compileSerializerOriginalNamesTest +compileSerializerOriginalNamesTest.dependsOn preprocessSerializerOriginalNamesTest diff --git a/src/test/jastadd/serializer-names/Serializer.relast b/src/test/jastadd/serializer-names/Serializer.relast new file mode 100644 index 0000000000000000000000000000000000000000..6bbd44b8a4ace22be14d9c37b328d903cccda143 --- /dev/null +++ b/src/test/jastadd/serializer-names/Serializer.relast @@ -0,0 +1,34 @@ + +Root ::= A* B* C; +A:NamedElement; +B:NamedElement; +C:NamedElement ::= D1:D [D2:D] D3:D* + <F1:float> <F2:Float> + <DD1:double> <DD2:Double> + <I1:int> <I2:Integer> + <S1:short> <S2:Short> + <L1:long> <L2:Long> + <B1:byte> <B2:Byte> + <O1:boolean> <O2:Boolean> + <C1:char> <C2:Character> + <T1:String> + <T2> + <N:Instant> + <P:Period> + <Day:Weekday>; +D:NamedElement; + +abstract NamedElement ::= <Name>; + +rel A.Di1 -> B; +rel A.Di2? -> B; +rel A.Di3* -> B; + +rel A.Bi1 <-> B.Bi1; +rel A.Bi2 <-> B.Bi2?; +rel A.Bi3 <-> B.Bi3*; + +rel A.Bi5? <-> B.Bi5?; +rel A.Bi6? <-> B.Bi6*; + +rel A.Bi9* <-> B.Bi9*; diff --git a/src/test/java/org/jastadd/relast/tests/SerializerOriginalNames.java b/src/test/java/org/jastadd/relast/tests/SerializerOriginalNames.java new file mode 100644 index 0000000000000000000000000000000000000000..143201e7c20c83b779594b61a36b7e470081e55a --- /dev/null +++ b/src/test/java/org/jastadd/relast/tests/SerializerOriginalNames.java @@ -0,0 +1,157 @@ +package org.jastadd.relast.tests; + +import org.junit.jupiter.api.Test; +import defaultnames.serializer.ast.*; + +import java.io.File; +import java.io.IOException; +import java.time.Instant; +import java.time.Period; + +import static org.assertj.core.api.Assertions.assertThat; + + +class SerializerOriginalNames { + + + @Test + void testDi1() throws SerializationException, DeserializationException, IOException { + + Root r = new Root(); + A a1 = new A("a1"); + A a2 = new A("a2"); + A a3 = new A("a3"); + B b1 = new B("b1"); + B b2 = new B("b2"); + B b3 = new B("b3"); + C c = new C(); + c.setName("c"); + + // non-terminals + c.setD1(new D("d1")); + c.setD2(new D("d2")); + c.addD3(new D("D3-1")); + c.addD3(new D("D3-2")); + c.addD3(new D("D3-3")); + + // tokens + c.setF1(42f); + c.setF2(42.13f); + + c.setDD1(42.d); + c.setDD2(42.13d); + + c.setI1(23); + c.setI2(42); + c.setS1((short)66); + c.setS2((short)77); + + c.setL1(342L); + c.setL2(5453L); + + c.setB1((byte)5); + c.setB2((byte)'c'); + + c.setO1(true); + c.setO2(false); + + c.setC1('c'); + c.setC2((char)5); + + c.setT1("23"); + c.setT2("dfjsv"); + + c.setN(Instant.now()); + c.setP(Period.ofDays(1)); + + c.setDay(Weekday.FRIDAY); + + r.setC(c); + + // non-containment relations + r.addA(a1); + r.addA(a2); + r.addA(a3); + r.addB(b1); + r.addB(b2); + r.addB(b3); + + // Di1 + a1.setDi1(b2); + a2.setDi1(b1); + a3.setDi1(b3); + + // Di2 + a1.setDi2(b2); + a3.setDi2(b1); + + // Di3 + a1.addToDi3(b1); + a1.addToDi3(b2); + a1.addToDi3(b3); + a2.addToDi3(b2); + + // Bi1 + a1.setBi1(b3); + a2.setBi1(b2); + a3.setBi1(b1); + + // Bi2 + a1.setBi2(b1); + a2.setBi2(b2); + a3.setBi2(b3); + + // Bi3 + a1.setBi3(b2); + a2.setBi3(b2); + a3.setBi3(b2); + + // Bi5 + a1.setBi5(b1); + a2.setBi5(b3); + + // Bi6 + a2.setBi6(b3); + a3.setBi6(b3); + + // Bi9 + a1.addToBi9(b1); + a1.addToBi9(b3); + a2.addToBi9(b3); + + File f1a = File.createTempFile("original", ".json"); + System.out.println(f1a.getAbsoluteFile()); + r.serialize(f1a); + + Root copy = Root.deserialize(f1a); + File f1b = File.createTempFile("copy", ".json"); + copy.serialize(f1b); + + assertThat(f1b).hasSameContentAs(f1a); + + // remove a2 + a1.setDi1(b3); + a1.setDi2(b3); + a1.removeFromDi3(b2); + a1.removeFromDi3(b2); + a1.setBi3(b1); + a3.setBi3(b1); + b3.clearBi5(); + b3.removeFromBi6(a2); + b3.removeFromBi9(a2); + r.getAList().removeChild(r.getAList().getIndexOfChild(a2)); + r.getBList().removeChild(r.getBList().getIndexOfChild(b2)); + + File f2a = File.createTempFile("original", ".json"); + System.out.println(f2a.getAbsoluteFile()); + r.serialize(f2a); + + copy = Root.deserialize(f2a); + File f2b = File.createTempFile("copy", ".json"); + copy.serialize(f2b); + + assertThat(f2b).hasSameContentAs(f2a); + + } + +}