brooklyn-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From aleds...@apache.org
Subject [1/8] brooklyn-server git commit: Refactor TestFrameworkAssertions
Date Tue, 09 Aug 2016 19:44:35 GMT
Repository: brooklyn-server
Updated Branches:
  refs/heads/master da14297bb -> 1a8789641


Refactor TestFrameworkAssertions


Project: http://git-wip-us.apache.org/repos/asf/brooklyn-server/repo
Commit: http://git-wip-us.apache.org/repos/asf/brooklyn-server/commit/967c2f0f
Tree: http://git-wip-us.apache.org/repos/asf/brooklyn-server/tree/967c2f0f
Diff: http://git-wip-us.apache.org/repos/asf/brooklyn-server/diff/967c2f0f

Branch: refs/heads/master
Commit: 967c2f0f614f255ecde637ff96c0fe31a7f11d2d
Parents: ceb3fc1
Author: Aled Sage <aled.sage@gmail.com>
Authored: Tue Jul 26 16:34:45 2016 +0100
Committer: Aled Sage <aled.sage@gmail.com>
Committed: Wed Aug 3 20:56:01 2016 +0100

----------------------------------------------------------------------
 .../test/framework/TestEffectorImpl.java        |   6 +-
 .../test/framework/TestFrameworkAssertions.java | 187 +++++++++++++------
 .../test/framework/TestHttpCallImpl.java        |   7 +-
 .../brooklyn/test/framework/TestSensor.java     |  10 +
 .../brooklyn/test/framework/TestSensorImpl.java |  26 +--
 .../framework/TestFrameworkAssertionsTest.java  |   8 +-
 6 files changed, 174 insertions(+), 70 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/967c2f0f/test-framework/src/main/java/org/apache/brooklyn/test/framework/TestEffectorImpl.java
----------------------------------------------------------------------
diff --git a/test-framework/src/main/java/org/apache/brooklyn/test/framework/TestEffectorImpl.java
b/test-framework/src/main/java/org/apache/brooklyn/test/framework/TestEffectorImpl.java
index d312d54..e757ca0 100644
--- a/test-framework/src/main/java/org/apache/brooklyn/test/framework/TestEffectorImpl.java
+++ b/test-framework/src/main/java/org/apache/brooklyn/test/framework/TestEffectorImpl.java
@@ -33,12 +33,14 @@ import org.apache.brooklyn.core.entity.Entities;
 import org.apache.brooklyn.core.entity.lifecycle.Lifecycle;
 import org.apache.brooklyn.core.entity.lifecycle.ServiceStateLogic;
 import org.apache.brooklyn.core.mgmt.internal.EffectorUtils;
+import org.apache.brooklyn.test.framework.TestFrameworkAssertions.AssertionOptions;
 import org.apache.brooklyn.util.exceptions.Exceptions;
 import org.apache.brooklyn.util.guava.Maybe;
 import org.apache.brooklyn.util.time.Duration;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import com.google.common.base.Supplier;
 import com.google.common.base.Suppliers;
 import com.google.common.collect.ImmutableMap;
 import com.google.common.collect.Lists;
@@ -83,7 +85,9 @@ public class TestEffectorImpl extends TargetableTestComponentImpl implements
Tes
 
             final List<Map<String, Object>> assertions = getAssertions(this,
ASSERTIONS);
             if(assertions != null && !assertions.isEmpty()){
-                TestFrameworkAssertions.checkAssertions(ImmutableMap.of("timeout", timeout),
assertions, effectorName, Suppliers.ofInstance(effectorResult));
+                Supplier<?> supplier = Suppliers.ofInstance(effectorResult);
+                TestFrameworkAssertions.checkAssertionsEventually(new AssertionOptions(effectorName,
supplier)
+                        .timeout(timeout).assertions(assertions));
             }
 
             //Add result of effector to sensor

http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/967c2f0f/test-framework/src/main/java/org/apache/brooklyn/test/framework/TestFrameworkAssertions.java
----------------------------------------------------------------------
diff --git a/test-framework/src/main/java/org/apache/brooklyn/test/framework/TestFrameworkAssertions.java
b/test-framework/src/main/java/org/apache/brooklyn/test/framework/TestFrameworkAssertions.java
index 067ac2f..0227bf1 100644
--- a/test-framework/src/main/java/org/apache/brooklyn/test/framework/TestFrameworkAssertions.java
+++ b/test-framework/src/main/java/org/apache/brooklyn/test/framework/TestFrameworkAssertions.java
@@ -24,18 +24,23 @@ import java.util.List;
 import java.util.Map;
 import java.util.Objects;
 
-import com.google.common.base.Joiner;
-import com.google.common.base.Supplier;
-import com.google.common.reflect.TypeToken;
-
 import org.apache.brooklyn.api.entity.Entity;
 import org.apache.brooklyn.config.ConfigKey;
 import org.apache.brooklyn.test.Asserts;
+import org.apache.brooklyn.util.collections.MutableMap;
 import org.apache.brooklyn.util.core.flags.TypeCoercions;
 import org.apache.brooklyn.util.exceptions.CompoundRuntimeException;
+import org.apache.brooklyn.util.exceptions.Exceptions;
 import org.apache.brooklyn.util.exceptions.FatalConfigurationRuntimeException;
 import org.apache.brooklyn.util.guava.Maybe;
 import org.apache.brooklyn.util.text.Strings;
+import org.apache.brooklyn.util.time.Duration;
+
+import com.google.common.base.Joiner;
+import com.google.common.base.Supplier;
+import com.google.common.collect.ImmutableList;
+import com.google.common.collect.ImmutableMap;
+import com.google.common.reflect.TypeToken;
 
 
 /**
@@ -56,14 +61,65 @@ public class TestFrameworkAssertions {
     public static final String HAS_TRUTH_VALUE = "hasTruthValue";
     public static final String UNKNOWN_CONDITION = "unknown condition";
 
+    public static class AssertionOptions {
+        protected Map<String,?> flags;
+        protected List<? extends Map<String, ?>> assertions;
+        protected List<? extends Map<String, ?>> abortConditions;
+        protected String target;
+        protected Supplier<?> supplier;
+        
+        public AssertionOptions(String target, Supplier<?> supplier) {
+            this.target = target;
+            this.supplier = supplier;
+        }
+        public AssertionOptions flags(Map<String,?> val) {
+            this.flags = val;
+            return this;
+        }
+        public AssertionOptions timeout(Duration val) {
+            if (flags == null) {
+                flags = ImmutableMap.of("timeout", val);
+            } else {
+                MutableMap.<String, Object>builder()
+                        .putAll(flags)
+                        .put("timeout", val)
+                        .build();
+            }
+            return this;
+        }
+        public AssertionOptions assertions(Map<String, ?> val) {
+            this.assertions = ImmutableList.of(val);
+            return this;
+        }
+        public AssertionOptions assertions(List<? extends Map<String, ?>> val)
{
+            this.assertions = val;
+            return this;
+        }
+        public AssertionOptions abortConditions(Map<String, ?> val) {
+            this.abortConditions = ImmutableList.of(val);
+            return this;
+        }
+        public AssertionOptions abortConditions(List<? extends Map<String, ?>>
val) {
+            this.abortConditions = val;
+            return this;
+        }
+        public AssertionOptions target(String val) {
+            this.target = val;
+            return this;
+        }
+        public AssertionOptions supplier(Supplier<?> val) {
+            this.supplier = val;
+            return this;
+        }
+    }
 
     private TestFrameworkAssertions() {
     }
 
 
     /**
-     *  Get assertions tolerantly from a configuration key.
-     *  This supports either a simple map of assertions, such as
+     * Get assertions tolerantly from a configuration key.
+     * This supports either a simple map of assertions, such as
      *
      * <pre>
      * assertOut:
@@ -76,13 +132,33 @@ public class TestFrameworkAssertions {
      * - contains: 2 users
      * - contains: 2 days
      * </pre>
-     * or
+     */
+    public static List<Map<String, Object>> getAssertions(Entity entity, ConfigKey<Object>
key) {
+        return getAsListOfMaps(entity, key);
+    }
+    
+    /**
+     * Get abort-condition tolerantly from a configuration key.
+     * This supports either a simple map of assertions, such as
+     *
+     * <pre>
+     * abortCondition:
+     *   equals: ON_FIRE
+     * </pre>
+     * or a list of such maps, (which allows you to repeat keys):
      * <pre>
-     * private static List<Map<String,Object>> getAssertions(ConfigKey<Object>
key) {
-     * }
+     * abortCondition:
+     * - equals: ON_FIRE
+     * - equals: STOPPING
+     * - equals: STOPPED
+     * - equals: DESTROYED
      * </pre>
      */
-    public static List<Map<String, Object>> getAssertions(Entity entity, ConfigKey<Object>
key) {
+    public static List<Map<String, Object>> getAbortConditions(Entity entity,
ConfigKey<Object> key) {
+        return getAsListOfMaps(entity, key);
+    }
+    
+    protected static List<Map<String, Object>> getAsListOfMaps(Entity entity,
ConfigKey<Object> key) {
         Object config = entity.getConfig(key);
         Maybe<Map<String, Object>> maybeMap = TypeCoercions.tryCoerce(config,
new TypeToken<Map<String, Object>>() {});
         if (maybeMap.isPresent()) {
@@ -98,65 +174,72 @@ public class TestFrameworkAssertions {
         throw new FatalConfigurationRuntimeException(key.getDescription() + " is not a map
or list of maps");
     }
 
-
-    public static <T> void checkAssertions(Map<String,?> flags,
-                                           Map<String, Object> assertions,
-                                           String target,
-                                           final Supplier<T> actualSupplier) {
-
-        AssertionSupport support = new AssertionSupport();
-        checkAssertions(support, flags, assertions, target, actualSupplier);
-        support.validate();
+    /**
+     * @Deprecated since 0.10.0; use {@link #checkAssertionsEventually(AssertionOptions)}
+     */
+    @Deprecated
+    public static <T> void checkAssertions(Map<String,?> flags, List<? extends
Map<String, ?>> assertions,
+            String target, Supplier<T> supplier) {
+        checkAssertionsEventually(new AssertionOptions(target, supplier).flags(flags).assertions(assertions));
+    }
+    
+    /**
+     * @Deprecated since 0.10.0; use {@link #checkAssertionsEventually(AssertionOptions)};
don't pass in own {@link AssertionSupport}.
+     */
+    @Deprecated
+    public static <T> void checkAssertions(AssertionSupport support, Map<String,?>
flags,
+            List<? extends Map<String, ?>> assertions, String target, Supplier<T>
supplier) {
+        checkAssertionsEventually(support, new AssertionOptions(target, supplier).flags(flags).assertions(assertions));
     }
 
+    /**
+     * @Deprecated since 0.10.0; use {@link #checkAssertionsEventually(AssertionOptions)}
+     */
+    @Deprecated
+    public static <T> void checkAssertions(AssertionSupport support, Map<String,?>
flags,
+            Map<String, ?> assertions, String target, Supplier<T> supplier) {
+        checkAssertionsEventually(support, new AssertionOptions(target, supplier).flags(flags).assertions(assertions));
+    }
 
-    public static <T> void checkAssertions(Map<String,?> flags,
-                                           List<Map<String, Object>> assertions,
-                                           String target,
-                                           final Supplier<T> actualSupplier) {
+    /**
+     * @Deprecated since 0.10.0; use {@link #checkAssertionsEventually(AssertionOptions)}
+     */
+    @Deprecated
+    public static <T> void checkAssertions(Map<String,?> flags, Map<String,
?> assertions,
+            String target, Supplier<T> supplier) {
+        checkAssertionsEventually(new AssertionOptions(target, supplier).flags(flags).assertions(assertions));
+    }
 
+    public static <T> void checkAssertionsEventually(AssertionOptions options) {
         AssertionSupport support = new AssertionSupport();
-        for (Map<String, Object> assertionMap : assertions) {
-            checkAssertions(support, flags, assertionMap, target, actualSupplier);
-        }
+        checkAssertionsEventually(support, options);
         support.validate();
     }
 
-    public static <T> void checkAssertions(final AssertionSupport support,
-                                           Map<String,?> flags,
-                                           final List<Map<String, Object>> assertions,
-                                           final String target,
-                                           final Supplier<T> actualSupplier) {
-
-        for (Map<String, Object> assertionMap : assertions) {
-            checkAssertions(support, flags, assertionMap, target, actualSupplier);
-        }
-    }
-
-    public static <T> void checkAssertions(final AssertionSupport support,
-                                           Map<String,?> flags,
-                                           final Map<String, Object> assertions,
-                                           final String target,
-                                           final Supplier<T> actualSupplier) {
-
-        if (null == assertions) {
+    protected static <T> void checkAssertionsEventually(AssertionSupport support, final
AssertionOptions options) {
+        if (options.assertions == null || options.assertions.isEmpty()) {
             return;
         }
         try {
-            Asserts.succeedsEventually(flags, new Runnable() {
+            Asserts.succeedsEventually(options.flags, new Runnable() {
                 @Override
                 public void run() {
-                    T actual = actualSupplier.get();
-                    checkActualAgainstAssertions(assertions, target, actual);
+                    Object actual = options.supplier.get();
+                    for (Map<String, ?> assertionMap : options.assertions) {
+                        checkActualAgainstAssertions(assertionMap, options.target, actual);
+                    }
                 }
             });
+        } catch (AssertionError t) {
+            support.fail(t);
         } catch (Throwable t) {
+            Exceptions.propagateIfFatal(t);
             support.fail(t);
         }
     }
 
-    public static <T> void checkActualAgainstAssertions(AssertionSupport support,
-            Map<String, Object> assertions, String target, T actual) {
+    protected static <T> void checkActualAgainstAssertions(AssertionSupport support,
Map<String, ?> assertions, 
+            String target, T actual) {
         try {
             checkActualAgainstAssertions(assertions, target, actual);
         } catch (Throwable t) {
@@ -164,9 +247,9 @@ public class TestFrameworkAssertions {
         }
     }
 
-    public static <T> void checkActualAgainstAssertions(Map<String, Object> assertions,
-                                                         String target, T actual) {
-        for (Map.Entry<String, Object> assertion : assertions.entrySet()) {
+    protected static <T> void checkActualAgainstAssertions(Map<String, ?> assertions,
+            String target, T actual) {
+        for (Map.Entry<String, ?> assertion : assertions.entrySet()) {
             String condition = assertion.getKey().toString();
             Object expected = assertion.getValue();
             switch (condition) {

http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/967c2f0f/test-framework/src/main/java/org/apache/brooklyn/test/framework/TestHttpCallImpl.java
----------------------------------------------------------------------
diff --git a/test-framework/src/main/java/org/apache/brooklyn/test/framework/TestHttpCallImpl.java
b/test-framework/src/main/java/org/apache/brooklyn/test/framework/TestHttpCallImpl.java
index 928830f..53bec37 100644
--- a/test-framework/src/main/java/org/apache/brooklyn/test/framework/TestHttpCallImpl.java
+++ b/test-framework/src/main/java/org/apache/brooklyn/test/framework/TestHttpCallImpl.java
@@ -27,6 +27,7 @@ import java.util.Map;
 import org.apache.brooklyn.api.location.Location;
 import org.apache.brooklyn.core.entity.lifecycle.Lifecycle;
 import org.apache.brooklyn.core.entity.lifecycle.ServiceStateLogic;
+import org.apache.brooklyn.test.framework.TestFrameworkAssertions.AssertionOptions;
 import org.apache.brooklyn.util.exceptions.Exceptions;
 import org.apache.brooklyn.util.http.HttpTool;
 import org.apache.brooklyn.util.time.Duration;
@@ -85,7 +86,8 @@ public class TestHttpCallImpl extends TargetableTestComponentImpl implements
Tes
                         return HttpTool.getContent(url);
                     }
                 };
-                TestFrameworkAssertions.checkAssertions(flags, assertions, target.toString(),
getBody);
+                TestFrameworkAssertions.checkAssertionsEventually(new AssertionOptions(target.toString(),
getBody)
+                        .flags(flags).assertions(assertions));
                 break;
             case status:
                 Supplier<Integer> getStatusCode = new Supplier<Integer>() {
@@ -99,7 +101,8 @@ public class TestHttpCallImpl extends TargetableTestComponentImpl implements
Tes
                         }
                     }
                 };
-                TestFrameworkAssertions.checkAssertions(flags, assertions, target.toString(),
getStatusCode);
+                TestFrameworkAssertions.checkAssertionsEventually(new AssertionOptions(target.toString(),
getStatusCode)
+                        .flags(flags).assertions(assertions));
                 break;
             default:
                 throw new RuntimeException("Unexpected assertion target (" + target + ")");

http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/967c2f0f/test-framework/src/main/java/org/apache/brooklyn/test/framework/TestSensor.java
----------------------------------------------------------------------
diff --git a/test-framework/src/main/java/org/apache/brooklyn/test/framework/TestSensor.java
b/test-framework/src/main/java/org/apache/brooklyn/test/framework/TestSensor.java
index 4bc9521..2cbdf66 100644
--- a/test-framework/src/main/java/org/apache/brooklyn/test/framework/TestSensor.java
+++ b/test-framework/src/main/java/org/apache/brooklyn/test/framework/TestSensor.java
@@ -23,6 +23,8 @@ import org.apache.brooklyn.config.ConfigKey;
 import org.apache.brooklyn.core.config.ConfigKeys;
 import org.apache.brooklyn.util.core.flags.SetFromFlag;
 
+import com.google.common.collect.ImmutableMap;
+
 /**
  * Entity that tests a sensor value on another entity
  */
@@ -32,4 +34,12 @@ public interface TestSensor extends BaseTest {
     @SetFromFlag(nullable = false)
     ConfigKey<String> SENSOR_NAME = ConfigKeys.newConfigKey(String.class, "sensor",
"Sensor to evaluate");
 
+    /**
+     * Abort-conditions - if matched, the test-case will abort early.
+     */
+    ConfigKey<Object> ABORT_CONDITIONS = ConfigKeys.newConfigKey(
+            Object.class, 
+            "abortConditions", 
+            "Abort conditions to be evaluated (abort if non-empty and any are true)",
+            ImmutableMap.<String, Object>of());
 }

http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/967c2f0f/test-framework/src/main/java/org/apache/brooklyn/test/framework/TestSensorImpl.java
----------------------------------------------------------------------
diff --git a/test-framework/src/main/java/org/apache/brooklyn/test/framework/TestSensorImpl.java
b/test-framework/src/main/java/org/apache/brooklyn/test/framework/TestSensorImpl.java
index aa8eb60..db62103 100644
--- a/test-framework/src/main/java/org/apache/brooklyn/test/framework/TestSensorImpl.java
+++ b/test-framework/src/main/java/org/apache/brooklyn/test/framework/TestSensorImpl.java
@@ -18,6 +18,7 @@
  */
 package org.apache.brooklyn.test.framework;
 
+import static org.apache.brooklyn.test.framework.TestFrameworkAssertions.getAbortConditions;
 import static org.apache.brooklyn.test.framework.TestFrameworkAssertions.getAssertions;
 
 import java.util.Collection;
@@ -25,23 +26,22 @@ import java.util.List;
 import java.util.Map;
 import java.util.concurrent.atomic.AtomicReference;
 
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import com.google.common.base.Objects;
-import com.google.common.base.Predicate;
-import com.google.common.base.Supplier;
-import com.google.common.collect.ImmutableMap;
-import com.google.common.collect.Lists;
-
 import org.apache.brooklyn.api.entity.Entity;
 import org.apache.brooklyn.api.location.Location;
 import org.apache.brooklyn.core.entity.lifecycle.Lifecycle;
 import org.apache.brooklyn.core.entity.lifecycle.ServiceStateLogic;
 import org.apache.brooklyn.core.sensor.Sensors;
+import org.apache.brooklyn.test.framework.TestFrameworkAssertions.AssertionOptions;
 import org.apache.brooklyn.util.core.flags.TypeCoercions;
 import org.apache.brooklyn.util.exceptions.Exceptions;
 import org.apache.brooklyn.util.time.Duration;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.google.common.base.Objects;
+import com.google.common.base.Predicate;
+import com.google.common.base.Supplier;
+import com.google.common.collect.Lists;
 
 /**
  * {@inheritDoc}
@@ -62,18 +62,20 @@ public class TestSensorImpl extends TargetableTestComponentImpl implements
TestS
             final Entity target = resolveTarget();
             final Duration timeout = getConfig(TIMEOUT);
             final List<Map<String, Object>> assertions = getAssertions(this,
ASSERTIONS);
+            final List<Map<String, Object>> abortConditions = getAbortConditions(this,
ABORT_CONDITIONS);
             if (!getChildren().isEmpty()) {
                 throw new RuntimeException(String.format("The entity [%s] cannot have child
entities", getClass().getName()));
             }
             
-            TestFrameworkAssertions.checkAssertions(ImmutableMap.of("timeout", timeout),
assertions, sensor.get(),
-                new Supplier<Object>() {
+            Supplier<?> supplier = new Supplier<Object>() {
                 @Override
                 public Object get() {
                     final Object sensorValue = target.sensors().get(Sensors.newSensor(Object.class,
sensor.get()));
                     return sensorValue;
                 }
-            });
+            };
+            TestFrameworkAssertions.checkAssertionsEventually(new AssertionOptions(sensor.get(),
supplier).timeout(timeout)
+                    .assertions(assertions).abortConditions(abortConditions));
 
             setUpAndRunState(true, Lifecycle.RUNNING);
         } catch (Throwable t) {

http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/967c2f0f/test-framework/src/test/java/org/apache/brooklyn/test/framework/TestFrameworkAssertionsTest.java
----------------------------------------------------------------------
diff --git a/test-framework/src/test/java/org/apache/brooklyn/test/framework/TestFrameworkAssertionsTest.java
b/test-framework/src/test/java/org/apache/brooklyn/test/framework/TestFrameworkAssertionsTest.java
index c1ef79b..0b660e3 100644
--- a/test-framework/src/test/java/org/apache/brooklyn/test/framework/TestFrameworkAssertionsTest.java
+++ b/test-framework/src/test/java/org/apache/brooklyn/test/framework/TestFrameworkAssertionsTest.java
@@ -21,6 +21,7 @@ package org.apache.brooklyn.test.framework;
 import com.google.common.base.Supplier;
 import com.google.common.collect.ImmutableMap;
 import org.apache.brooklyn.test.Asserts;
+import org.apache.brooklyn.test.framework.TestFrameworkAssertions.AssertionOptions;
 import org.apache.brooklyn.util.text.Identifiers;
 import org.apache.brooklyn.util.time.Duration;
 import org.slf4j.Logger;
@@ -78,7 +79,7 @@ public class TestFrameworkAssertionsTest {
                 return data;
             }
         };
-        TestFrameworkAssertions.checkAssertions(ImmutableMap.of("timeout", new Duration(2L,
TimeUnit.SECONDS)), assertions, Objects.toString(data), supplier);
+        TestFrameworkAssertions.checkAssertionsEventually(new AssertionOptions(Objects.toString(data),
supplier).timeout(Duration.seconds(2)).assertions(assertions));
     }
 
     @DataProvider
@@ -127,7 +128,7 @@ public class TestFrameworkAssertionsTest {
         Duration timeout = Duration.millis(1);
         
         try {
-            TestFrameworkAssertions.checkAssertions(ImmutableMap.of("timeout", timeout),
assertions, Objects.toString(data), supplier);
+            TestFrameworkAssertions.checkAssertionsEventually(new AssertionOptions(Objects.toString(data),
supplier).timeout(timeout).assertions(assertions));
             Asserts.shouldHaveFailedPreviously();
         } catch (AssertionError e) {
             Asserts.expectedFailureContains(e, Objects.toString(data), condition, expected.toString());
@@ -149,7 +150,8 @@ public class TestFrameworkAssertionsTest {
             }
         };
         try {
-            TestFrameworkAssertions.checkAssertions(ImmutableMap.of("timeout", Duration.millis(1)),
assertions, "anyTarget", supplier);
+            TestFrameworkAssertions.checkAssertionsEventually(new AssertionOptions("anyTarget",
supplier).timeout(Duration.millis(1))
+                    .assertions(assertions));
             Asserts.shouldHaveFailedPreviously();
         } catch (Throwable e) {
             Asserts.expectedFailureOfType(e, AssertionError.class);


Mime
View raw message