View Javadoc
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   * Contains testcases for symmetric attributes.
26   */
27  public class SymmetricTest {
28  	/**
29  	 * Tests a several invalid groups.
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  	 * Tests several invalid groups.
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 				// mistake found
118 			}
119 		}
120 	}
121 }