-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Support for namespace and var selectors
This is work towards #2, they are tested against clojure.test.
- Loading branch information
1 parent
f482eea
commit 22536b4
Showing
9 changed files
with
212 additions
and
5 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
89 changes: 89 additions & 0 deletions
89
....test/src/test/java/org/ajoberstar/jupiter/engine/clojure_test/ClojureTestEngineTest.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,89 @@ | ||
package org.ajoberstar.jupiter.engine.clojure_test; | ||
|
||
import org.junit.Test; | ||
import org.junit.gen5.engine.EngineDiscoveryRequest; | ||
import org.junit.gen5.engine.TestDescriptor; | ||
import org.junit.gen5.engine.UniqueId; | ||
import org.junit.gen5.launcher.main.TestDiscoveryRequestBuilder; | ||
|
||
import java.io.File; | ||
import java.util.List; | ||
import java.util.Set; | ||
import java.util.stream.Collectors; | ||
import java.util.stream.Stream; | ||
|
||
import static org.junit.Assert.*; | ||
import static org.junit.gen5.engine.discovery.ClasspathSelector.selectClasspathRoots; | ||
import static org.ajoberstar.jupiter.lang.clojure.NamespaceSelector.selectNamespace; | ||
import static org.ajoberstar.jupiter.lang.clojure.VarSelector.selectVar; | ||
|
||
public class ClojureTestEngineTest { | ||
@Test | ||
public void selectingByClasspathDir() { | ||
Set<File> roots = Stream.of(new File(".")).collect(Collectors.toSet()); | ||
EngineDiscoveryRequest request = TestDiscoveryRequestBuilder.request() | ||
.selectors(selectClasspathRoots(roots)) | ||
.build(); | ||
UniqueId root = UniqueId.root("sample", "test"); | ||
|
||
List<UniqueId> expectedIds = Stream.of( | ||
root.append("namespace", "sample.core-test"), | ||
root.append("namespace", "sample.other-test"), | ||
root.append("namespace", "sample.core-test").append("name", "my-sample-works"), | ||
root.append("namespace", "sample.core-test").append("name", "my-sample-fails"), | ||
root.append("namespace", "sample.other-test").append("name", "my-other-works"), | ||
root.append("namespace", "sample.other-test").append("name", "my-other-fails"), | ||
root.append("namespace", "sample.other-test").append("name", "my-other-error") | ||
).collect(Collectors.toList()); | ||
|
||
TestDescriptor descriptor = new ClojureTestEngine().discover(request, root); | ||
List<UniqueId> actualIds = descriptor.getAllDescendants().stream() | ||
.map(TestDescriptor::getUniqueId) | ||
.collect(Collectors.toList()); | ||
|
||
assertEquals(expectedIds, actualIds); | ||
} | ||
|
||
@Test | ||
public void selectingByNamespace() { | ||
EngineDiscoveryRequest request = TestDiscoveryRequestBuilder.request() | ||
.selectors(selectNamespace("sample.other-test")) | ||
.build(); | ||
UniqueId root = UniqueId.root("sample", "test"); | ||
|
||
List<UniqueId> expectedIds = Stream.of( | ||
root.append("namespace", "sample.other-test"), | ||
root.append("namespace", "sample.other-test").append("name", "my-other-works"), | ||
root.append("namespace", "sample.other-test").append("name", "my-other-fails"), | ||
root.append("namespace", "sample.other-test").append("name", "my-other-error") | ||
).collect(Collectors.toList()); | ||
|
||
TestDescriptor descriptor = new ClojureTestEngine().discover(request, root); | ||
List<UniqueId> actualIds = descriptor.getAllDescendants().stream() | ||
.map(TestDescriptor::getUniqueId) | ||
.collect(Collectors.toList()); | ||
|
||
assertEquals(expectedIds, actualIds); | ||
} | ||
|
||
|
||
@Test | ||
public void selectingByVar() { | ||
EngineDiscoveryRequest request = TestDiscoveryRequestBuilder.request() | ||
.selectors(selectVar("sample.other-test", "my-other-works")) | ||
.build(); | ||
UniqueId root = UniqueId.root("sample", "test"); | ||
|
||
List<UniqueId> expectedIds = Stream.of( | ||
root.append("namespace", "sample.other-test"), | ||
root.append("namespace", "sample.other-test").append("name", "my-other-works") | ||
).collect(Collectors.toList()); | ||
|
||
TestDescriptor descriptor = new ClojureTestEngine().discover(request, root); | ||
List<UniqueId> actualIds = descriptor.getAllDescendants().stream() | ||
.map(TestDescriptor::getUniqueId) | ||
.collect(Collectors.toList()); | ||
|
||
assertEquals(expectedIds, actualIds); | ||
} | ||
} |
8 changes: 8 additions & 0 deletions
8
jupiter-engine-clojure.test/src/test/resources/sample/core_test.clj
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,8 @@ | ||
(ns sample.core-test | ||
(:require [clojure.test :refer :all])) | ||
|
||
(deftest my-sample-works | ||
(is (= 1 (- 2 1)))) | ||
|
||
(deftest my-sample-fails | ||
(is (= 5 (+ 2 2)))) |
14 changes: 14 additions & 0 deletions
14
jupiter-engine-clojure.test/src/test/resources/sample/other_test.clj
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,14 @@ | ||
(ns sample.other-test | ||
(:require [clojure.test :refer :all])) | ||
|
||
(deftest my-other-works | ||
(is (= 1 (- 2 1)) "2 - 1 is 1")) | ||
|
||
(deftest my-other-fails | ||
(is (= 5 (+ 2 2)) "2 + 2 is 5")) | ||
|
||
(defn do-stuff [_] | ||
(throw (ex-info "Yay it works!" {}))) | ||
|
||
(deftest my-other-error | ||
(is (= 1 (do-stuff 7)) "Do stuff always returns 1")) |
31 changes: 31 additions & 0 deletions
31
...ter-lang-clojure/src/main/java/org/ajoberstar/jupiter/lang/clojure/NamespaceSelector.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,31 @@ | ||
package org.ajoberstar.jupiter.lang.clojure; | ||
|
||
import clojure.java.api.Clojure; | ||
import clojure.lang.IFn; | ||
import clojure.lang.Namespace; | ||
import org.junit.gen5.engine.DiscoverySelector; | ||
|
||
public class NamespaceSelector implements DiscoverySelector { | ||
private final Namespace namespace; | ||
|
||
private NamespaceSelector(Namespace namespace) { | ||
this.namespace = namespace; | ||
} | ||
|
||
public Namespace getNamespace() { | ||
return namespace; | ||
} | ||
|
||
public static NamespaceSelector selectNamespace(String namespace) { | ||
IFn symbol = Clojure.var("clojure.core", "symbol"); | ||
IFn require = Clojure.var("clojure.core", "require"); | ||
IFn findNs = Clojure.var("clojure.core", "find-ns"); | ||
|
||
Object sym = symbol.invoke(namespace); | ||
require.invoke(sym); | ||
|
||
Namespace ns = (Namespace) findNs.invoke(sym); | ||
|
||
return new NamespaceSelector(ns); | ||
} | ||
} |
36 changes: 36 additions & 0 deletions
36
jupiter-lang-clojure/src/main/java/org/ajoberstar/jupiter/lang/clojure/VarSelector.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,36 @@ | ||
package org.ajoberstar.jupiter.lang.clojure; | ||
|
||
import clojure.java.api.Clojure; | ||
import clojure.lang.IFn; | ||
import clojure.lang.Namespace; | ||
import clojure.lang.Var; | ||
import org.junit.gen5.engine.DiscoverySelector; | ||
|
||
public class VarSelector implements DiscoverySelector { | ||
private final Var var; | ||
|
||
private VarSelector(Var var) { | ||
this.var = var; | ||
} | ||
|
||
public Namespace getNamespace() { | ||
return var.ns; | ||
} | ||
|
||
public Var getVar() { | ||
return var; | ||
} | ||
|
||
public static VarSelector selectVar(String namespace, String name) { | ||
IFn symbol = Clojure.var("clojure.core", "symbol"); | ||
IFn require = Clojure.var("clojure.core", "require"); | ||
IFn findVar = Clojure.var("clojure.core", "find-var"); | ||
|
||
require.invoke(symbol.invoke(namespace)); | ||
|
||
Object sym = symbol.invoke(namespace, name); | ||
Var var = (Var) findVar.invoke(sym); | ||
|
||
return new VarSelector(var); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters