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));
+    }
+
+}