Skip to content

Commit 32a6fc6

Browse files
author
Quang Tran
committed
IDE-2453: Add test discovery tests for N4JSX
1 parent 0fad20e commit 32a6fc6

File tree

10 files changed

+129
-6
lines changed

10 files changed

+129
-6
lines changed

plugins/eu.numberfour.n4js.tester/src/eu/numberfour/n4js/tester/TestDiscoveryHelper.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@
1818
import static com.google.common.collect.Maps.newHashMap;
1919
import static com.google.common.collect.Sets.newHashSet;
2020
import static eu.numberfour.n4js.AnnotationDefinition.TEST_METHOD;
21-
import static eu.numberfour.n4js.N4JSGlobals.N4JS_FILE_EXTENSION;
2221
import static eu.numberfour.n4js.resource.N4JSResourceDescriptionStrategy.ABSTRACT_KEY;
2322
import static eu.numberfour.n4js.resource.N4JSResourceDescriptionStrategy.EXPORTED_CLASS_KEY;
2423
import static eu.numberfour.n4js.resource.N4JSResourceDescriptionStrategy.TEST_CLASS_KEY;
@@ -306,7 +305,10 @@ private TestTree collectTests(final ResourceSet resSet, final IResourceDescripti
306305
if (locations.length > 0) {
307306
final URI uri = locations[0];
308307
name = valueOf(uri.trimFragment()).replaceFirst("platform:/resource/", "");
309-
name = name.replace("." + N4JS_FILE_EXTENSION, "");
308+
// name = name.replace("." + N4JS_FILE_EXTENSION, "");
309+
if (name.lastIndexOf('.') > 0) {
310+
name = name.substring(0, name.lastIndexOf('.'));
311+
}
310312
// Assuming one single test case.
311313
if (uri.hasFragment() && !suites.isEmpty() && !suites.get(0).getTestCases().isEmpty()) {
312314
name = name + "#" + suites.get(0).getTestCases().get(0).getDisplayName();

plugins/eu.numberfour.n4js.tester/src/eu/numberfour/n4js/tester/extension/TestFileExtensionsRegistry.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,4 +77,11 @@ private void initialize() {
7777
}
7878
}
7979

80+
/**
81+
* Reset the list of test file extensions to empty
82+
*/
83+
public void reset() {
84+
isInitialized = false;
85+
testFileExtensions.clear();
86+
}
8087
}

plugins/eu.numberfour.n4js/src/eu/numberfour/n4js/internal/N4JSRuntimeCore.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -143,7 +143,11 @@ private void createAllResourcesWorkspace(ResourceSet resourceSet) {
143143
}
144144
}
145145

146-
private boolean isN4File(final URI uri) {
146+
/**
147+
* Return true if the URI is a recognized N4 file. Sub-languages should override this method to provide additional
148+
* file extensions!
149+
*/
150+
protected boolean isN4File(final URI uri) {
147151
final String ext = uri != null ? uri.fileExtension() : null;
148152
return N4JSGlobals.ALL_N4_FILE_EXTENSIONS.contains(ext);
149153
}

plugins/eu.numberfour.n4jsx/src/eu/numberfour/n4jsx/N4JSXGlobals.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,12 @@
1010
*/
1111
package eu.numberfour.n4jsx;
1212

13+
import static com.google.common.collect.Sets.newLinkedHashSet;
14+
import static java.util.Arrays.asList;
15+
import static java.util.Collections.unmodifiableCollection;
16+
17+
import java.util.Collection;
18+
1319
/**
1420
* Globals for N4JSX sub-language
1521
*/
@@ -25,6 +31,13 @@ public final class N4JSXGlobals {
2531
*/
2632
public static final String N4JSX_FILE_EXTENSION = "n4jsx";
2733

34+
/**
35+
* Unmodifiable list containing {@link #N4JSX_FILE_EXTENSION} and {@link #JSX_FILE_EXTENSION}.
36+
*/
37+
public static final Collection<String> ALL_JSX_FILE_EXTENSIONS = unmodifiableCollection(newLinkedHashSet(asList(
38+
N4JSX_FILE_EXTENSION,
39+
JSX_FILE_EXTENSION)));
40+
2841
private N4JSXGlobals() {
2942
// private to prevent inheritance & instantiation.
3043
}

plugins/eu.numberfour.n4jsx/src/eu/numberfour/n4jsx/internal/N4JSXRuntimeCore.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
import eu.numberfour.n4js.internal.FileBasedWorkspace;
1919
import eu.numberfour.n4js.internal.N4JSModel;
2020
import eu.numberfour.n4js.internal.N4JSRuntimeCore;
21+
import eu.numberfour.n4jsx.N4JSXGlobals;
2122
import eu.numberfour.n4jsx.validation.N4JSXResourceType;
2223

2324
/**
@@ -51,4 +52,14 @@ protected boolean isJsFile(URI uri) {
5152
}
5253
return super.isJsFile(uri);
5354
}
55+
56+
/**
57+
* Return true if the URI is a recognized N4 file. Provide .n4jsx and .jsx recognized file extensions file
58+
* extensions!
59+
*/
60+
@Override
61+
protected boolean isN4File(final URI uri) {
62+
final String ext = uri != null ? uri.fileExtension() : null;
63+
return N4JSXGlobals.ALL_JSX_FILE_EXTENSIONS.contains(ext) || super.isN4File(uri);
64+
}
5465
}

tests/eu.numberfour.n4js.tester.tests/META-INF/MANIFEST.MF

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,5 +9,6 @@ Bundle-RequiredExecutionEnvironment: JavaSE-1.8
99
Require-Bundle: eu.numberfour.n4js.tester.tests.helper,
1010
com.google.guava,
1111
org.eclipse.xtend.lib,
12-
org.junit
12+
org.junit,
13+
eu.numberfour.n4jsx
1314
Import-Package: org.apache.log4j.varia;version="1.2.15"
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
ProjectId: test.discovery.example.project.n4jsx
2+
VendorId: eu.numberfour
3+
VendorName: "NumberFour AG"
4+
ProjectType: library
5+
ProjectVersion: 0.0.1-SNAPSHOT
6+
Output: "src-gen"
7+
Sources {
8+
test {
9+
"src"
10+
}
11+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
export class D {
2+
@Test
3+
public foo(): void {
4+
}
5+
6+
@Test
7+
@Ignore
8+
public bar(): void {
9+
}
10+
}
11+
12+
export class E {
13+
@Test
14+
public foo2(): void {
15+
}
16+
17+
@Test
18+
@Ignore
19+
public bar2(): void {
20+
}
21+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
export class F {
2+
@Test
3+
public f1(): void {
4+
}
5+
6+
@Test
7+
public f2(): void {
8+
}
9+
10+
@Test
11+
public f3(): void {
12+
}
13+
}

tests/eu.numberfour.n4js.tester.tests/src/eu/numberfour/n4js/tester/tests/discovery/HeadlessTestDiscoveryTest.java

Lines changed: 42 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,15 +36,18 @@
3636
import com.google.inject.Inject;
3737
import com.google.inject.Injector;
3838

39-
import eu.numberfour.n4js.N4JSStandaloneSetup;
39+
import eu.numberfour.n4js.N4JSGlobals;
4040
import eu.numberfour.n4js.internal.FileBasedWorkspace;
4141
import eu.numberfour.n4js.tester.TestDiscoveryHelper;
4242
import eu.numberfour.n4js.tester.TesterModule;
4343
import eu.numberfour.n4js.tester.domain.TestSuite;
4444
import eu.numberfour.n4js.tester.domain.TestTree;
45+
import eu.numberfour.n4js.tester.extension.TestFileExtensionsRegistry;
4546
import eu.numberfour.n4js.tester.tests.InjectedModules;
4647
import eu.numberfour.n4js.tester.tests.JUnitGuiceClassRunner;
4748
import eu.numberfour.n4js.tester.tests.WithParentInjector;
49+
import eu.numberfour.n4jsx.N4JSXGlobals;
50+
import eu.numberfour.n4jsx.N4JSXStandaloneSetup;
4851

4952
/**
5053
* Class for testing the behavior of the {@link TestDiscoveryHelper} in headless mode.
@@ -69,15 +72,27 @@ public class HeadlessTestDiscoveryTest {
6972
private static final File TEST_CLASS_FILE_IDEBUG_572 = new File(TEST_SRC_FOLDER_IDEBUG_572,
7073
"/path/to/the/source/" + TEST_CLASS_2 + ".n4js");
7174

75+
// Test project with mxied N4JS and N4JSX
76+
private static final String TEST_N4JSX_PROJECT_NAME = "test.discovery.example.project.n4jsx";
77+
private static final File TEST_N4JSX_PROJECT = new File(RESOURCES_FOLDER + separator + TEST_N4JSX_PROJECT_NAME);
78+
79+
private static final String TEST_N4JSX_CLASS_3 = "TestClass_3";
80+
private static final String TEST_N4JSX_CLASS_4 = "TestClass_4";
81+
private static final File TEST_N4JSX_CLASS_FILE = new File(TEST_SRC_FOLDER,
82+
"/path/to/the/source/" + TEST_N4JSX_CLASS_3 + ".n4jsx");
83+
7284
/***/
7385
@WithParentInjector
7486
public static Injector getParentInjector() {
75-
return new N4JSStandaloneSetup().createInjectorAndDoEMFRegistration();
87+
return new N4JSXStandaloneSetup().createInjectorAndDoEMFRegistration();
7688
}
7789

7890
@Inject
7991
private TestDiscoveryHelper helper;
8092

93+
@Inject
94+
private TestFileExtensionsRegistry testFileExtensionsRegistry;
95+
8196
@Inject
8297
private FileBasedWorkspace fbWorkspace;
8398

@@ -86,6 +101,11 @@ public static Injector getParentInjector() {
86101
public void prepareIN4JSCore() {
87102
fbWorkspace.registerProject(URI.createFileURI(TEST_PROJECT.getAbsolutePath()));
88103
fbWorkspace.registerProject(URI.createFileURI(TEST_PROJECT_IDEBUG_572.getAbsolutePath()));
104+
fbWorkspace.registerProject(URI.createFileURI(TEST_N4JSX_PROJECT.getAbsolutePath()));
105+
// Register test file extensions .n4js and .n4jsx
106+
testFileExtensionsRegistry.reset();
107+
testFileExtensionsRegistry.register(N4JSGlobals.N4JS_FILE_EXTENSION);
108+
testFileExtensionsRegistry.register(N4JSXGlobals.N4JSX_FILE_EXTENSION);
89109
}
90110

91111
/***/
@@ -218,6 +238,26 @@ public void testDiscoveryForExistingProjectFolderAndFile_WithExportFiltering() {
218238
assertTestCaseCountForSuite(actual, TEST_SRC_STRUCTURE + "." + TEST_CLASS_1 + ".C", 1);
219239
}
220240

241+
/** N4JSX test discovery tests */
242+
@Test
243+
public void testDiscoveryN4JSXExpectNonNullTestTree() {
244+
assertNotNull(TEST_N4JSX_PROJECT + "", helper.collectTests(toURI(TEST_N4JSX_PROJECT)));
245+
}
246+
247+
/***/
248+
@Test
249+
public void testDiscoveryN4JSXForSingleExistingProject() {
250+
final TestTree actual = helper.collectTests(toURI(TEST_N4JSX_PROJECT));
251+
assertTestSuiteCount(actual, 3);
252+
assertTestSuiteNames(actual,
253+
TEST_SRC_STRUCTURE + "." + TEST_N4JSX_CLASS_3 + ".D",
254+
TEST_SRC_STRUCTURE + "." + TEST_N4JSX_CLASS_3 + ".E",
255+
TEST_SRC_STRUCTURE + "." + TEST_N4JSX_CLASS_4 + ".F");
256+
assertTestCaseCount(actual, 7);
257+
assertTestCaseCountForSuite(actual, TEST_SRC_STRUCTURE + "." + TEST_N4JSX_CLASS_3 + ".D", 2);
258+
assertTestCaseCountForSuite(actual, TEST_SRC_STRUCTURE + "." + TEST_N4JSX_CLASS_3 + ".E", 2);
259+
}
260+
221261
private void assertTestSuiteCount(final TestTree actual, final int expected) {
222262
assertNotNull(actual);
223263
assertEquals(expected, actual.getSuites().size());

0 commit comments

Comments
 (0)