From e3d1c0b42669f4efe0c1df858586da3ca95b7b7a Mon Sep 17 00:00:00 2001 From: edeweerd Date: Tue, 15 Jan 2013 08:00:47 +0100 Subject: [PATCH] Added argument to handle subdir in the spec runner generation --- README.md | 1 + .../be/klak/junit/jasmine/JasmineSuite.java | 4 ++ .../klak/junit/jasmine/JasmineTestRunner.java | 8 +++- .../JasmineSuiteGeneratesRunnerTest.java | 37 ++++++++++++++++++- ...SuiteGeneratorClassWithRunnerInSubDir.java | 13 +++++++ 5 files changed, 60 insertions(+), 3 deletions(-) create mode 100644 src/test/java/be/klak/junit/jasmine/classes/JasmineSuiteGeneratorClassWithRunnerInSubDir.java diff --git a/README.md b/README.md index 628c333..b531271 100644 --- a/README.md +++ b/README.md @@ -103,6 +103,7 @@ You can still use Firebug to debug when generating a specRunner HTML file (see b * specs: one or more spec file to run. Default behavior: use java Class name (replaces Test with Spec, see example) * sources: one or more JS production file which your spec needs (included before specs, d'uh) * generateSpecRunner: (the HTML output, useful for firefox/firebug debugging etc) +* specRunnerSubDir: a subsidiary path to the default runner root directory where generated spec runners will be placed * envJs: load EnvJS support (defaults to true) ## Requirements diff --git a/src/main/java/be/klak/junit/jasmine/JasmineSuite.java b/src/main/java/be/klak/junit/jasmine/JasmineSuite.java index ddc638b..6099dbd 100644 --- a/src/main/java/be/klak/junit/jasmine/JasmineSuite.java +++ b/src/main/java/be/klak/junit/jasmine/JasmineSuite.java @@ -3,6 +3,8 @@ package be.klak.junit.jasmine; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; +import org.apache.commons.lang.StringUtils; + @Retention(RetentionPolicy.RUNTIME) public @interface JasmineSuite { @@ -22,4 +24,6 @@ public @interface JasmineSuite { * If set to false, does not load EnvJS support. */ boolean envJs() default true; + + String specRunnerSubDir() default StringUtils.EMPTY; } diff --git a/src/main/java/be/klak/junit/jasmine/JasmineTestRunner.java b/src/main/java/be/klak/junit/jasmine/JasmineTestRunner.java index cdbff8d..85cce83 100644 --- a/src/main/java/be/klak/junit/jasmine/JasmineTestRunner.java +++ b/src/main/java/be/klak/junit/jasmine/JasmineTestRunner.java @@ -121,7 +121,7 @@ public class JasmineTestRunner extends Runner { } String blankUrlStr = blankUrl.toExternalForm(); - + // "file:/path/to/file" is not legal, but "file:///path/to/file" is if (blankUrlStr.startsWith("file:/") && (! blankUrlStr.startsWith("file:///"))) { blankUrlStr = "file://" + blankUrlStr.substring(5); @@ -212,7 +212,11 @@ public class JasmineTestRunner extends Runner { private void generateSpecRunnerIfNeeded() { if (suiteAnnotation.generateSpecRunner()) { String[] jasmineSpecs = getJasmineSpecs(suiteAnnotation); - new JasmineSpecRunnerGenerator(jasmineSpecs, suiteAnnotation, suiteAnnotation.jsRootDir() + "/runners", + StringBuffer outputPath = new StringBuffer(suiteAnnotation.jsRootDir()).append("/runners"); + if (StringUtils.isNotBlank(suiteAnnotation.specRunnerSubDir())) { + outputPath.append('/').append(suiteAnnotation.specRunnerSubDir()); + } + new JasmineSpecRunnerGenerator(jasmineSpecs, suiteAnnotation, outputPath.toString(), testClass.getSimpleName() + "Runner.html") .generate(); diff --git a/src/test/java/be/klak/junit/jasmine/JasmineSuiteGeneratesRunnerTest.java b/src/test/java/be/klak/junit/jasmine/JasmineSuiteGeneratesRunnerTest.java index 634dee3..6dbe012 100644 --- a/src/test/java/be/klak/junit/jasmine/JasmineSuiteGeneratesRunnerTest.java +++ b/src/test/java/be/klak/junit/jasmine/JasmineSuiteGeneratesRunnerTest.java @@ -7,6 +7,7 @@ import java.io.IOException; import org.apache.commons.io.FileUtils; +import org.apache.commons.lang.StringUtils; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; @@ -16,6 +17,7 @@ import org.mockito.runners.MockitoJUnitRunner; import be.klak.junit.jasmine.JasmineTestRunner; import be.klak.junit.jasmine.classes.JasmineSuiteGeneratorClassWithRunner; +import be.klak.junit.jasmine.classes.JasmineSuiteGeneratorClassWithRunnerInSubDir; import be.klak.junit.jasmine.classes.JasmineSuiteGeneratorClassWithoutRunner; @RunWith(MockitoJUnitRunner.class) @@ -57,8 +59,41 @@ public class JasmineSuiteGeneratesRunnerTest { "./../specs/spec2.js"); } + @Test + public void generateJasmineTestRunnerAfterRunningTestsWithSubDir() throws IOException { + Class testClass = + JasmineSuiteGeneratorClassWithRunnerInSubDir.class; + new JasmineTestRunner(testClass).run(notifierMock); + + File runnerResult = getTestRunnerResultFile(testClass, "subDir1/subDir2"); + assertThat(runnerResult.isFile()).isTrue(); + + String runnerContent = FileUtils.readFileToString(runnerResult); + + assertThat(runnerContent).contains("jasmine.getEnv().addReporter(new jasmine.TrivialReporter());"); + assertJSFileIncluded(runnerContent, + "./../../../main/webapp/js/source1.js", + "./../../../main/webapp/js/source2.js", + "./../specs/spec1.js", + "./../specs/spec2.js"); + + } + private File getTestRunnerResultFile(Class testClass) { - return new File(RUNNERS_OUTPUT_DIR + testClass.getSimpleName() + "Runner.html"); + return getTestRunnerResultFile(testClass, StringUtils.EMPTY); + } + +// private File getTestRunnerResultFile(Class testClass) { +// return new File(RUNNERS_OUTPUT_DIR + testClass.getSimpleName() + "Runner.html"); +// } + + private File getTestRunnerResultFile(Class testClass, String subDir) { + StringBuffer filePath = new StringBuffer(RUNNERS_OUTPUT_DIR); + if (StringUtils.isNotBlank(subDir)) { + filePath.append(subDir).append('/'); + } + filePath.append(testClass.getSimpleName()).append("Runner.html"); + return new File(filePath.toString()); } private void assertJSFileIncluded(String rawContent, String... files) { diff --git a/src/test/java/be/klak/junit/jasmine/classes/JasmineSuiteGeneratorClassWithRunnerInSubDir.java b/src/test/java/be/klak/junit/jasmine/classes/JasmineSuiteGeneratorClassWithRunnerInSubDir.java new file mode 100644 index 0000000..1ec0160 --- /dev/null +++ b/src/test/java/be/klak/junit/jasmine/classes/JasmineSuiteGeneratorClassWithRunnerInSubDir.java @@ -0,0 +1,13 @@ +package be.klak.junit.jasmine.classes; + +import be.klak.junit.jasmine.JasmineSuite; + +@JasmineSuite( + specs = { "spec1.js", "spec2.js" }, + sources = { "source1.js", "source2.js" }, + sourcesRootDir = "src/test/javascript/sources/", + generateSpecRunner = true, + specRunnerSubDir = "subDir1/subDir2") +public class JasmineSuiteGeneratorClassWithRunnerInSubDir { + +}