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 <[email protected]> Authored: Tue May 27 22:50:27 2014 +0100 Committer: Dan Haywood <[email protected]> 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)); + } + +}
