1 package common;
2
3 import java.io.File;
4 import java.io.IOException;
5 import java.util.Vector;
6
7 import org.junit.Assert;
8
9 import de.fhdw.wtf.generator.java.generatorModel.GenAnyType;
10 import de.fhdw.wtf.generator.java.generatorModel.GenAspect;
11 import de.fhdw.wtf.generator.java.generatorModel.GenAspectAttribute;
12 import de.fhdw.wtf.generator.java.generatorModel.GenAspectOperation;
13 import de.fhdw.wtf.generator.java.generatorModel.GenClass;
14 import de.fhdw.wtf.generator.java.generatorModel.GenClassClass;
15 import de.fhdw.wtf.generator.java.generatorModel.GenClassModifier;
16 import de.fhdw.wtf.generator.java.generatorModel.GenComment;
17 import de.fhdw.wtf.generator.java.generatorModel.GenException;
18 import de.fhdw.wtf.generator.java.generatorModel.GenExternalClassClass;
19 import de.fhdw.wtf.generator.java.generatorModel.GenFullParsedOperationState;
20 import de.fhdw.wtf.generator.java.generatorModel.GenInterfaceClass;
21 import de.fhdw.wtf.generator.java.generatorModel.GenJavaAttribute;
22 import de.fhdw.wtf.generator.java.generatorModel.GenJavaException;
23 import de.fhdw.wtf.generator.java.generatorModel.GenJavaOperation;
24 import de.fhdw.wtf.generator.java.generatorModel.GenOperationModifier;
25 import de.fhdw.wtf.generator.java.generatorModel.GenPackage;
26 import de.fhdw.wtf.generator.java.generatorModel.GenParameter;
27 import de.fhdw.wtf.generator.java.generatorModel.GenPrimitiveClass;
28 import de.fhdw.wtf.generator.java.generatorModel.GenSimpleInterfaceClass;
29 import de.fhdw.wtf.generator.java.generatorModel.GenType;
30 import de.fhdw.wtf.generator.java.generatorModel.GenTypeReferenceByReference;
31 import de.fhdw.wtf.generator.java.generatorModel.GenUserClass;
32 import de.fhdw.wtf.generator.java.generatorModel.GenVisibility;
33 import de.fhdw.wtf.generator.java.visitor.GenClassClassVisitor;
34 import de.fhdw.wtf.generator.java.visitor.GenClassVisitor;
35 import de.fhdw.wtf.generator.writer.writer.ExceptionFileWriter;
36 import de.fhdw.wtf.generator.writer.writer.FileHeaderWriter;
37 import de.fhdw.wtf.generator.writer.writer.JavaAspectClassFileWriter;
38 import de.fhdw.wtf.generator.writer.writer.JavaClassFileWriter;
39 import de.fhdw.wtf.generator.writer.writer.JavaInterfaceClassFileWriter;
40
41
42
43
44 public abstract class CommonTest {
45
46
47
48
49
50
51 public abstract String getRootDir();
52
53 public abstract String getCompareDir();
54
55 private final JavaAspectClassFileWriter aspectWriter = new JavaAspectClassFileWriter(false);
56 private final JavaClassFileWriter classWriter = new JavaClassFileWriter(true);
57 private final ExceptionFileWriter exceptionWriter = new ExceptionFileWriter(true);
58 private final JavaInterfaceClassFileWriter interfaceWriter = new JavaInterfaceClassFileWriter(false);
59
60
61
62
63 private void writeFile(final GenClass c) {
64 final File rootdir = new File(this.getRootDir());
65 c.accept(new GenClassVisitor() {
66 @Override
67 public void handle(final GenInterfaceClass interfaceClass) {
68
69 final FileHeaderWriter writer = new FileHeaderWriter(CommonTest.this.interfaceWriter);
70 writer.writeGenClass(interfaceClass, rootdir);
71 }
72
73 @Override
74 public void handle(final GenClassClass clazz) {
75 clazz.accept(new GenClassClassVisitor() {
76 @Override
77 public void handle(final GenAspect aspect) {
78 CommonTest.this.aspectWriter.writeAspectClass(aspect, rootdir);
79 }
80
81 @Override
82 public void handle(final GenUserClass userClass) {
83 final FileHeaderWriter writer = new FileHeaderWriter(CommonTest.this.classWriter);
84 writer.writeGenClass(userClass, rootdir);
85 }
86
87 @Override
88 public void handle(final GenJavaException javaException) {
89
90 }
91
92 @Override
93 public void handle(final GenAnyType anyType) {
94
95 }
96
97 @Override
98 public void handle(final GenException exceptionClass) {
99 final FileHeaderWriter writer = new FileHeaderWriter(CommonTest.this.exceptionWriter);
100 writer.writeGenClass(exceptionClass, rootdir);
101 }
102
103 @Override
104 public void handle(final GenExternalClassClass externalClass) {
105
106 }
107 });
108 }
109
110 @Override
111 public void handle(final GenPrimitiveClass primitiveClass) {
112
113 }
114 });
115 }
116
117 public void doTest(final String className, final GenPackage packag, final GenClass c) throws IOException {
118 this.writeFile(c);
119 this.doAssert(className + c.getFileEnding(), packag);
120 }
121
122 protected void doTest(final String className, final GenPackage packag, final GenInterfaceClass iC)
123 throws IOException {
124 final boolean fullyQualified = true;
125 final JavaInterfaceClassFileWriter javaInterfaceClassWriter = new JavaInterfaceClassFileWriter(fullyQualified);
126 final FileHeaderWriter writer = new FileHeaderWriter(javaInterfaceClassWriter);
127 writer.writeGenClass(iC, new File(CommonTest.this.getRootDir()));
128 this.doAssert(className + iC.getFileEnding(), packag);
129 }
130
131 private void doAssert(final String fileName, final GenPackage packag) throws IOException {
132 final String expected = TestUtil.loadFile(this.getCompareDir() + fileName + ".compare");
133 final String actual = TestUtil.loadFile(this.getRootDir() + packag.toString() + "/" + fileName);
134 Assert.assertEquals(expected.replaceAll("\\s+", ""), actual.replaceAll("\\s+", ""));
135 }
136
137 public GenClassClass getEmptyDefaultClassClass(final String className, final GenPackage packag) {
138 final String classComment = defaultClassComment;
139 final String nonGenPart = "// TODO implement";
140 final GenUserClass c =
141 GenUserClass.create(
142 className,
143 new Vector<GenJavaOperation>(),
144 new Vector<GenInterfaceClass>(),
145 new Vector<GenJavaAttribute>(),
146 new Vector<GenClassModifier>(),
147 new Vector<GenJavaOperation>(),
148 null,
149 packag,
150 GenComment.create(classComment),
151 nonGenPart);
152 return c;
153 }
154
155 public GenException getEmptyDefaultException(final String className, final GenPackage packag) {
156 final String exceptionComment = defaultExceptionComment;
157 final String nonGenPart = "// TODO implement non-generated part of Exception";
158 final GenException c =
159 GenException.create(
160 className,
161 new Vector<GenJavaOperation>(),
162 new Vector<GenInterfaceClass>(),
163 new Vector<GenJavaAttribute>(),
164 new Vector<GenClassModifier>(),
165 new Vector<GenJavaOperation>(),
166 packag,
167 GenComment.create(exceptionComment),
168 nonGenPart);
169 return c;
170 }
171
172 public GenAspect getEmptyDefaultAspect(final String className, final GenPackage packag) {
173 final String classComment = defaultClassComment;
174 final GenAspect a =
175 GenAspect.create(
176 className,
177 new Vector<GenJavaOperation>(),
178 new Vector<GenAspectOperation>(),
179 new Vector<GenInterfaceClass>(),
180 new Vector<GenJavaAttribute>(),
181 new Vector<GenAspectAttribute>(),
182 new Vector<GenClassModifier>(),
183 new Vector<GenJavaOperation>(),
184 null,
185 packag,
186 GenComment.create(classComment),
187 "");
188 return a;
189 }
190
191 public GenJavaOperation getDefaultOp(final String name,
192 final GenVisibility visibility,
193 final String method,
194 final GenType returnType) {
195 return GenJavaOperation.create(
196 name,
197 visibility,
198 new Vector<GenParameter>(),
199 new Vector<GenException>(),
200 method,
201 returnType,
202 new Vector<GenOperationModifier>(),
203 GenComment.create(defaultComment));
204 }
205
206 public GenAspectOperation getDefaultAspectOp(final String name,
207 final GenVisibility visibility,
208 final String method,
209 final GenType returnType,
210 final GenClassClass owner) {
211 return GenAspectOperation.create(name, new Vector<GenParameter>(), GenFullParsedOperationState.create(
212 GenComment.create(defaultComment),
213 new Vector<GenException>(),
214 GenTypeReferenceByReference.create(returnType),
215 new Vector<GenOperationModifier>(),
216 visibility,
217 method), owner);
218 }
219
220 public GenInterfaceClass getEmptyDefaultInterfaceClass(final String interfaceName, final GenPackage packag) {
221 return GenSimpleInterfaceClass.create(
222 interfaceName,
223 new Vector<GenJavaOperation>(),
224 new Vector<GenInterfaceClass>(),
225 packag,
226 GenComment.create(defaultClassComment),
227 "// TODO");
228 }
229
230 public static final String defaultComment = "\t/**\n\t * TODO Comment\n\t */";
231 public static final String defaultClassComment = "/**\n * TODO Comment Class\n */";
232 public static final String defaultExceptionComment = "/**\n * TODO Comment Exception\n */";
233
234 }