1 package de.fhdw.wtf.common.ast.type.test;
2
3 import static org.junit.Assert.assertEquals;
4 import static org.junit.Assert.fail;
5
6 import java.util.ArrayList;
7 import java.util.Iterator;
8 import java.util.List;
9 import java.util.concurrent.ExecutionException;
10
11 import org.junit.Ignore;
12 import org.junit.Test;
13
14 import de.fhdw.wtf.common.ast.Attribute;
15 import de.fhdw.wtf.common.ast.Group;
16 import de.fhdw.wtf.common.ast.GroupElement;
17 import de.fhdw.wtf.common.ast.Model;
18 import de.fhdw.wtf.common.ast.type.ClassType;
19 import de.fhdw.wtf.common.exception.editor.MultipleCheckExceptions;
20 import de.fhdw.wtf.common.exception.walker.CyclicDependencyException;
21 import de.fhdw.wtf.common.exception.walker.CyclicPartDefinitionException;
22 import de.fhdw.wtf.tooling.SyntaxCheck;
23
24
25
26
27 public class SymmetricTest {
28
29
30
31 @Ignore
32 @Test
33 public void testSimpleSymmetricBasic1() {
34 final List<String> inputs = new ArrayList<String>();
35 final String input1 = "Group:group=[A:class={b:B symmetric(a);};B:class={a:A symmetric(b);};];";
36 try {
37 final Model model2 = SyntaxCheck.getInstance().getModelFromString(input1);
38 final Group group2 = model2.getGroups().iterator().next();
39 final Iterator<GroupElement> i = group2.getGroupElements().iterator();
40 final ClassType classA = (ClassType) i.next();
41 final ClassType classB = (ClassType) i.next();
42 final Attribute bInA = classA.getAttributes().iterator().next();
43 final Attribute aInB = classB.getAttributes().iterator().next();
44 assertEquals("b", bInA.getName());
45 assertEquals("a", aInB.getName());
46 assertEquals(true, bInA.isSymmetric());
47 assertEquals(true, aInB.isSymmetric());
48 assertEquals(aInB.getAttrType(), classA);
49 assertEquals(bInA.getAttrType(), classB);
50
51 } catch (final Exception e) {
52 fail();
53 }
54 final String input2 = "Group:group=[A:class={b:B* symmetric(a);};B:class={a:A* symmetric(b);};];";
55 final String input3 = "Group:group=[A:class={b:B* symmetric(a);};B:class={a:A symmetric(b);};];";
56 final String input4 = "Group:group=[A:class={a1:A* symmetric(a2);a2:A* symmetric(a1);};];";
57 final String input5 =
58 "Group:group=[A:class={b: group2.B symmetric(a);};];"
59 + "Group:group2=[B:class={a: group.A symmetric(b);};];";
60 final String input6 =
61 "Group:group=[A:class={b:B symmetric(a);b2:B symmetric(a2);};"
62 + "B:class={a:A symmetric(b);};a2:A symmetric(b2);};];";
63 inputs.add(input1);
64 inputs.add(input2);
65 inputs.add(input3);
66 inputs.add(input4);
67 inputs.add(input5);
68 inputs.add(input6);
69 for (final String input : inputs) {
70 try {
71 SyntaxCheck.getInstance().getModelFromString(input);
72 } catch (final Exception e) {
73 fail();
74 }
75 }
76 Model model3;
77 try {
78 model3 = SyntaxCheck.getInstance().getModelFromString(input6);
79 final Group group3 = model3.getGroups().iterator().next();
80 final Iterator<GroupElement> i = group3.getGroupElements().iterator();
81 final ClassType classA = (ClassType) i.next();
82 final ClassType classB = (ClassType) i.next();
83 assertEquals(2, classA.getAttributes().size());
84 assertEquals(2, classB.getAttributes().size());
85 } catch (MultipleCheckExceptions | CyclicDependencyException | InterruptedException
86 | CyclicPartDefinitionException | ExecutionException e) {
87 fail();
88 }
89 }
90
91
92
93
94 @Test
95 public void testSimpleSymmetricBasic2() {
96 final List<String> inputs = new ArrayList<String>();
97 final String input1 = "Group:group=[A:class={b:C symmetric(a);};B:class={a:A symmetric(b);};C:class={};];";
98 final String input2 = "Group:group=[A:class={b:B symmetric(a);};B:class={a:C symmetric(b);};C:class={};];";
99 final String input3 =
100 "Group:group=[A:class={b:C symmetric(a);};B:class={a:A symmetric(b);};C:class={a:A symmetric};];";
101 final String input4 =
102 "Group:group=[A:class={b:B symmetric(c);};B:class={c:C symmetric(d);};"
103 + "C:class={d:D symmetric(a);};D:class={a:A symmetric(B);};];";
104 final String input5 = "Group:group=[A:class={b:B symmetric(a);};B:class={a:A ;};];";
105 final String input6 = "Group:group=[A:class={a:A symmetric(a);};];";
106 inputs.add(input1);
107 inputs.add(input2);
108 inputs.add(input3);
109 inputs.add(input4);
110 inputs.add(input5);
111 inputs.add(input6);
112 for (final String input : inputs) {
113 try {
114 SyntaxCheck.getInstance().getModelFromString(input);
115 fail();
116 } catch (final Exception e) {
117
118 }
119 }
120 }
121 }