e26d327a2e0645354f56b01d30fb558206e79c6a
[idea/community.git] / plugins / groovy / test / org / jetbrains / plugins / groovy / LightGroovyTestCase.groovy
1 /*
2  * Copyright 2000-2014 JetBrains s.r.o.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16
17 package org.jetbrains.plugins.groovy
18
19 import com.intellij.psi.PsiIntersectionType
20 import com.intellij.psi.PsiType
21 import com.intellij.testFramework.LightProjectDescriptor
22 import com.intellij.testFramework.fixtures.LightCodeInsightFixtureTestCase
23 import org.jetbrains.annotations.NonNls
24 import org.jetbrains.annotations.NotNull
25 import org.jetbrains.annotations.Nullable
26
27 /**
28  * @author peter
29  */
30 public abstract class LightGroovyTestCase extends LightCodeInsightFixtureTestCase {
31
32   @Override
33   @NotNull
34   protected LightProjectDescriptor getProjectDescriptor() {
35     return GroovyLightProjectDescriptor.GROOVY_2_1;
36   }
37
38   /**
39    * Return relative path to the test data. Path is relative to the
40    * {@link com.intellij.openapi.application.PathManager#getHomePath()}
41    *
42    * @return relative path to the test data.
43    */
44   @Override
45   @NonNls
46   protected abstract String getBasePath();
47
48
49   protected void addGroovyTransformField() {
50     myFixture.addClass('''package groovy.transform; public @interface Field{}''');
51   }
52
53   protected void addGroovyObject() throws IOException {
54     myFixture.addClass('''\
55 package groovy.lang;
56 public interface GroovyObject {
57     java.lang.Object invokeMethod(java.lang.String s, java.lang.Object o);
58     java.lang.Object getProperty(java.lang.String s);
59     void setProperty(java.lang.String s, java.lang.Object o);
60     groovy.lang.MetaClass getMetaClass();
61     void setMetaClass(groovy.lang.MetaClass metaClass);
62 }
63 ''');
64   }
65
66
67   public static final String IMPORT_COMPILE_STATIC = 'import groovy.transform.CompileStatic'
68   void addCompileStatic() {
69    myFixture.addClass('''\
70 package groovy.transform;
71 public @interface CompileStatic{
72 }
73 ''')
74   }
75
76   protected void addBigDecimal() {
77     myFixture.addClass('''\
78 package java.math;
79
80 public class BigDecimal extends Number implements Comparable<BigDecimal> {
81 }
82 ''')
83   }
84
85   protected void addBigInteger() {
86     myFixture.addClass('''\
87 package java.math;
88
89 public class BigInteger extends Number implements Comparable<BigInteger> {
90 }
91 ''')
92   }
93
94   protected void addHashSet() {
95     myFixture.addClass('''\
96 package java.util;
97
98 public class HashSet<E>
99     extends AbstractSet<E>
100     implements Set<E>, Cloneable, java.io.Serializable
101 {}
102 ''')
103   }
104
105   protected final void addAnnotationCollector() {
106     myFixture.addClass '''\
107 package groovy.transform;
108
109 @java.lang.annotation.Documented
110 @Retention(RetentionPolicy.RUNTIME)
111 @Target({ElementType.ANNOTATION_TYPE, ElementType.TYPE})
112 public @interface AnnotationCollector {
113     String processor() default "org.codehaus.groovy.transform.AnnotationCollectorTransform";
114     Class[] value() default {};
115 }
116 '''
117   }
118
119   /*void addHashMap() {
120     myFixture.addClass('''\
121 package java.util;
122
123 public class HashMap<K,V> extends AbstractMap<K,V> implements Map<K,V>, Cloneable, Serializable {
124     public HashMap(int initialCapacity, float loadFactor) {}
125     public HashMap(int initialCapacity) {}
126     public HashMap() {}
127     public HashMap(Map<? extends K, ? extends V> m) {}
128 }
129 ''')
130   }*/
131
132   protected final void addTestCase() {
133     myFixture.addClass('''\
134
135   // IntelliJ API Decompiler stub source generated from a class file
136   // Implementation of methods is not available
137
138 package junit.framework;
139
140 public abstract class TestCase extends junit.framework.Assert implements junit.framework.Test {
141     private java.lang.String fName;
142
143     public TestCase() { /* compiled code */ }
144
145     public TestCase(java.lang.String name) { /* compiled code */ }
146
147     public int countTestCases() { /* compiled code */ }
148
149     protected junit.framework.TestResult createResult() { /* compiled code */ }
150
151     public junit.framework.TestResult run() { /* compiled code */ }
152
153     public void run(junit.framework.TestResult result) { /* compiled code */ }
154
155     public void runBare() throws java.lang.Throwable { /* compiled code */ }
156
157     protected void runTest() throws java.lang.Throwable { /* compiled code */ }
158
159     public static void assertTrue(java.lang.String message, boolean condition) { /* compiled code */ }
160
161     public static void assertTrue(boolean condition) { /* compiled code */ }
162
163     public static void assertFalse(java.lang.String message, boolean condition) { /* compiled code */ }
164
165     public static void assertFalse(boolean condition) { /* compiled code */ }
166
167     public static void fail(java.lang.String message) { /* compiled code */ }
168
169     public static void fail() { /* compiled code */ }
170
171     public static void assertEquals(java.lang.String message, java.lang.Object expected, java.lang.Object actual) { /* compiled code */ }
172
173     public static void assertEquals(java.lang.Object expected, java.lang.Object actual) { /* compiled code */ }
174
175     public static void assertEquals(java.lang.String message, java.lang.String expected, java.lang.String actual) { /* compiled code */ }
176
177     public static void assertEquals(java.lang.String expected, java.lang.String actual) { /* compiled code */ }
178
179     public static void assertEquals(java.lang.String message, double expected, double actual, double delta) { /* compiled code */ }
180
181     public static void assertEquals(double expected, double actual, double delta) { /* compiled code */ }
182
183     public static void assertEquals(java.lang.String message, float expected, float actual, float delta) { /* compiled code */ }
184
185     public static void assertEquals(float expected, float actual, float delta) { /* compiled code */ }
186
187     public static void assertEquals(java.lang.String message, long expected, long actual) { /* compiled code */ }
188
189     public static void assertEquals(long expected, long actual) { /* compiled code */ }
190
191     public static void assertEquals(java.lang.String message, boolean expected, boolean actual) { /* compiled code */ }
192
193     public static void assertEquals(boolean expected, boolean actual) { /* compiled code */ }
194
195     public static void assertEquals(java.lang.String message, byte expected, byte actual) { /* compiled code */ }
196
197     public static void assertEquals(byte expected, byte actual) { /* compiled code */ }
198
199     public static void assertEquals(java.lang.String message, char expected, char actual) { /* compiled code */ }
200
201     public static void assertEquals(char expected, char actual) { /* compiled code */ }
202
203     public static void assertEquals(java.lang.String message, short expected, short actual) { /* compiled code */ }
204
205     public static void assertEquals(short expected, short actual) { /* compiled code */ }
206
207     public static void assertEquals(java.lang.String message, int expected, int actual) { /* compiled code */ }
208
209     public static void assertEquals(int expected, int actual) { /* compiled code */ }
210
211     public static void assertNotNull(java.lang.Object object) { /* compiled code */ }
212
213     public static void assertNotNull(java.lang.String message, java.lang.Object object) { /* compiled code */ }
214
215     public static void assertNull(java.lang.Object object) { /* compiled code */ }
216
217     public static void assertNull(java.lang.String message, java.lang.Object object) { /* compiled code */ }
218
219     public static void assertSame(java.lang.String message, java.lang.Object expected, java.lang.Object actual) { /* compiled code */ }
220
221     public static void assertSame(java.lang.Object expected, java.lang.Object actual) { /* compiled code */ }
222
223     public static void assertNotSame(java.lang.String message, java.lang.Object expected, java.lang.Object actual) { /* compiled code */ }
224
225     public static void assertNotSame(java.lang.Object expected, java.lang.Object actual) { /* compiled code */ }
226
227     public static void failSame(java.lang.String message) { /* compiled code */ }
228
229     public static void failNotSame(java.lang.String message, java.lang.Object expected, java.lang.Object actual) { /* compiled code */ }
230
231     public static void failNotEquals(java.lang.String message, java.lang.Object expected, java.lang.Object actual) { /* compiled code */ }
232
233     public static java.lang.String format(java.lang.String message, java.lang.Object expected, java.lang.Object actual) { /* compiled code */ }
234
235     protected void setUp() throws java.lang.Exception { /* compiled code */ }
236
237     protected void tearDown() throws java.lang.Exception { /* compiled code */ }
238
239     public java.lang.String toString() { /* compiled code */ }
240
241     public java.lang.String getName() { /* compiled code */ }
242
243     public void setName(java.lang.String name) { /* compiled code */ }
244 }
245 ''')
246   }
247
248   public static void assertType(@Nullable String expected, @Nullable PsiType actual) {
249     if (expected == null) {
250       assertNull(actual)
251       return
252     }
253
254     assertNotNull(actual)
255     if (actual instanceof PsiIntersectionType) {
256       assertEquals(expected, genIntersectionTypeText(actual))
257     }
258     else {
259       assertEquals(expected, actual.canonicalText)
260     }
261   }
262
263   private static String genIntersectionTypeText(PsiIntersectionType t) {
264     StringBuilder b = new StringBuilder('[')
265     for (PsiType c : t.conjuncts) {
266       b << c.canonicalText << ','
267     }
268     if (t.conjuncts) {
269       b.replace(b.length() - 1, b.length(), ']')
270     }
271     return b
272   }
273
274 }