You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by da...@apache.org on 2014/05/27 23:50:49 UTC
git commit: ISIS-776: tracing occur as execution of fixtures
progresses...
Repository: isis
Updated Branches:
refs/heads/master 63e148d80 -> 647ad2cd7
ISIS-776: tracing occur as execution of fixtures progresses...
... rather than dumped out at end.
NB: previous commit was incorrectly associated with ISIS-716, should have been with ISIS-776.
Project: http://git-wip-us.apache.org/repos/asf/isis/repo
Commit: http://git-wip-us.apache.org/repos/asf/isis/commit/647ad2cd
Tree: http://git-wip-us.apache.org/repos/asf/isis/tree/647ad2cd
Diff: http://git-wip-us.apache.org/repos/asf/isis/diff/647ad2cd
Branch: refs/heads/master
Commit: 647ad2cd75c781b79568a89ba1ea7c2d091a0c68
Parents: 63e148d
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Tue May 27 22:50:27 2014 +0100
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Tue May 27 22:50:27 2014 +0100
----------------------------------------------------------------------
.../applib/fixturescripts/FixtureScript.java | 74 +++++++++-----------
.../ExecutionContextTest_roundUp.java | 39 +++++++++++
2 files changed, 71 insertions(+), 42 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/isis/blob/647ad2cd/core/applib/src/main/java/org/apache/isis/applib/fixturescripts/FixtureScript.java
----------------------------------------------------------------------
diff --git a/core/applib/src/main/java/org/apache/isis/applib/fixturescripts/FixtureScript.java b/core/applib/src/main/java/org/apache/isis/applib/fixturescripts/FixtureScript.java
index bc6fae7..81526f0 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/fixturescripts/FixtureScript.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/fixturescripts/FixtureScript.java
@@ -19,7 +19,6 @@
package org.apache.isis.applib.fixturescripts;
import java.io.PrintStream;
-import java.io.PrintWriter;
import java.util.Collections;
import java.util.List;
import java.util.Map;
@@ -111,7 +110,6 @@ public abstract class FixtureScript
private PrintStream tracePrintStream;
- private PrintWriter tracePrintWriter;
/**
* Enable tracing of the execution to the provided {@link java.io.PrintStream}.
@@ -122,14 +120,6 @@ public abstract class FixtureScript
}
/**
- * Enable tracing of the execution to the provided {@link java.io.PrintWriter}.
- */
- public FixtureScript withTracing(PrintWriter tracePrintWriter) {
- this.tracePrintWriter = tracePrintWriter;
- return this;
- }
-
- /**
* Enable tracing of the execution to stdout.
*/
public FixtureScript withTracing() {
@@ -261,6 +251,7 @@ public abstract class FixtureScript
private final String parameters;
private final FixtureResultList fixtureResults;
private final Map<String,Class> fixtureScriptClasses = Maps.newLinkedHashMap();
+ private PrintStream tracePrintStream;
public ExecutionContext(String parameters, FixtureScripts fixtureScripts) {
fixtureResults = new FixtureResultList(fixtureScripts);
@@ -283,64 +274,63 @@ public abstract class FixtureScript
}
public void executeIfNotAlready(FixtureScript fixtureScript) {
- if(!hasExecuted(fixtureScript)) {
+ if(shouldExecute(fixtureScript)) {
+ trace(fixtureScript, As.EXEC);
fixtureScript.execute(this);
- executed(fixtureScript);
+ } else {
+ trace(fixtureScript, As.SKIP);
}
}
- private boolean hasExecuted(FixtureScript fixtureScript) {
- return fixtureScriptClasses.values().contains(fixtureScript.getClass());
+ static enum As { EXEC, SKIP }
+ private void trace(FixtureScript fixtureScript, As as) {
+ if(tracePrintStream == null) {
+ return;
+ }
+ final String qualifiedName = fixtureScript.getQualifiedName();
+ final String paddedQualifiedName = pad(qualifiedName, maxQualifiedNameLength());
+ final String trace = paddedQualifiedName + ": " + as + " " + fixtureScript.getClass().getName() + "\n";
+ tracePrintStream.print(trace);
+ tracePrintStream.flush();
}
- private void executed(FixtureScript fixtureScript) {
- fixtureScriptClasses.put(fixtureScript.getQualifiedName(), fixtureScript.getClass());
+ private boolean shouldExecute(FixtureScript fixtureScript) {
+ final boolean contained = fixtureScriptClasses.values().contains(fixtureScript.getClass());
+ if(!contained) {
+ fixtureScriptClasses.put(fixtureScript.getQualifiedName(), fixtureScript.getClass());
+ }
+ return !contained;
}
- public StringBuilder appendExecutedTo(StringBuilder buf) {
- final int max = maxQualifiedNameLength();
- for (final String qualifiedName : this.fixtureScriptClasses.keySet()) {
- buf.append(pad(qualifiedName, max))
- .append(": ")
- .append(fixtureScriptClasses.get(qualifiedName).getName())
- .append("\n");
- }
- return buf;
+ private static String pad(String str, int padTo) {
+ return Strings.padEnd(str, padTo, ' ');
}
private int maxQualifiedNameLength() {
- int max = 0;
+ int max = 40;
for (final String qualifiedName : this.fixtureScriptClasses.keySet()) {
max = Math.max(max, qualifiedName.length());
}
- return max;
+ return roundup(max, 20);
}
- private static String pad(String str, int len) {
- return Strings.padEnd(str, len, ' ');
+ static int roundup(int n, int roundTo) {
+ return ((n / roundTo) + 1) * roundTo;
}
+ public ExecutionContext withTracing(PrintStream tracePrintStream) {
+ this.tracePrintStream = tracePrintStream;
+ return this;
+ }
}
@Programmatic
public final List<FixtureResult> run(final String parameters) {
- final ExecutionContext executionContext = new ExecutionContext(parameters, fixtureScripts);
+ final ExecutionContext executionContext = new ExecutionContext(parameters, fixtureScripts).withTracing(this.tracePrintStream);
executionContext.executeIfNotAlready(this);
- traceIfRequired(executionContext);
return executionContext.getResults();
}
- private void traceIfRequired(ExecutionContext executionContext) {
- if(tracePrintStream != null || tracePrintWriter != null) {
- final String trace = executionContext.appendExecutedTo(new StringBuilder()).toString();
- if(tracePrintWriter != null) {
- tracePrintWriter.print(trace);
- }
- if(tracePrintStream != null) {
- tracePrintStream.print(trace);
- }
- }
- }
/**
* Optional hook to validate parameters.
http://git-wip-us.apache.org/repos/asf/isis/blob/647ad2cd/core/applib/src/test/java/org/apache/isis/applib/fixturescripts/ExecutionContextTest_roundUp.java
----------------------------------------------------------------------
diff --git a/core/applib/src/test/java/org/apache/isis/applib/fixturescripts/ExecutionContextTest_roundUp.java b/core/applib/src/test/java/org/apache/isis/applib/fixturescripts/ExecutionContextTest_roundUp.java
new file mode 100644
index 0000000..82ac787
--- /dev/null
+++ b/core/applib/src/test/java/org/apache/isis/applib/fixturescripts/ExecutionContextTest_roundUp.java
@@ -0,0 +1,39 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.isis.applib.fixturescripts;
+
+import org.junit.Assert;
+import org.junit.Test;
+
+import static org.hamcrest.Matchers.is;
+
+public class ExecutionContextTest_roundUp {
+
+ @Test
+ public void happyCase() throws Exception {
+ Assert.assertThat(FixtureScript.ExecutionContext.roundup(5, 20), is(20));
+ Assert.assertThat(FixtureScript.ExecutionContext.roundup(19, 20), is(20));
+ Assert.assertThat(FixtureScript.ExecutionContext.roundup(20, 20), is(40));
+ Assert.assertThat(FixtureScript.ExecutionContext.roundup(21, 20), is(40));
+ Assert.assertThat(FixtureScript.ExecutionContext.roundup(39, 20), is(40));
+ Assert.assertThat(FixtureScript.ExecutionContext.roundup(40, 20), is(60));
+ }
+
+}