From 60d7e78c90fd6fb5bdb7a72d1176b820c35b7469 Mon Sep 17 00:00:00 2001
From: Nigel Charman
Date: Sun, 18 Mar 2018 12:42:22 +1300
Subject: [PATCH 01/42] Initial fix, using ThreadLocal to pass fixture to
example listeners
---
src/main/java/org/concordion/Concordion.java | 2 +-
.../api/SpecificationByExample.java | 3 +-
.../concordion/api/listener/ExampleEvent.java | 9 +++-
.../api/listener/OuterExampleEvent.java | 9 +++-
.../internal/ConcordionBuilder.java | 2 +-
...cationToSpecificationByExampleAdaptor.java | 2 +-
.../concordion/internal/XMLSpecification.java | 6 ++-
.../internal/command/ExampleCommand.java | 14 ++++---
.../command/SpecificationCommand.java | 15 ++++---
.../internal/listener/FixtureExampleHook.java | 15 ++-----
.../BeforeAndAfterMethodHooksFixture.java | 42 +++++++++++++++++++
.../annotation/BeforeAndAfterMethodHooks.md | 16 ++++++-
12 files changed, 104 insertions(+), 31 deletions(-)
diff --git a/src/main/java/org/concordion/Concordion.java b/src/main/java/org/concordion/Concordion.java
index 8451f4f91..5021ba411 100644
--- a/src/main/java/org/concordion/Concordion.java
+++ b/src/main/java/org/concordion/Concordion.java
@@ -100,7 +100,7 @@ public boolean hasExampleCommands(Fixture fixture) throws IOException {
public ResultSummary processExample(Fixture fixture, String example) throws IOException {
SummarizingResultRecorder resultRecorder = new SummarizingResultRecorder(example);
- getSpecification(fixture).processExample(evaluatorFactory.createEvaluator(fixture.getFixtureObject()), example, resultRecorder);
+ getSpecification(fixture).processExample(fixture, evaluatorFactory.createEvaluator(fixture.getFixtureObject()), example, resultRecorder);
return resultRecorder;
}
diff --git a/src/main/java/org/concordion/api/SpecificationByExample.java b/src/main/java/org/concordion/api/SpecificationByExample.java
index d981b8b05..a93dd6873 100644
--- a/src/main/java/org/concordion/api/SpecificationByExample.java
+++ b/src/main/java/org/concordion/api/SpecificationByExample.java
@@ -41,11 +41,12 @@ public interface SpecificationByExample extends Specification {
/**
* Processes a single example.
*
+ * @param fixture the example's fixture
* @param evaluator evaluator
* @param example name of the example
* @param resultRecorder result recorder
*/
- void processExample(Evaluator evaluator, String example, ResultRecorder resultRecorder);
+ void processExample(Fixture fixture, Evaluator evaluator, String example, ResultRecorder resultRecorder);
/**
* Called once all examples have been executed so the spec can do things like "save HTML results to file".
diff --git a/src/main/java/org/concordion/api/listener/ExampleEvent.java b/src/main/java/org/concordion/api/listener/ExampleEvent.java
index 5705b45e1..fe26b3d6c 100644
--- a/src/main/java/org/concordion/api/listener/ExampleEvent.java
+++ b/src/main/java/org/concordion/api/listener/ExampleEvent.java
@@ -1,6 +1,7 @@
package org.concordion.api.listener;
import org.concordion.api.Element;
+import org.concordion.api.Fixture;
import org.concordion.api.ResultSummary;
/**
@@ -11,11 +12,13 @@ public class ExampleEvent {
private final Element element;
private final ResultSummary resultSummary;
private final String exampleName;
+ private final Fixture fixture;
- public ExampleEvent(String exampleName, Element element, ResultSummary resultSummary) {
+ public ExampleEvent(String exampleName, Element element, ResultSummary resultSummary, Fixture fixture) {
this.exampleName = exampleName;
this.resultSummary = resultSummary;
this.element = element;
+ this.fixture = fixture;
}
public Element getElement() {
@@ -29,4 +32,8 @@ public ResultSummary getResultSummary() {
public String getExampleName() {
return exampleName;
}
+
+ public Fixture getFixture() {
+ return fixture;
+ }
}
diff --git a/src/main/java/org/concordion/api/listener/OuterExampleEvent.java b/src/main/java/org/concordion/api/listener/OuterExampleEvent.java
index 9d5254c91..cadc830a6 100644
--- a/src/main/java/org/concordion/api/listener/OuterExampleEvent.java
+++ b/src/main/java/org/concordion/api/listener/OuterExampleEvent.java
@@ -1,6 +1,7 @@
package org.concordion.api.listener;
import org.concordion.api.Element;
+import org.concordion.api.Fixture;
import org.concordion.api.ResultSummary;
/**
@@ -9,13 +10,15 @@
public class OuterExampleEvent {
private final Element element;
+ private final Fixture fixture;
private final ResultSummary resultSummary;
private final String exampleName;
- public OuterExampleEvent(String exampleName, Element element, ResultSummary resultSummary) {
+ public OuterExampleEvent(String exampleName, Element element, ResultSummary resultSummary, Fixture fixture) {
this.exampleName = exampleName;
this.resultSummary = resultSummary;
this.element = element;
+ this.fixture = fixture;
}
public Element getElement() {
@@ -29,4 +32,8 @@ public ResultSummary getResultSummary() {
public String getExampleName() {
return exampleName;
}
+
+ public Fixture getFixture() {
+ return fixture;
+ }
}
diff --git a/src/main/java/org/concordion/internal/ConcordionBuilder.java b/src/main/java/org/concordion/internal/ConcordionBuilder.java
index 15e6a45e8..652eb4fdb 100644
--- a/src/main/java/org/concordion/internal/ConcordionBuilder.java
+++ b/src/main/java/org/concordion/internal/ConcordionBuilder.java
@@ -285,7 +285,7 @@ public Concordion build() throws UnableToBuildConcordionException {
withThrowableListener(0, new ThrowableRenderer(resourceSource));
withRunListener(new RunResultRenderer(resourceSource));
- FixtureExampleHook fixtureExampleHook = new FixtureExampleHook(fixture);
+ FixtureExampleHook fixtureExampleHook = new FixtureExampleHook();
withOuterExampleListener(fixtureExampleHook);
withExampleListener(fixtureExampleHook);
diff --git a/src/main/java/org/concordion/internal/SpecificationToSpecificationByExampleAdaptor.java b/src/main/java/org/concordion/internal/SpecificationToSpecificationByExampleAdaptor.java
index 0939d6cde..b437520bf 100644
--- a/src/main/java/org/concordion/internal/SpecificationToSpecificationByExampleAdaptor.java
+++ b/src/main/java/org/concordion/internal/SpecificationToSpecificationByExampleAdaptor.java
@@ -25,7 +25,7 @@ public void setFixture(Fixture fixture) {
testDescription = fixture.getSpecificationDescription();
}
- public void processExample(Evaluator evaluator, String example, ResultRecorder resultRecorder) {
+ public void processExample(Fixture fixture, Evaluator evaluator, String example, ResultRecorder resultRecorder) {
if (testDescription.equals(example)) {
specification.process(evaluator, resultRecorder);
}
diff --git a/src/main/java/org/concordion/internal/XMLSpecification.java b/src/main/java/org/concordion/internal/XMLSpecification.java
index 7b583cd0c..39ec9523a 100644
--- a/src/main/java/org/concordion/internal/XMLSpecification.java
+++ b/src/main/java/org/concordion/internal/XMLSpecification.java
@@ -11,6 +11,7 @@ public class XMLSpecification implements SpecificationByExample {
public static final String OUTER_EXAMPLE_NAME = "[Outer]";
public static final String OUTER_EXAMPLE_SUFFIX = " " + OUTER_EXAMPLE_NAME;
+ public static final ThreadLocal FIXTURE_HOLDER = new ThreadLocal();
private String testDescription;
private final CommandCall rootCommandNode;
@@ -66,6 +67,8 @@ public void process(Evaluator evaluator, ResultRecorder resultRecorder) {
}
public void setFixture(Fixture fixture) {
+ FIXTURE_HOLDER.set(fixture);
+
if (hasExampleCommandNodes()) {
testDescription = OUTER_EXAMPLE_NAME;
} else {
@@ -73,12 +76,13 @@ public void setFixture(Fixture fixture) {
}
}
- public void processExample(Evaluator evaluator, String example, ResultRecorder resultRecorder) {
+ public void processExample(Fixture fixture, Evaluator evaluator, String example, ResultRecorder resultRecorder) {
if (testDescription.equals(example)) {
processNode(rootCommandNode, evaluator, resultRecorder);
return;
}
+ FIXTURE_HOLDER.set(fixture);
for (ExampleCommandCall commandCall: examples) {
if (commandCall.getExampleName().equals(example)) {
resultRecorder.setForExample(true);
diff --git a/src/main/java/org/concordion/internal/command/ExampleCommand.java b/src/main/java/org/concordion/internal/command/ExampleCommand.java
index 70291b98d..2db5f2d46 100644
--- a/src/main/java/org/concordion/internal/command/ExampleCommand.java
+++ b/src/main/java/org/concordion/internal/command/ExampleCommand.java
@@ -35,7 +35,8 @@ public void execute(CommandCall node, Evaluator evaluator, ResultRecorder result
specificationDescriber.getDescription(node.getResource(), exampleName));
if (!isBeforeExample) {
- announceBeforeExample(exampleName, node.getElement(), resultRecorder);
+ Fixture fixture = XMLSpecification.FIXTURE_HOLDER.get();
+ announceBeforeExample(exampleName, node.getElement(), resultRecorder, fixture);
}
try {
@@ -46,7 +47,8 @@ public void execute(CommandCall node, Evaluator evaluator, ResultRecorder result
setupCommandForExample(node, resultRecorder, exampleName);
if (!isBeforeExample) {
- announceAfterExample(exampleName, node.getElement(), resultRecorder);
+ Fixture fixture = XMLSpecification.FIXTURE_HOLDER.get();
+ announceAfterExample(exampleName, node.getElement(), resultRecorder, fixture);
}
}
@@ -110,15 +112,15 @@ public void setSpecificationDescriber(SpecificationDescriber specificationDescri
this.specificationDescriber = specificationDescriber;
}
- private void announceBeforeExample(String exampleName, Element element, ResultRecorder resultRecorder) {
+ private void announceBeforeExample(String exampleName, Element element, ResultRecorder resultRecorder, Fixture fixture) {
for (ExampleListener listener : listeners) {
- listener.beforeExample(new ExampleEvent(exampleName, element, (SummarizingResultRecorder)resultRecorder));
+ listener.beforeExample(new ExampleEvent(exampleName, element, (SummarizingResultRecorder)resultRecorder, fixture));
}
}
- private void announceAfterExample(String exampleName, Element element, ResultRecorder resultRecorder) {
+ private void announceAfterExample(String exampleName, Element element, ResultRecorder resultRecorder, Fixture fixture) {
for (int i = listeners.size() - 1; i >= 0; i--) {
- listeners.get(i).afterExample(new ExampleEvent(exampleName, element, (SummarizingResultRecorder)resultRecorder));
+ listeners.get(i).afterExample(new ExampleEvent(exampleName, element, (SummarizingResultRecorder)resultRecorder, fixture));
}
}
}
diff --git a/src/main/java/org/concordion/internal/command/SpecificationCommand.java b/src/main/java/org/concordion/internal/command/SpecificationCommand.java
index a4cedc7dc..b689a8eca 100644
--- a/src/main/java/org/concordion/internal/command/SpecificationCommand.java
+++ b/src/main/java/org/concordion/internal/command/SpecificationCommand.java
@@ -11,6 +11,7 @@
import org.concordion.internal.FailFastException;
import org.concordion.internal.SpecificationDescriber;
import org.concordion.internal.SummarizingResultRecorder;
+import org.concordion.internal.XMLSpecification;
import static org.concordion.internal.XMLSpecification.OUTER_EXAMPLE_NAME;
@@ -32,12 +33,14 @@ public void execute(CommandCall commandCall, Evaluator evaluator, ResultRecorder
}
try {
- announceBeforeOuterExampleEvent(commandCall.getElement(), (SummarizingResultRecorder) resultRecorder);
+ Fixture fixture = XMLSpecification.FIXTURE_HOLDER.get();
+ announceBeforeOuterExampleEvent(commandCall.getElement(), (SummarizingResultRecorder) resultRecorder, fixture);
commandCall.getChildren().processSequentially(evaluator, resultRecorder);
} catch (FailFastException e) {
// Ignore - it'll be re-thrown later if necessary.
} finally {
- announceAfterOuterExampleEvent(commandCall.getElement(), (SummarizingResultRecorder) resultRecorder);
+ Fixture fixture = XMLSpecification.FIXTURE_HOLDER.get();
+ announceAfterOuterExampleEvent(commandCall.getElement(), (SummarizingResultRecorder) resultRecorder, fixture);
}
}
@@ -90,15 +93,15 @@ private void announceBeforeProcessingEvent(Resource resource, Element element) {
}
}
- private void announceBeforeOuterExampleEvent(Element element, ResultSummary resultSummary) {
+ private void announceBeforeOuterExampleEvent(Element element, ResultSummary resultSummary, Fixture fixture) {
for (OuterExampleListener listener : outerExampleListeners) {
- listener.beforeOuterExample(new OuterExampleEvent(OUTER_EXAMPLE_NAME, element, resultSummary));
+ listener.beforeOuterExample(new OuterExampleEvent(OUTER_EXAMPLE_NAME, element, resultSummary, fixture));
}
}
- private void announceAfterOuterExampleEvent(Element element, ResultSummary resultSummary) {
+ private void announceAfterOuterExampleEvent(Element element, ResultSummary resultSummary, Fixture fixture) {
for (int i = outerExampleListeners.size() - 1; i >= 0; i--) {
- outerExampleListeners.get(i).afterOuterExample(new OuterExampleEvent(OUTER_EXAMPLE_NAME, element, resultSummary));
+ outerExampleListeners.get(i).afterOuterExample(new OuterExampleEvent(OUTER_EXAMPLE_NAME, element, resultSummary, fixture));
}
}
}
diff --git a/src/main/java/org/concordion/internal/listener/FixtureExampleHook.java b/src/main/java/org/concordion/internal/listener/FixtureExampleHook.java
index e987fd377..f35fbf8b1 100644
--- a/src/main/java/org/concordion/internal/listener/FixtureExampleHook.java
+++ b/src/main/java/org/concordion/internal/listener/FixtureExampleHook.java
@@ -1,35 +1,28 @@
package org.concordion.internal.listener;
-import org.concordion.api.Fixture;
import org.concordion.api.listener.ExampleEvent;
import org.concordion.api.listener.ExampleListener;
import org.concordion.api.listener.OuterExampleEvent;
import org.concordion.api.listener.OuterExampleListener;
public class FixtureExampleHook implements OuterExampleListener, ExampleListener {
- private final Fixture fixture;
-
- public FixtureExampleHook(Fixture fixture) {
- this.fixture = fixture;
- }
-
@Override
public void beforeOuterExample(OuterExampleEvent event) {
- fixture.beforeExample(event.getExampleName());
+ event.getFixture().beforeExample(event.getExampleName());
}
@Override
public void afterOuterExample(OuterExampleEvent event) {
- fixture.afterExample(event.getExampleName());
+ event.getFixture().afterExample(event.getExampleName());
}
@Override
public void beforeExample(ExampleEvent event) {
- fixture.beforeExample(event.getExampleName());
+ event.getFixture().beforeExample(event.getExampleName());
}
@Override
public void afterExample(ExampleEvent event) {
- fixture.afterExample(event.getExampleName());
+ event.getFixture().afterExample(event.getExampleName());
}
}
\ No newline at end of file
diff --git a/src/test/java/spec/concordion/annotation/BeforeAndAfterMethodHooksFixture.java b/src/test/java/spec/concordion/annotation/BeforeAndAfterMethodHooksFixture.java
index 9b908e01b..bdc4ce08f 100644
--- a/src/test/java/spec/concordion/annotation/BeforeAndAfterMethodHooksFixture.java
+++ b/src/test/java/spec/concordion/annotation/BeforeAndAfterMethodHooksFixture.java
@@ -1,13 +1,20 @@
package spec.concordion.annotation;
import java.util.List;
+import java.util.concurrent.atomic.AtomicInteger;
+import org.concordion.api.BeforeExample;
+import org.concordion.api.ExampleName;
+import org.concordion.api.Scope;
+import org.concordion.api.ScopedObjectHolder;
import org.concordion.integration.junit4.ConcordionRunner;
import org.junit.runner.RunWith;
import test.concordion.RunCommandSimulator;
@RunWith(ConcordionRunner.class)
public class BeforeAndAfterMethodHooksFixture {
+ private String exampleName;
+
public List getLog() {
return BeforeAndAfterLoggingFixture.getLog();
}
@@ -19,4 +26,39 @@ public List getListenerLog() {
public void simulateRun(final String href) throws Exception {
new RunCommandSimulator().simulate(href, this.getClass());
}
+
+ @org.concordion.api.ConcordionScoped(Scope.EXAMPLE)
+ private ScopedObjectHolder exampleScopedCounter = new ScopedObjectHolder() {
+ @Override
+ protected AtomicInteger create() {
+ return new AtomicInteger();
+ }
+
+ @Override
+ protected void destroy(AtomicInteger counter) {
+ counter.set(-1);
+ }
+
+ };
+
+ private int fieldCounter = 0;
+
+ public int getFieldCounter() {
+ return fieldCounter;
+ }
+
+ public int getExampleScopedCounter() {
+ return exampleScopedCounter.get().get();
+ }
+
+ @BeforeExample
+ public void incrementAllCounters(@ExampleName String name) {
+ exampleName = name;
+ fieldCounter++;
+ exampleScopedCounter.get().addAndGet(1);
+ }
+
+ public String getExampleName() {
+ return exampleName;
+ }
}
diff --git a/src/test/resources/spec/concordion/annotation/BeforeAndAfterMethodHooks.md b/src/test/resources/spec/concordion/annotation/BeforeAndAfterMethodHooks.md
index 45eb266ea..c72d503f3 100644
--- a/src/test/resources/spec/concordion/annotation/BeforeAndAfterMethodHooks.md
+++ b/src/test/resources/spec/concordion/annotation/BeforeAndAfterMethodHooks.md
@@ -11,7 +11,21 @@ Optionally, the method can have a String parameter annotated with `@ExampleName`
@BeforeExample
public void setupExample(@ExampleName exampleName) {
- }
+ }
+
+We have two examples below. Each example increments an AtomicInteger that is [scoped](ConcordionScoped.md "c:run") differently and echoes the value.
+
+### [Test that increments counters](- "firstTest")
+
+* Example name is [firstTest](- "?=getExampleName()")
+* Unannotated field value is [1](- "?=getFieldCounter()")
+* Example scope value is [1](- "?=getExampleScopedCounter()")
+
+### [The same test again](- "secondTest")
+
+* Example name is [secondTest](- "?=getExampleName()")
+* Unannotated field value is [1](- "?=getFieldCounter()")
+* Example scope value is [1](- "?=getExampleScopedCounter()")
## Specification hooks
From 8d5bc5b22a3956b986caddf377334083d92ac2cc Mon Sep 17 00:00:00 2001
From: Nigel Charman
Date: Sun, 18 Mar 2018 13:14:40 +1300
Subject: [PATCH 02/42] Pass fixture as parameter as needed
---
src/main/java/org/concordion/Concordion.java | 2 +-
.../org/concordion/api/AbstractCommand.java | 4 ++--
.../api/AbstractCommandDecorator.java | 8 ++++----
src/main/java/org/concordion/api/Command.java | 4 ++--
.../java/org/concordion/api/CommandCall.java | 8 ++++----
.../org/concordion/api/CommandCallList.java | 14 +++++++-------
.../java/org/concordion/api/Specification.java | 2 +-
...icationToSpecificationByExampleAdaptor.java | 6 +++---
.../concordion/internal/XMLSpecification.java | 18 +++++++-----------
.../internal/command/AssertEqualsCommand.java | 2 +-
.../internal/command/BooleanCommand.java | 6 +++---
.../internal/command/EchoCommand.java | 8 ++------
.../internal/command/ExampleCommand.java | 6 ++----
.../internal/command/RunCommand.java | 2 +-
.../internal/command/SpecificationCommand.java | 8 +++-----
.../internal/command/VerifyRowsCommand.java | 9 +++------
.../command/executeCommand/ExecuteCommand.java | 12 ++++++------
...AbstractChangingOrderRowsMatchStrategy.java | 15 ++++++++-------
.../command/strategies/BestMatchStrategy.java | 5 +++--
.../strategies/DefaultMatchStrategy.java | 4 ++--
.../command/strategies/KeyMatchStrategy.java | 4 ++--
.../command/strategies/RowsMatchStrategy.java | 7 ++-----
.../BeforeAndAfterMethodHooksFixture.java | 3 ++-
.../results/runTotals/RunTotalsFixture.java | 11 ++++++++++-
.../test/concordion/RunCommandSimulator.java | 9 +++------
.../concordion/extension/CommandExtension.java | 10 +++-------
26 files changed, 87 insertions(+), 100 deletions(-)
diff --git a/src/main/java/org/concordion/Concordion.java b/src/main/java/org/concordion/Concordion.java
index 5021ba411..394217b40 100644
--- a/src/main/java/org/concordion/Concordion.java
+++ b/src/main/java/org/concordion/Concordion.java
@@ -78,7 +78,7 @@ public void override(Resource resource) throws IOException {
public ResultSummary process(Fixture fixture) throws IOException {
SummarizingResultRecorder resultRecorder = new SummarizingResultRecorder();
resultRecorder.setSpecificationDescription(fixture.getSpecificationDescription());
- getSpecification(fixture).process(evaluatorFactory.createEvaluator(fixture.getFixtureObject()), resultRecorder);
+ getSpecification(fixture).process(evaluatorFactory.createEvaluator(fixture.getFixtureObject()), resultRecorder, fixture);
return resultRecorder;
}
diff --git a/src/main/java/org/concordion/api/AbstractCommand.java b/src/main/java/org/concordion/api/AbstractCommand.java
index 4b8fd479d..531e0ad60 100644
--- a/src/main/java/org/concordion/api/AbstractCommand.java
+++ b/src/main/java/org/concordion/api/AbstractCommand.java
@@ -10,13 +10,13 @@ public List getExamples(CommandCall command) {
return Collections.emptyList();
}
- public void execute(CommandCall commandCall, Evaluator evaluator, ResultRecorder resultRecorder) {
+ public void execute(CommandCall commandCall, Evaluator evaluator, ResultRecorder resultRecorder, Fixture fixture) {
}
public void setUp(CommandCall commandCall, Evaluator evaluator, ResultRecorder resultRecorder) {
}
- public void verify(CommandCall commandCall, Evaluator evaluator, ResultRecorder resultRecorder) {
+ public void verify(CommandCall commandCall, Evaluator evaluator, ResultRecorder resultRecorder, Fixture fixture) {
}
public void modifyCommandCallTree(CommandCall element, List examples, List beforeExamples) {
diff --git a/src/main/java/org/concordion/api/AbstractCommandDecorator.java b/src/main/java/org/concordion/api/AbstractCommandDecorator.java
index 952bc97db..fa26c44c2 100644
--- a/src/main/java/org/concordion/api/AbstractCommandDecorator.java
+++ b/src/main/java/org/concordion/api/AbstractCommandDecorator.java
@@ -19,18 +19,18 @@ public void run() {
});
}
- public void execute(final CommandCall commandCall, final Evaluator evaluator, final ResultRecorder resultRecorder) {
+ public void execute(final CommandCall commandCall, final Evaluator evaluator, final ResultRecorder resultRecorder, final Fixture fixture) {
process(commandCall, evaluator, resultRecorder, new Runnable() {
public void run() {
- command.execute(commandCall, evaluator, resultRecorder);
+ command.execute(commandCall, evaluator, resultRecorder, fixture);
}
});
}
- public void verify(final CommandCall commandCall, final Evaluator evaluator, final ResultRecorder resultRecorder) {
+ public void verify(final CommandCall commandCall, final Evaluator evaluator, final ResultRecorder resultRecorder, final Fixture fixture) {
process(commandCall, evaluator, resultRecorder, new Runnable() {
public void run() {
- command.verify(commandCall, evaluator, resultRecorder);
+ command.verify(commandCall, evaluator, resultRecorder, fixture);
}
});
}
diff --git a/src/main/java/org/concordion/api/Command.java b/src/main/java/org/concordion/api/Command.java
index 24c8790ae..6f819a7c4 100644
--- a/src/main/java/org/concordion/api/Command.java
+++ b/src/main/java/org/concordion/api/Command.java
@@ -6,9 +6,9 @@ public interface Command {
void setUp(CommandCall commandCall, Evaluator evaluator, ResultRecorder resultRecorder);
- void execute(CommandCall commandCall, Evaluator evaluator, ResultRecorder resultRecorder);
+ void execute(CommandCall commandCall, Evaluator evaluator, ResultRecorder resultRecorder, Fixture fixture);
- void verify(CommandCall commandCall, Evaluator evaluator, ResultRecorder resultRecorder);
+ void verify(CommandCall commandCall, Evaluator evaluator, ResultRecorder resultRecorder, Fixture fixture);
/**
* Used to modify the command call tree post parsing and before execution. Some things that might be done are:
diff --git a/src/main/java/org/concordion/api/CommandCall.java b/src/main/java/org/concordion/api/CommandCall.java
index e0b0491aa..0ae1b2a5c 100644
--- a/src/main/java/org/concordion/api/CommandCall.java
+++ b/src/main/java/org/concordion/api/CommandCall.java
@@ -64,16 +64,16 @@ public void setUp(Evaluator evaluator, ResultRecorder resultRecorder) {
command.setUp(this, evaluator, resultRecorder);
}
- public void execute(Evaluator evaluator, ResultRecorder resultRecorder) {
+ public void execute(Evaluator evaluator, ResultRecorder resultRecorder, Fixture fixture) {
for (Map.Entry entry: constantsForExecution.entrySet()) {
evaluator.setVariable(entry.getKey(), entry.getValue());
}
- command.execute(this, evaluator, resultRecorder);
+ command.execute(this, evaluator, resultRecorder, fixture);
}
- public void verify(Evaluator evaluator, ResultRecorder resultRecorder) {
- command.verify(this, evaluator, resultRecorder);
+ public void verify(Evaluator evaluator, ResultRecorder resultRecorder, Fixture fixture) {
+ command.verify(this, evaluator, resultRecorder, fixture);
}
public void appendChild(CommandCall commandNode) {
diff --git a/src/main/java/org/concordion/api/CommandCallList.java b/src/main/java/org/concordion/api/CommandCallList.java
index d12f4b119..5a88250ef 100644
--- a/src/main/java/org/concordion/api/CommandCallList.java
+++ b/src/main/java/org/concordion/api/CommandCallList.java
@@ -19,19 +19,19 @@ public void setUp(Evaluator evaluator, ResultRecorder resultRecorder) {
for(CommandCall call : commandCalls) call.setUp(evaluator, resultRecorder);
}
- public void execute(Evaluator evaluator, ResultRecorder resultRecorder) {
- for(CommandCall call : commandCalls) call.execute(evaluator, resultRecorder);
+ public void execute(Evaluator evaluator, ResultRecorder resultRecorder, Fixture fixture) {
+ for(CommandCall call : commandCalls) call.execute(evaluator, resultRecorder, fixture);
}
- public void verify(Evaluator evaluator, ResultRecorder resultRecorder) {
- for(CommandCall call : commandCalls) call.verify(evaluator, resultRecorder);
+ public void verify(Evaluator evaluator, ResultRecorder resultRecorder, Fixture fixture) {
+ for(CommandCall call : commandCalls) call.verify(evaluator, resultRecorder, fixture);
}
- public void processSequentially(Evaluator evaluator, ResultRecorder resultRecorder) {
+ public void processSequentially(Evaluator evaluator, ResultRecorder resultRecorder, Fixture fixture) {
for(CommandCall call : commandCalls) {
call.setUp(evaluator, resultRecorder);
- call.execute(evaluator, resultRecorder);
- call.verify(evaluator, resultRecorder);
+ call.execute(evaluator, resultRecorder, fixture);
+ call.verify(evaluator, resultRecorder, fixture);
}
}
diff --git a/src/main/java/org/concordion/api/Specification.java b/src/main/java/org/concordion/api/Specification.java
index 0121e5836..3106a6fdd 100644
--- a/src/main/java/org/concordion/api/Specification.java
+++ b/src/main/java/org/concordion/api/Specification.java
@@ -2,5 +2,5 @@
public interface Specification {
- void process(Evaluator evaluator, ResultRecorder resultRecorder);
+ void process(Evaluator evaluator, ResultRecorder resultRecorder, Fixture fixture);
}
diff --git a/src/main/java/org/concordion/internal/SpecificationToSpecificationByExampleAdaptor.java b/src/main/java/org/concordion/internal/SpecificationToSpecificationByExampleAdaptor.java
index b437520bf..2ca323bad 100644
--- a/src/main/java/org/concordion/internal/SpecificationToSpecificationByExampleAdaptor.java
+++ b/src/main/java/org/concordion/internal/SpecificationToSpecificationByExampleAdaptor.java
@@ -17,8 +17,8 @@ public SpecificationToSpecificationByExampleAdaptor(Specification s) {
public void finish() {
}
- public void process(Evaluator evaluator, ResultRecorder resultRecorder) {
- specification.process(evaluator, resultRecorder);
+ public void process(Evaluator evaluator, ResultRecorder resultRecorder, Fixture fixture) {
+ specification.process(evaluator, resultRecorder, fixture);
}
public void setFixture(Fixture fixture) {
@@ -27,7 +27,7 @@ public void setFixture(Fixture fixture) {
public void processExample(Fixture fixture, Evaluator evaluator, String example, ResultRecorder resultRecorder) {
if (testDescription.equals(example)) {
- specification.process(evaluator, resultRecorder);
+ specification.process(evaluator, resultRecorder, fixture);
}
}
diff --git a/src/main/java/org/concordion/internal/XMLSpecification.java b/src/main/java/org/concordion/internal/XMLSpecification.java
index 39ec9523a..1783d0810 100644
--- a/src/main/java/org/concordion/internal/XMLSpecification.java
+++ b/src/main/java/org/concordion/internal/XMLSpecification.java
@@ -11,7 +11,6 @@ public class XMLSpecification implements SpecificationByExample {
public static final String OUTER_EXAMPLE_NAME = "[Outer]";
public static final String OUTER_EXAMPLE_SUFFIX = " " + OUTER_EXAMPLE_NAME;
- public static final ThreadLocal FIXTURE_HOLDER = new ThreadLocal();
private String testDescription;
private final CommandCall rootCommandNode;
@@ -34,13 +33,13 @@ public XMLSpecification(CommandCall rootCommandNode, List ex
this.beforeExamples = new ArrayList(beforeExamples);
}
- public void processNode(CommandCall node, Evaluator evaluator, ResultRecorder resultRecorder) {
+ public void processNode(CommandCall node, Evaluator evaluator, ResultRecorder resultRecorder, Fixture fixture) {
if (!node.getChildren().isEmpty()) {
for (CommandCall before: beforeExamples) {
SummarizingResultRecorder beforeResultRecorder = new SummarizingResultRecorder();
beforeResultRecorder.setSpecificationDescription("Running before for example " + node.getExpression());
- before.getCommand().execute(before, evaluator, beforeResultRecorder);
+ before.getCommand().execute(before, evaluator, beforeResultRecorder, fixture);
String errorText = null;
if (beforeResultRecorder.hasExceptions()) {
errorText = SimpleFormatter.format("Exceptions occurred in the 'before' example in '%s'. See the output specification for details.\n",
@@ -59,16 +58,14 @@ public void processNode(CommandCall node, Evaluator evaluator, ResultRecorder re
}
}
- node.execute(evaluator, resultRecorder);
+ node.execute(evaluator, resultRecorder, fixture);
}
- public void process(Evaluator evaluator, ResultRecorder resultRecorder) {
- processNode(rootCommandNode, evaluator, resultRecorder);
+ public void process(Evaluator evaluator, ResultRecorder resultRecorder, Fixture fixture) {
+ processNode(rootCommandNode, evaluator, resultRecorder, fixture);
}
public void setFixture(Fixture fixture) {
- FIXTURE_HOLDER.set(fixture);
-
if (hasExampleCommandNodes()) {
testDescription = OUTER_EXAMPLE_NAME;
} else {
@@ -78,15 +75,14 @@ public void setFixture(Fixture fixture) {
public void processExample(Fixture fixture, Evaluator evaluator, String example, ResultRecorder resultRecorder) {
if (testDescription.equals(example)) {
- processNode(rootCommandNode, evaluator, resultRecorder);
+ processNode(rootCommandNode, evaluator, resultRecorder, fixture);
return;
}
- FIXTURE_HOLDER.set(fixture);
for (ExampleCommandCall commandCall: examples) {
if (commandCall.getExampleName().equals(example)) {
resultRecorder.setForExample(true);
- processNode(commandCall.getCommandCall(), evaluator, resultRecorder);
+ processNode(commandCall.getCommandCall(), evaluator, resultRecorder, fixture);
}
}
}
diff --git a/src/main/java/org/concordion/internal/command/AssertEqualsCommand.java b/src/main/java/org/concordion/internal/command/AssertEqualsCommand.java
index 894fc606c..a187a8342 100644
--- a/src/main/java/org/concordion/internal/command/AssertEqualsCommand.java
+++ b/src/main/java/org/concordion/internal/command/AssertEqualsCommand.java
@@ -33,7 +33,7 @@ public void removeAssertEqualsListener(AssertEqualsListener listener) {
}
@Override
- public void verify(CommandCall commandCall, Evaluator evaluator, ResultRecorder resultRecorder) {
+ public void verify(CommandCall commandCall, Evaluator evaluator, ResultRecorder resultRecorder, Fixture fixture) {
Check.isFalse(commandCall.hasChildCommands(), "Nesting commands inside an 'assertEquals' is not supported");
Element element = commandCall.getElement();
diff --git a/src/main/java/org/concordion/internal/command/BooleanCommand.java b/src/main/java/org/concordion/internal/command/BooleanCommand.java
index 4c1b56bb2..136bf29c1 100644
--- a/src/main/java/org/concordion/internal/command/BooleanCommand.java
+++ b/src/main/java/org/concordion/internal/command/BooleanCommand.java
@@ -22,12 +22,12 @@ public void removeAssertListener(AssertListener listener) {
}
@Override
- public void verify(CommandCall commandCall, Evaluator evaluator, ResultRecorder resultRecorder) {
+ public void verify(CommandCall commandCall, Evaluator evaluator, ResultRecorder resultRecorder, Fixture fixture) {
// Check.isFalse(commandCall.hasChildCommands(), "Nesting commands inside an 'assertTrue' is not supported");
CommandCallList childCommands = commandCall.getChildren();
childCommands.setUp(evaluator, resultRecorder);
- childCommands.execute(evaluator, resultRecorder);
- childCommands.verify(evaluator, resultRecorder);
+ childCommands.execute(evaluator, resultRecorder, fixture);
+ childCommands.verify(evaluator, resultRecorder, fixture);
String expression = commandCall.getExpression();
Object result = evaluator.evaluate(expression);
diff --git a/src/main/java/org/concordion/internal/command/EchoCommand.java b/src/main/java/org/concordion/internal/command/EchoCommand.java
index 5ad7cb29d..faee61191 100644
--- a/src/main/java/org/concordion/internal/command/EchoCommand.java
+++ b/src/main/java/org/concordion/internal/command/EchoCommand.java
@@ -1,16 +1,12 @@
package org.concordion.internal.command;
-import org.concordion.api.AbstractCommand;
-import org.concordion.api.CommandCall;
-import org.concordion.api.Element;
-import org.concordion.api.Evaluator;
-import org.concordion.api.ResultRecorder;
+import org.concordion.api.*;
import org.concordion.internal.util.Check;
public class EchoCommand extends AbstractCommand {
@Override
- public void verify(CommandCall commandCall, Evaluator evaluator, ResultRecorder resultRecorder) {
+ public void verify(CommandCall commandCall, Evaluator evaluator, ResultRecorder resultRecorder, Fixture fixture) {
Check.isFalse(commandCall.hasChildCommands(), "Nesting commands inside an 'echo' is not supported");
Object result = evaluator.evaluate(commandCall.getExpression());
diff --git a/src/main/java/org/concordion/internal/command/ExampleCommand.java b/src/main/java/org/concordion/internal/command/ExampleCommand.java
index 2db5f2d46..b357430e4 100644
--- a/src/main/java/org/concordion/internal/command/ExampleCommand.java
+++ b/src/main/java/org/concordion/internal/command/ExampleCommand.java
@@ -26,7 +26,7 @@ public void removeExampleListener(ExampleListener exampleListener) {
listeners.remove(exampleListener);
}
- public void execute(CommandCall node, Evaluator evaluator, ResultRecorder resultRecorder) {
+ public void execute(CommandCall node, Evaluator evaluator, ResultRecorder resultRecorder, Fixture fixture) {
String exampleName = getExampleName(node);
boolean isBeforeExample = isBeforeExample(node);
@@ -35,19 +35,17 @@ public void execute(CommandCall node, Evaluator evaluator, ResultRecorder result
specificationDescriber.getDescription(node.getResource(), exampleName));
if (!isBeforeExample) {
- Fixture fixture = XMLSpecification.FIXTURE_HOLDER.get();
announceBeforeExample(exampleName, node.getElement(), resultRecorder, fixture);
}
try {
- node.getChildren().processSequentially(evaluator, resultRecorder);
+ node.getChildren().processSequentially(evaluator, resultRecorder, fixture);
} catch (FailFastException f) {
// Ignore - it'll be re-thrown later by the implementation status checker if necessary.
}
setupCommandForExample(node, resultRecorder, exampleName);
if (!isBeforeExample) {
- Fixture fixture = XMLSpecification.FIXTURE_HOLDER.get();
announceAfterExample(exampleName, node.getElement(), resultRecorder, fixture);
}
}
diff --git a/src/main/java/org/concordion/internal/command/RunCommand.java b/src/main/java/org/concordion/internal/command/RunCommand.java
index 21400d976..62bccf44b 100644
--- a/src/main/java/org/concordion/internal/command/RunCommand.java
+++ b/src/main/java/org/concordion/internal/command/RunCommand.java
@@ -37,7 +37,7 @@ public RunCommand() {
}
@Override
- public void execute(CommandCall commandCall, Evaluator evaluator, ResultRecorder resultRecorder) {
+ public void execute(CommandCall commandCall, Evaluator evaluator, ResultRecorder resultRecorder, Fixture fixture) {
Check.isFalse(commandCall.hasChildCommands(), "Nesting commands inside an 'run' is not supported");
Element element = commandCall.getElement();
diff --git a/src/main/java/org/concordion/internal/command/SpecificationCommand.java b/src/main/java/org/concordion/internal/command/SpecificationCommand.java
index b689a8eca..7572c0cb5 100644
--- a/src/main/java/org/concordion/internal/command/SpecificationCommand.java
+++ b/src/main/java/org/concordion/internal/command/SpecificationCommand.java
@@ -27,19 +27,17 @@ public void setUp(CommandCall commandCall, Evaluator evaluator, ResultRecorder r
}
@Override
- public void execute(CommandCall commandCall, Evaluator evaluator, ResultRecorder resultRecorder) {
+ public void execute(CommandCall commandCall, Evaluator evaluator, ResultRecorder resultRecorder, Fixture fixture) {
if (specificationDescriber != null) {
resultRecorder.setSpecificationDescription(getSpecificationDescription(commandCall));
}
try {
- Fixture fixture = XMLSpecification.FIXTURE_HOLDER.get();
announceBeforeOuterExampleEvent(commandCall.getElement(), (SummarizingResultRecorder) resultRecorder, fixture);
- commandCall.getChildren().processSequentially(evaluator, resultRecorder);
+ commandCall.getChildren().processSequentially(evaluator, resultRecorder, fixture);
} catch (FailFastException e) {
// Ignore - it'll be re-thrown later if necessary.
} finally {
- Fixture fixture = XMLSpecification.FIXTURE_HOLDER.get();
announceAfterOuterExampleEvent(commandCall.getElement(), (SummarizingResultRecorder) resultRecorder, fixture);
}
}
@@ -57,7 +55,7 @@ public void finish(CommandCall commandCall) {
}
@Override
- public void verify(CommandCall commandCall, Evaluator evaluator, ResultRecorder resultRecorder) {
+ public void verify(CommandCall commandCall, Evaluator evaluator, ResultRecorder resultRecorder, Fixture fixture) {
throw new IllegalStateException("Unexpected call to " + getClass().getSimpleName() + "'s verify() method. Only the execute() method should be called.");
}
diff --git a/src/main/java/org/concordion/internal/command/VerifyRowsCommand.java b/src/main/java/org/concordion/internal/command/VerifyRowsCommand.java
index 032190fc9..06512a2f7 100644
--- a/src/main/java/org/concordion/internal/command/VerifyRowsCommand.java
+++ b/src/main/java/org/concordion/internal/command/VerifyRowsCommand.java
@@ -9,10 +9,7 @@
import java.util.regex.Matcher;
import java.util.regex.Pattern;
-import org.concordion.api.AbstractCommand;
-import org.concordion.api.CommandCall;
-import org.concordion.api.Evaluator;
-import org.concordion.api.ResultRecorder;
+import org.concordion.api.*;
import org.concordion.api.listener.VerifyRowsListener;
import org.concordion.internal.command.strategies.DefaultMatchStrategy;
import org.concordion.internal.command.strategies.RowsMatchStrategy;
@@ -32,7 +29,7 @@ public void removeVerifyRowsListener(VerifyRowsListener listener) {
@SuppressWarnings("unchecked")
@Override
- public void verify(CommandCall commandCall, Evaluator evaluator, ResultRecorder resultRecorder) {
+ public void verify(CommandCall commandCall, Evaluator evaluator, ResultRecorder resultRecorder, Fixture fixture) {
Pattern pattern = Pattern.compile("(#.+?) *: *(.+)");
Matcher matcher = pattern.matcher(commandCall.getExpression());
if (!matcher.matches()) {
@@ -47,7 +44,7 @@ public void verify(CommandCall commandCall, Evaluator evaluator, ResultRecorder
Check.isTrue(!(obj instanceof HashSet) || (obj instanceof LinkedHashSet), obj.getClass().getCanonicalName() + " does not have a predictable iteration order");
Iterable
+
Example names which executed @BeforeExample method:
+ [[Outer], aPassingExample, aFailingExample, expectedToFailExample]
+
+
Example names which executed @AfterExample method:
+ [aPassingExample, aFailingExample, expectedToFailExample](Note that although the @AfterExample
+ annotated method was also called for [Outer] example this concordion assertion was evaluated prior to that call
+ that's why it is not included in the list)
+
Concordion uses expressions to reference fields and call methods of the corresponding test fixture and to set specification variables.
-
In order to keep your specifications simple and maintainable, Concordion deliberately restricts the expression format that is allowed when instrumenting specifications.
-Complexity should be moved into the fixture code, and then evolved into a DSL, where it is easier to maintain.
+
In order to keep your specifications simple and maintainable, Concordion deliberately restricts the expression format that is allowed when instrumenting specifications.
+Complexity should be moved into the fixture code, and then evolved into a DSL, where it is easier to maintain.
The idea is to have the fixture do all the work of fetching and munging the data and then return exactly the data that the spec needs,
which helps to decouple the spec from the implementation.
The following expressions are available within Concordion commands:
diff --git a/src/test/resources/spec/concordion/specificationType/markdown/Markdown.md b/src/test/resources/spec/concordion/specificationType/markdown/Markdown.md
index 752fc3a6b..c2a18c521 100644
--- a/src/test/resources/spec/concordion/specificationType/markdown/Markdown.md
+++ b/src/test/resources/spec/concordion/specificationType/markdown/Markdown.md
@@ -5,10 +5,10 @@ _Since_: Concordion 2.0.0
[Markdown](https://daringfireball.net/projects/markdown/) provides an easy-to-read and easy-to-write syntax for converting plain text to structured XHTML.
-Concordion's Markdown support allows you to write your [Concordion](http://concordion.org/) specification in the Markdown format, converting the Markdown to XHTML at runtime and running the resultant XHTML as a Concordion specification.
+Concordion's Markdown support allows you to write your [Concordion](https://concordion.org/) specification in the Markdown format, converting the Markdown to XHTML at runtime and running the resultant XHTML as a Concordion specification.
-The following assumes that you already understand Concordion and Markdown. If not, please visit the [Concordion tutorial](http://concordion.org/Tutorial.html) and read the Markdown [basics](https://daringfireball.net/projects/markdown/basics).
+The following assumes that you already understand Concordion and Markdown. If not, please visit the [Concordion tutorial](https://concordion.org/Tutorial.html) and read the Markdown [basics](https://daringfireball.net/projects/markdown/basics).
### Use of inline links
diff --git a/src/test/resources/spec/concordion/specificationType/markdown/MarkdownExecuteCommand.md b/src/test/resources/spec/concordion/specificationType/markdown/MarkdownExecuteCommand.md
index ae03f2646..afe5667c2 100644
--- a/src/test/resources/spec/concordion/specificationType/markdown/MarkdownExecuteCommand.md
+++ b/src/test/resources/spec/concordion/specificationType/markdown/MarkdownExecuteCommand.md
@@ -55,7 +55,7 @@ If the special variable `#TEXT` is used as a parameter within the _expression_,
### Execute on a table
-To run the [execute command on a table](http://concordion.org/Tutorial.html#executeTable), the execute command is specified in the first table header column,
+To run the [execute command on a table](https://concordion.org/Tutorial.html#executeTable), the execute command is specified in the first table header column,
followed by the command for that column (if any), with the commands for each column of the table specified in the table header.
diff --git a/src/test/resources/spec/concordion/specificationType/markdown/MarkdownGrammar.markdown b/src/test/resources/spec/concordion/specificationType/markdown/MarkdownGrammar.markdown
index 97c6e1d61..6105b6c2b 100644
--- a/src/test/resources/spec/concordion/specificationType/markdown/MarkdownGrammar.markdown
+++ b/src/test/resources/spec/concordion/specificationType/markdown/MarkdownGrammar.markdown
@@ -179,7 +179,7 @@ The [execute on a list](http://concordion.github.io/concordion/latest/spec/comma
#### Handling unusual sentence structures
-In order to [handle unusual sentence structures](http://concordion.org/Tutorial.html#executeUnusualSentences), Concordion allows you to use an `execute` command on an outer HTML element. When using Markdown, this can be implemented using the HTML structure wrapped in a `
`.
+In order to [handle unusual sentence structures](https://concordion.org/Tutorial.html#executeUnusualSentences), Concordion allows you to use an `execute` command on an outer HTML element. When using Markdown, this can be implemented using the HTML structure wrapped in a `
`.
From 4093b812e7ba7afafa3e8427f98f662812d0e42a Mon Sep 17 00:00:00 2001
From: Nigel Charman
Date: Sun, 1 Jul 2018 17:31:46 +1200
Subject: [PATCH 34/42] Added deprecated methods for backward compatibility
---
.../org/concordion/api/AbstractCommand.java | 23 ++++++++++++++++++-
.../ClassNameBasedSpecificationLocator.java | 12 ++++++++--
2 files changed, 32 insertions(+), 3 deletions(-)
diff --git a/src/main/java/org/concordion/api/AbstractCommand.java b/src/main/java/org/concordion/api/AbstractCommand.java
index 29163390f..8ecb1e537 100644
--- a/src/main/java/org/concordion/api/AbstractCommand.java
+++ b/src/main/java/org/concordion/api/AbstractCommand.java
@@ -6,20 +6,41 @@
public abstract class AbstractCommand implements Command {
+ @Deprecated
public List getExamples(CommandCall command) {
return Collections.emptyList();
}
+ @Deprecated
+ public void execute(CommandCall commandCall, Evaluator evaluator, ResultRecorder resultRecorder) {
+ }
+
+ @Deprecated
+ public void setUp(CommandCall commandCall, Evaluator evaluator, ResultRecorder resultRecorder) {
+ }
+
+ @Deprecated
+ public void verify(CommandCall commandCall, Evaluator evaluator, ResultRecorder resultRecorder) {
+ }
+
+ // For backwards compatibility, call the deprecated methods
+ // TODO - remove this in Concordion 3.0.0
+ @Override
public void execute(CommandCall commandCall, Evaluator evaluator, ResultRecorder resultRecorder, Fixture fixture) {
+ execute(commandCall, evaluator, resultRecorder);
}
+ @Override
public void setUp(CommandCall commandCall, Evaluator evaluator, ResultRecorder resultRecorder, Fixture fixture) {
+ setUp(commandCall, evaluator, resultRecorder);
}
+ @Override
public void verify(CommandCall commandCall, Evaluator evaluator, ResultRecorder resultRecorder, Fixture fixture) {
+ verify(commandCall, evaluator, resultRecorder);
}
+ @Override
public void modifyCommandCallTree(CommandCall element, List examples, List beforeExamples) {
}
-
}
diff --git a/src/main/java/org/concordion/internal/ClassNameBasedSpecificationLocator.java b/src/main/java/org/concordion/internal/ClassNameBasedSpecificationLocator.java
index 8ca15b383..ce3457946 100644
--- a/src/main/java/org/concordion/internal/ClassNameBasedSpecificationLocator.java
+++ b/src/main/java/org/concordion/internal/ClassNameBasedSpecificationLocator.java
@@ -5,9 +5,17 @@
import org.concordion.internal.util.Check;
public class ClassNameBasedSpecificationLocator implements SpecificationLocator {
+
+ public ClassNameBasedSpecificationLocator() {
+ }
+
+ @Deprecated
+ public ClassNameBasedSpecificationLocator(String specificationSuffix) {
+ }
+
@Override
- public Resource locateSpecification(FixtureType fixtureType, String typeSuffix) {
+ public Resource locateSpecification(FixtureType fixtureType, String specificationSuffix) {
Check.notNull(fixtureType, "Fixture is null");
- return FixtureSpecificationMapper.toSpecificationResource(fixtureType, typeSuffix);
+ return FixtureSpecificationMapper.toSpecificationResource(fixtureType, specificationSuffix);
}
}
From 0dc478448569537762a80f707de0fee70ed1e71b Mon Sep 17 00:00:00 2001
From: Nigel Charman
Date: Sun, 1 Jul 2018 17:33:01 +1200
Subject: [PATCH 35/42] Updated ExtensionChecker to check for compatibility
with Concordion 2.2.0
---
.../internal/extension/ExtensionChecker.java | 29 ++++++++++++++++++-
1 file changed, 28 insertions(+), 1 deletion(-)
diff --git a/src/main/java/org/concordion/internal/extension/ExtensionChecker.java b/src/main/java/org/concordion/internal/extension/ExtensionChecker.java
index bc49718af..651777971 100644
--- a/src/main/java/org/concordion/internal/extension/ExtensionChecker.java
+++ b/src/main/java/org/concordion/internal/extension/ExtensionChecker.java
@@ -8,10 +8,13 @@ public class ExtensionChecker {
private static final String MARKDOWN_EXTENSION_CLASS = "org.concordion.ext.MarkdownExtension";
private static final String EXTENSIONS_CLASS = "org.concordion.ext.Extensions";
private static final String EXCEL_EXTENSION_SOURCE_CLASS = "org.concordion.ext.excel.ExcelClassPathSource";
+ private static final String RUN_TOTALS_EXTENSION_CLASS = "org.concordion.ext.runtotals.RunTotalsExtension";
+ private static final String EXECUTE_ONLY_IF_EXTENSION_CLASS = "org.concordion.ext.ExecuteOnlyIfExtension";
public static void checkForOutdatedExtensions() {
checkForExtensionsNowInCore();
checkForBreakingChanges();
+ checkCompatibility();
checkForDeprecatedExtensions();
}
@@ -31,10 +34,34 @@ private static void checkForBreakingChanges() {
} catch (ClassNotFoundException expected) {
return; // We don't want it to be found
}
- String msg = "The Concordion Excel Extension must be updated to the latest version to work with Concordion 2.0 or later.";
+ String msg = "The Concordion Excel Extension must be updated to the latest version to work with Concordion 2.0.0 or later.";
throw new ConfigurationException(msg);
}
+ private static void checkCompatibility() {
+ assertCompatibleVersion(RUN_TOTALS_EXTENSION_CLASS, "concordion-run-totals-extension", "1.2", "2.2.0");
+ assertCompatibleVersion(EXECUTE_ONLY_IF_EXTENSION_CLASS, "execute-executeonlyif-extension", "0.3", "2.2.0");
+ }
+
+ private static void assertCompatibleVersion(String extensionClassName, String extensionName, String requiredSpecificationVersion, String breakingConcordionVersion) {
+ try {
+ Class> extensionClass = Class.forName(extensionClassName);
+ Package extensionPackage = extensionClass.getPackage();
+ String specificationVersion = extensionPackage.getSpecificationVersion();
+ if (extensionPackage.getImplementationTitle() != null) {
+ extensionName = extensionPackage.getImplementationTitle();
+ }
+ if (specificationVersion == null || !extensionPackage.isCompatibleWith(requiredSpecificationVersion)) {
+ String msg = "The " + extensionName + " must be updated to version " + requiredSpecificationVersion +
+ ".0 or later to work with Concordion " + breakingConcordionVersion + " or later.";
+ throw new ConfigurationException(msg);
+ }
+ return; // Passes the check since it's the right version
+ } catch (ClassNotFoundException expected) {
+ return; // Passes the check since it's not on classpath
+ }
+ }
+
private static void checkForDeprecatedExtensions() {
try {
Class.forName(EXTENSIONS_CLASS);
From 4a55ae6acc2678d5e2952a730ce5988659b796f3 Mon Sep 17 00:00:00 2001
From: Nigel Charman
Date: Sun, 1 Jul 2018 18:09:18 +1200
Subject: [PATCH 36/42] Added extra properties to MANIFEST.MF
---
publish.gradle | 17 +++++++++++++++++
1 file changed, 17 insertions(+)
diff --git a/publish.gradle b/publish.gradle
index bd2c8a3c4..ae1a5fe6e 100644
--- a/publish.gradle
+++ b/publish.gradle
@@ -3,6 +3,7 @@ plugins {
id 'org.ajoberstar.git-publish' version '1.0.0'
id "com.jfrog.bintray" version "1.6"
id 'org.kordamp.gradle.clirr' version '0.2.2'
+ id 'net.nemerosa.versioning' version '2.7.1'
}
apply from: 'build.gradle'
@@ -47,6 +48,22 @@ distributions {
}
}
+jar {
+ manifest {
+ attributes 'Specification-Title' : project.name,
+ 'Implementation-Title' : project.name,
+ 'Specification-Version' : version.substring(0, version.lastIndexOf(".")),
+ 'Implementation-Version': version,
+ 'Implementation-Vendor' : 'concordion.org',
+ 'Specification-Vendor' : 'concordion.org',
+ 'Created-By' : System.getProperty('java.version') + ' (' + System.getProperty('java.vendor') + ')',
+ 'Built-With' : "gradle-${project.getGradle().getGradleVersion()}, groovy-${GroovySystem.getVersion()}",
+ 'Build-Time' : String.format("%tFT%
Date: Sun, 1 Jul 2018 23:02:09 +1200
Subject: [PATCH 37/42] Added warnings for extensions using deprecated APIs
---
.../internal/extension/ExtensionChecker.java | 91 ++++++++++---------
1 file changed, 48 insertions(+), 43 deletions(-)
diff --git a/src/main/java/org/concordion/internal/extension/ExtensionChecker.java b/src/main/java/org/concordion/internal/extension/ExtensionChecker.java
index 89974064d..c0816f37b 100644
--- a/src/main/java/org/concordion/internal/extension/ExtensionChecker.java
+++ b/src/main/java/org/concordion/internal/extension/ExtensionChecker.java
@@ -5,70 +5,75 @@
public class ExtensionChecker {
- private static final String MARKDOWN_EXTENSION_CLASS = "org.concordion.ext.MarkdownExtension";
- private static final String EXTENSIONS_CLASS = "org.concordion.ext.Extensions";
- private static final String EXCEL_EXTENSION_SOURCE_CLASS = "org.concordion.ext.excel.ExcelClassPathSource";
- private static final String RUN_TOTALS_EXTENSION_CLASS = "org.concordion.ext.runtotals.RunTotalsExtension";
- private static final String EXECUTE_ONLY_IF_EXTENSION_CLASS = "org.concordion.ext.ExecuteOnlyIfExtension";
+ private static final String EMBED_EXTENSION_CLASS = "org.concordion.ext.embed.EmbedCommand";
+ private static final String EXCEL_EXTENSION_CLASS = "org.concordion.ext.excel.ExcelExtension";
+ private static final String EXECUTE_ONLY_IF_EXTENSION_CLASS = "org.concordion.ext.executeOnlyIf.ExecuteOnlyIfCommand";
+ private static final String RUN_TOTALS_EXTENSION_CLASS = "org.concordion.ext.runtotals.RunTotalsExtension";
+ private static final String SCREENSHOT_EXTENSION_CLASS = "org.concordion.ext.screenshot.ScreenshotEmbedder";
+
+ private static final String OUTDATED_EXCEL_EXTENSION_CLASS = "org.concordion.ext.excel.ExcelClassPathSource";
+ private static final String OUTDATED_EXTENSIONS_CLASS = "org.concordion.ext.Extensions";
+ private static final String OUTDATED_MARKDOWN_EXTENSION_CLASS = "org.concordion.ext.MarkdownExtension";
+
+ private static boolean checked = false;
public static void checkForOutdatedExtensions() {
- checkForExtensionsNowInCore();
- checkForBreakingChanges();
- checkCompatibility();
- checkForDeprecatedExtensions();
+ if (!checked) {
+ failIfOutdatedExtensionFound();
+ checkExtensionCompatibility();
+ }
+ checked = true;
+ }
+
+ private static void failIfOutdatedExtensionFound() {
+ failIfPresent(OUTDATED_MARKDOWN_EXTENSION_CLASS, "The Markdown format is now supported in the main Concordion module. The concordion-markdown-extension module must be removed from the class path.");
+ failIfPresent(OUTDATED_EXTENSIONS_CLASS, "Warning. The concordion-extensions module is now deprecated. Please replace with the individual extension modules. See https://concordion.org/Extensions.html.");
+ failIfPresent(OUTDATED_EXCEL_EXTENSION_CLASS, "The Concordion Excel Extension must be updated to the latest version to work with Concordion 2.0.0 or later.");
}
- private static void checkForExtensionsNowInCore() {
+ private static void checkExtensionCompatibility() {
+ failIfIncompatible(EXECUTE_ONLY_IF_EXTENSION_CLASS, "concordion-executeonlyif-extension", "0.3", "2.2.0");
+ failIfIncompatible(RUN_TOTALS_EXTENSION_CLASS, "concordion-run-totals-extension", "1.2", "2.2.0");
+ warnIfIncompatible(EMBED_EXTENSION_CLASS, "concordion-embed-extension", "1.2");
+ warnIfIncompatible(EXCEL_EXTENSION_CLASS, "concordion-excel-extension", "2.1");
+ warnIfIncompatible(SCREENSHOT_EXTENSION_CLASS, "concordion-screenshot-extension", "1.3");
+ }
+
+ private static void failIfPresent(String outdatedExtensionClass, String msg) {
try {
- Class.forName(MARKDOWN_EXTENSION_CLASS);
+ Class.forName(outdatedExtensionClass);
} catch (ClassNotFoundException expected) {
return; // We don't want it to be found
}
- String msg = "The Markdown format is now supported in the main Concordion module. The concordion-markdown-extension module must be removed from the class path.";
throw new ConfigurationException(msg);
}
- private static void checkForBreakingChanges() {
- try {
- Class.forName(EXCEL_EXTENSION_SOURCE_CLASS);
- } catch (ClassNotFoundException expected) {
- return; // We don't want it to be found
+ private static void warnIfIncompatible(String extensionClassName, String extensionName, String requiredSpecificationVersion) {
+ if (!isCompatible(extensionClassName, requiredSpecificationVersion)) {
+ String msg = "Warning: This version of " + extensionName + " is deprecated. " +
+ "Please update to version " + requiredSpecificationVersion + ".0.";
+ System.err.println(msg);
}
- String msg = "The Concordion Excel Extension must be updated to the latest version to work with Concordion 2.0.0 or later.";
- throw new ConfigurationException(msg);
}
- private static void checkCompatibility() {
- assertCompatibleVersion(RUN_TOTALS_EXTENSION_CLASS, "concordion-run-totals-extension", "1.2", "2.2.0");
- assertCompatibleVersion(EXECUTE_ONLY_IF_EXTENSION_CLASS, "execute-executeonlyif-extension", "0.3", "2.2.0");
+ private static void failIfIncompatible(String extensionClassName, String extensionName, String requiredSpecificationVersion, String breakingConcordionVersion) {
+ if (!isCompatible(extensionClassName, requiredSpecificationVersion)) {
+ String msg = "The " + extensionName + " must be updated to version " + requiredSpecificationVersion +
+ ".0 or later to work with Concordion " + breakingConcordionVersion + " or later.";
+ throw new ConfigurationException(msg);
+ }
}
- private static void assertCompatibleVersion(String extensionClassName, String extensionName, String requiredSpecificationVersion, String breakingConcordionVersion) {
+ private static boolean isCompatible(String extensionClassName, String requiredSpecificationVersion) {
+ boolean compatible;
try {
Class> extensionClass = Class.forName(extensionClassName);
Package extensionPackage = extensionClass.getPackage();
String specificationVersion = extensionPackage.getSpecificationVersion();
- if (extensionPackage.getImplementationTitle() != null) {
- extensionName = extensionPackage.getImplementationTitle();
- }
- if (specificationVersion == null || !extensionPackage.isCompatibleWith(requiredSpecificationVersion)) {
- String msg = "The " + extensionName + " must be updated to version " + requiredSpecificationVersion +
- ".0 or later to work with Concordion " + breakingConcordionVersion + " or later.";
- throw new ConfigurationException(msg);
- }
- return; // Passes the check since it's the right version
+ compatible = specificationVersion != null && extensionPackage.isCompatibleWith(requiredSpecificationVersion);
} catch (ClassNotFoundException expected) {
- return; // Passes the check since it's not on classpath
- }
- }
-
- private static void checkForDeprecatedExtensions() {
- try {
- Class.forName(EXTENSIONS_CLASS);
- } catch (ClassNotFoundException expected) {
- return; // We don't want it to be found
+ compatible = true; // Passes the check since it's not on classpath
}
- String msg = "Warning. The concordion-extensions module is now deprecated. Please replace with the individual extension modules. See https://concordion.org/Extensions.html.";
- System.err.println(msg);
+ return compatible;
}
}
From e066f446b89fc637970d62803fcd112260713613 Mon Sep 17 00:00:00 2001
From: Nigel Charman
Date: Sat, 14 Jul 2018 07:23:48 +1200
Subject: [PATCH 38/42] Replace FixtureType with FixtureDeclarations interface
---
src/main/java/org/concordion/Concordion.java | 23 +++++++++----------
.../concordion/api/FixtureDeclarations.java | 9 +++++++-
.../concordion/api/SpecificationLocator.java | 6 ++---
.../ClassNameBasedSpecificationLocator.java | 7 +++---
.../internal/FixtureSpecificationMapper.java | 5 ++--
5 files changed, 28 insertions(+), 22 deletions(-)
diff --git a/src/main/java/org/concordion/Concordion.java b/src/main/java/org/concordion/Concordion.java
index 9f5e25762..78002e1d0 100644
--- a/src/main/java/org/concordion/Concordion.java
+++ b/src/main/java/org/concordion/Concordion.java
@@ -4,7 +4,6 @@
import java.util.List;
import org.concordion.api.*;
-import org.concordion.internal.FixtureType;
import org.concordion.internal.SpecificationToSpecificationByExampleAdaptor;
import org.concordion.internal.SpecificationType;
import org.concordion.internal.SummarizingResultRecorder;
@@ -26,27 +25,27 @@ public class Concordion {
* @param specificationLocator locates the specification based on the specification type
* @param specificationReader specification reader
* @param evaluatorFactory evaluator factory
- * @param fixtureType a wrapper around the fixture class
+ * @param fixtureDeclarations a wrapper around the fixture class
* @throws IOException on i/o error
*/
- public Concordion(List specificationTypes, SpecificationLocator specificationLocator, SpecificationReader specificationReader, EvaluatorFactory evaluatorFactory, FixtureType fixtureType) throws IOException {
+ public Concordion(List specificationTypes, SpecificationLocator specificationLocator, SpecificationReader specificationReader, EvaluatorFactory evaluatorFactory, FixtureDeclarations fixtureDeclarations) throws IOException {
this.specificationReader = specificationReader;
this.evaluatorFactory = evaluatorFactory;
SpecificationType specificationType = null;
for (SpecificationType currentType : specificationTypes) {
- Resource currentResource = specificationLocator.locateSpecification(fixtureType, currentType.getTypeSuffix());
+ Resource currentResource = specificationLocator.locateSpecification(fixtureDeclarations, currentType.getTypeSuffix());
if (specificationReader.canFindSpecification(currentResource)) {
if (specificationType != null) {
- throw new RuntimeException(createMultipleSpecsMessage(fixtureType, specificationType, currentType));
+ throw new RuntimeException(createMultipleSpecsMessage(fixtureDeclarations, specificationType, currentType));
}
specificationType = currentType;
resource = currentResource;
}
}
if (specificationType == null) {
- throw new RuntimeException(createUnableToFindSpecMessage(fixtureType, specificationTypes));
+ throw new RuntimeException(createUnableToFindSpecMessage(fixtureDeclarations, specificationTypes));
}
specificationReader.setSpecificationConverter(specificationType.getConverter());
}
@@ -75,10 +74,10 @@ private SpecificationByExample getSpecification() throws IOException {
return specification;
}
- public List getExampleNames(FixtureType fixtureType) throws IOException {
+ public List getExampleNames(FixtureDeclarations fixtureDeclarations) throws IOException {
List exampleNames = getSpecification().getExampleNames();
if (exampleNames.isEmpty()) {
- exampleNames.add(fixtureType.getDescription());
+ exampleNames.add(fixtureDeclarations.getDescription());
}
return exampleNames;
}
@@ -125,13 +124,13 @@ public void checkValidStatus(FixtureDeclarations fixtureDeclarations) throws IOE
}
}
- private String createMultipleSpecsMessage(FixtureType fixtureType, SpecificationType type1, SpecificationType type2) {
- String fixturePathWithoutSuffix = fixtureType.getFixturePathWithoutSuffix();
+ private String createMultipleSpecsMessage(FixtureDeclarations fixtureDeclarations, SpecificationType type1, SpecificationType type2) {
+ String fixturePathWithoutSuffix = fixtureDeclarations.getFixturePathWithoutSuffix();
return SimpleFormatter.format("Found multiple matching specifications: '%s.%s' and '%s.%s'",
fixturePathWithoutSuffix, type1.getTypeSuffix(), fixturePathWithoutSuffix, type2.getTypeSuffix());
}
- private String createUnableToFindSpecMessage(FixtureType fixtureType, List specificationTypes) {
+ private String createUnableToFindSpecMessage(FixtureDeclarations fixtureDeclarations, List specificationTypes) {
String msg = "Unable to find specification: '";
boolean first = true;
for (SpecificationType specificationType : specificationTypes) {
@@ -140,7 +139,7 @@ private String createUnableToFindSpecMessage(FixtureType fixtureType, List getFixtureClass();
+
boolean declaresFullOGNL();
boolean declaresFailFast();
-
+
Class extends Throwable>[] getDeclaredFailFastExceptions();
boolean declaresResources();
@@ -21,4 +24,8 @@ public interface FixtureDeclarations {
ImplementationStatus getDeclaredImplementationStatus();
List getDeclaredConcordionOptionsParentFirst();
+
+ String getFixturePathWithoutSuffix();
+
+ String getDescription();
}
\ No newline at end of file
diff --git a/src/main/java/org/concordion/api/SpecificationLocator.java b/src/main/java/org/concordion/api/SpecificationLocator.java
index b3bf4a0a4..086ca53d9 100644
--- a/src/main/java/org/concordion/api/SpecificationLocator.java
+++ b/src/main/java/org/concordion/api/SpecificationLocator.java
@@ -1,15 +1,13 @@
package org.concordion.api;
-import org.concordion.internal.FixtureType;
-
public interface SpecificationLocator {
/**
* Locates a specification, allowing the type suffix of the specification to be specified.
- * @param fixtureType the fixture type to find the specification for
+ * @param fixtureDeclarations the fixture type to find the specification for
* @param typeSuffix the suffix of the specification
* @return the resource for the specification, which may or may not actually exist
*
* @since 2.0.0
*/
- Resource locateSpecification(FixtureType fixtureType, String typeSuffix);
+ Resource locateSpecification(FixtureDeclarations fixtureDeclarations, String typeSuffix);
}
diff --git a/src/main/java/org/concordion/internal/ClassNameBasedSpecificationLocator.java b/src/main/java/org/concordion/internal/ClassNameBasedSpecificationLocator.java
index ce3457946..bb6829f30 100644
--- a/src/main/java/org/concordion/internal/ClassNameBasedSpecificationLocator.java
+++ b/src/main/java/org/concordion/internal/ClassNameBasedSpecificationLocator.java
@@ -1,5 +1,6 @@
package org.concordion.internal;
+import org.concordion.api.FixtureDeclarations;
import org.concordion.api.Resource;
import org.concordion.api.SpecificationLocator;
import org.concordion.internal.util.Check;
@@ -14,8 +15,8 @@ public ClassNameBasedSpecificationLocator(String specificationSuffix) {
}
@Override
- public Resource locateSpecification(FixtureType fixtureType, String specificationSuffix) {
- Check.notNull(fixtureType, "Fixture is null");
- return FixtureSpecificationMapper.toSpecificationResource(fixtureType, specificationSuffix);
+ public Resource locateSpecification(FixtureDeclarations fixtureDeclarations, String specificationSuffix) {
+ Check.notNull(fixtureDeclarations, "Fixture is null");
+ return FixtureSpecificationMapper.toSpecificationResource(fixtureDeclarations, specificationSuffix);
}
}
diff --git a/src/main/java/org/concordion/internal/FixtureSpecificationMapper.java b/src/main/java/org/concordion/internal/FixtureSpecificationMapper.java
index d67d19ff1..51ce20b05 100644
--- a/src/main/java/org/concordion/internal/FixtureSpecificationMapper.java
+++ b/src/main/java/org/concordion/internal/FixtureSpecificationMapper.java
@@ -1,5 +1,6 @@
package org.concordion.internal;
+import org.concordion.api.FixtureDeclarations;
import org.concordion.api.Resource;
import org.concordion.integration.TestFrameworkProvider;
@@ -25,8 +26,8 @@ protected ServiceLoader initialValue() {
}
};
- public static Resource toSpecificationResource(FixtureType fixtureType, String specificationSuffix) {
- String slashedClassName = fixtureType.getFixtureClass().getName().replaceAll("\\.", "/");
+ public static Resource toSpecificationResource(FixtureDeclarations fixtureDeclarations, String specificationSuffix) {
+ String slashedClassName = fixtureDeclarations.getFixtureClass().getName().replaceAll("\\.", "/");
String fixturePath = removeSuffixFromFixtureName(slashedClassName);
String resourcePath = "/" + fixturePath + "." + specificationSuffix;
From 1d09c1a268dae55451bd8fdd9893ec51436bc126 Mon Sep 17 00:00:00 2001
From: Nigel Charman
Date: Sat, 14 Jul 2018 10:03:21 +1200
Subject: [PATCH 39/42] Reverted breaking methods from ConcordionBuilder
---
.../concordion/internal/ConcordionBuilder.java | 15 +++++++++------
.../org/concordion/internal/FixtureRunner.java | 2 +-
src/test/java/test/concordion/TestRig.java | 2 +-
3 files changed, 11 insertions(+), 8 deletions(-)
diff --git a/src/main/java/org/concordion/internal/ConcordionBuilder.java b/src/main/java/org/concordion/internal/ConcordionBuilder.java
index 11ba5941a..5217af8d2 100644
--- a/src/main/java/org/concordion/internal/ConcordionBuilder.java
+++ b/src/main/java/org/concordion/internal/ConcordionBuilder.java
@@ -415,8 +415,8 @@ public ConcordionBuilder withFailFast(Class extends Throwable>[] failFastExcep
return this;
}
- public ConcordionBuilder withFixtureType(FixtureType fixtureType) {
- this.fixtureType = fixtureType;
+ public ConcordionBuilder withFixture(Fixture fixture) {
+ this.fixtureType = fixture.getFixtureType();
withResources(fixtureType);
@@ -446,7 +446,12 @@ public ConcordionExtender withOuterExampleListener(OuterExampleListener listener
return this;
}
- public ConcordionBuilder withResources(FixtureType fixtureType) {
+ public ConcordionBuilder withResources(Fixture fixture) {
+ withResources(fixture.getFixtureType());
+ return this;
+ }
+
+ private void withResources(FixtureType fixtureType) {
boolean includeDefaultStyling = true;
Source resourceSource = sources.get(SourceType.RESOURCE);
@@ -480,11 +485,9 @@ public ConcordionBuilder withResources(FixtureType fixtureType) {
if (includeDefaultStyling) {
addDefaultStyling(resourceSource);
}
-
- return this;
}
- private void addDefaultStyling(Source resourceSource) {
+ private void addDefaultStyling(Source resourceSource) {
String stylesheetContent = resourceSource.readResourceAsString(EMBEDDED_STYLESHEET_RESOURCE);
withEmbeddedCSS(stylesheetContent);
}
diff --git a/src/main/java/org/concordion/internal/FixtureRunner.java b/src/main/java/org/concordion/internal/FixtureRunner.java
index 4aca76954..31511e5c0 100644
--- a/src/main/java/org/concordion/internal/FixtureRunner.java
+++ b/src/main/java/org/concordion/internal/FixtureRunner.java
@@ -15,7 +15,7 @@ public class FixtureRunner {
private Concordion concordion;
public FixtureRunner(Fixture fixture, SpecificationLocator specificationLocator) throws UnableToBuildConcordionException {
- ConcordionBuilder concordionBuilder = new ConcordionBuilder().withFixtureType(fixture.getFixtureType()).withSpecificationLocator(specificationLocator);
+ ConcordionBuilder concordionBuilder = new ConcordionBuilder().withFixture(fixture).withSpecificationLocator(specificationLocator);
new FixtureExtensionLoader().addExtensions(fixture, concordionBuilder);
new FixtureOptionsLoader().addOptions(fixture.getFixtureType(), concordionBuilder);
concordion = concordionBuilder.build();
diff --git a/src/test/java/test/concordion/TestRig.java b/src/test/java/test/concordion/TestRig.java
index 4c922c24b..023bd63f5 100644
--- a/src/test/java/test/concordion/TestRig.java
+++ b/src/test/java/test/concordion/TestRig.java
@@ -57,7 +57,7 @@ public ProcessingResult process(Resource resource) {
.withSource(source)
.withEvaluatorFactory(evaluatorFactory)
.withTarget(stubTarget)
- .withFixtureType(fixture.getFixtureType());
+ .withFixture(fixture);
fixtureExtensionLoader.addExtensions(fixture, concordionBuilder);
if (extension != null) {
From 62dadc240c93a6aa9b08403646bd216b59980bfd Mon Sep 17 00:00:00 2001
From: Nigel Charman
Date: Sat, 14 Jul 2018 10:07:08 +1200
Subject: [PATCH 40/42] Updated version of clirr
---
publish.gradle | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/publish.gradle b/publish.gradle
index ae1a5fe6e..ef8b1ba17 100644
--- a/publish.gradle
+++ b/publish.gradle
@@ -2,7 +2,7 @@ plugins {
id 'net.researchgate.release' version '2.3.0'
id 'org.ajoberstar.git-publish' version '1.0.0'
id "com.jfrog.bintray" version "1.6"
- id 'org.kordamp.gradle.clirr' version '0.2.2'
+ id 'org.kordamp.gradle.clirr' version '0.2.3'
id 'net.nemerosa.versioning' version '2.7.1'
}
From a92ac544559ecb165a6fb59abb275bf9a8843838 Mon Sep 17 00:00:00 2001
From: Nigel Charman
Date: Sat, 14 Jul 2018 21:20:50 +1200
Subject: [PATCH 41/42] Tidy up Travis yml
---
.travis.yml | 7 +------
1 file changed, 1 insertion(+), 6 deletions(-)
diff --git a/.travis.yml b/.travis.yml
index b62b9cb6f..7fc62a3c0 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -1,12 +1,7 @@
-sudo: false
-dist: trusty
language: java
-os:
-- linux
-
jdk:
- oraclejdk10
- oraclejdk9
- oraclejdk8
-- openjdk7
+- openjdk7
\ No newline at end of file
From 65d6855404e14d1a3de129399ea3886e4946ed72 Mon Sep 17 00:00:00 2001
From: Nigel Charman
Date: Sat, 14 Jul 2018 22:01:39 +1200
Subject: [PATCH 42/42] [Gradle Release Plugin] - pre tag commit: '2.2.0'.
---
gradle.properties | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/gradle.properties b/gradle.properties
index 7bea84892..15d4360f0 100644
--- a/gradle.properties
+++ b/gradle.properties
@@ -1,3 +1,3 @@
#Sat, 25 Jul 2015 22:18:16 +1200
group=org.concordion
-version=2.1.4
+version=2.2.0