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/04/30 01:19:43 UTC

git commit: ISIS-569: JavassistImposteriser

Repository: isis
Updated Branches:
  refs/heads/master 42f33f6a2 -> 07fb0e6ee


ISIS-569: JavassistImposteriser

and remove dependency on (cglib-based) ClassImposteriser.

Also:
- update .travis.yml.


Project: http://git-wip-us.apache.org/repos/asf/isis/repo
Commit: http://git-wip-us.apache.org/repos/asf/isis/commit/07fb0e6e
Tree: http://git-wip-us.apache.org/repos/asf/isis/tree/07fb0e6e
Diff: http://git-wip-us.apache.org/repos/asf/isis/diff/07fb0e6e

Branch: refs/heads/master
Commit: 07fb0e6ee3924dcd3a585eca66b6c7121faaafbc
Parents: 42f33f6
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Wed Apr 30 00:19:32 2014 +0100
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Wed Apr 30 00:19:32 2014 +0100

----------------------------------------------------------------------
 .travis.yml                                     |   1 +
 component/objectstore/nosql/pom.xml             |   6 -
 component/viewer/dnd/impl/pom.xml               |   6 -
 component/viewer/junit/impl/pom.xml             |   5 -
 component/viewer/wicket/impl/pom.xml            |   6 -
 component/viewer/wicket/model/pom.xml           |   7 -
 component/viewer/wicket/ui/pom.xml              |   6 -
 core/integtestsupport/pom.xml                   |   5 -
 .../facets/ImperativeFacetUtilsTest.java        |  15 +-
 .../services/ServicesInjectorDefaultTest.java   |  10 +-
 ...icationFacetFactoryProcessParameterTest.java |  10 +-
 ...ficationFacetFactoryProcessPropertyTest.java |  21 +-
 ...cificationValidatingInteractionMoreTest.java |  24 +-
 ...ySpecificationValidatingInteractionTest.java |  24 +-
 ...jectsDefault_savesOidGeneratorAsMemento.java |  21 +-
 core/pom.xml                                    |  22 --
 core/runtime/pom.xml                            |   6 -
 core/specsupport/pom.xml                        |   5 -
 .../scenarios/DomainServiceProviderMockery.java |   7 +-
 core/unittestsupport/pom.xml                    |  17 +-
 .../isis/core/unittestsupport/files/Files.java  |   2 +-
 .../unittestsupport/jmocking/IsisActions.java   |   2 +-
 .../jmocking/JUnitRuleMockery2.java             |  15 +-
 .../jmocking/JavassistImposteriser.java         | 208 +++++++++++++
 .../jmocking/JavassistImposteriserTest.java     | 299 +++++++++++++++++++
 .../objectstore/sql/sql-tests-common/pom.xml    |   4 -
 mothballed/misc/metamodel/namefile/pom.xml      |   5 -
 27 files changed, 572 insertions(+), 187 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/isis/blob/07fb0e6e/.travis.yml
----------------------------------------------------------------------
diff --git a/.travis.yml b/.travis.yml
index dff5f3a..9165eca 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -1 +1,2 @@
 language: java
+install: "mvn clean install -P released"

http://git-wip-us.apache.org/repos/asf/isis/blob/07fb0e6e/component/objectstore/nosql/pom.xml
----------------------------------------------------------------------
diff --git a/component/objectstore/nosql/pom.xml b/component/objectstore/nosql/pom.xml
index eab4514..5e654ed 100644
--- a/component/objectstore/nosql/pom.xml
+++ b/component/objectstore/nosql/pom.xml
@@ -205,12 +205,6 @@
             <scope>test</scope>
         </dependency>
 
-        <dependency>
-            <groupId>org.jmock</groupId>
-            <artifactId>jmock-legacy</artifactId>
-            <scope>test</scope>
-        </dependency>
-
     </dependencies>
     
 </project>

http://git-wip-us.apache.org/repos/asf/isis/blob/07fb0e6e/component/viewer/dnd/impl/pom.xml
----------------------------------------------------------------------
diff --git a/component/viewer/dnd/impl/pom.xml b/component/viewer/dnd/impl/pom.xml
index f5e587d..f691a5c 100644
--- a/component/viewer/dnd/impl/pom.xml
+++ b/component/viewer/dnd/impl/pom.xml
@@ -104,12 +104,6 @@
 			<scope>test</scope>
 		</dependency>
 
-		<dependency>
-			<groupId>org.jmock</groupId>
-			<artifactId>jmock-legacy</artifactId>
-			<scope>test</scope>
-		</dependency>
-
         <dependency>
             <groupId>org.jmock</groupId>
             <artifactId>jmock-junit4</artifactId>

http://git-wip-us.apache.org/repos/asf/isis/blob/07fb0e6e/component/viewer/junit/impl/pom.xml
----------------------------------------------------------------------
diff --git a/component/viewer/junit/impl/pom.xml b/component/viewer/junit/impl/pom.xml
index e8d9de7..f60859b 100644
--- a/component/viewer/junit/impl/pom.xml
+++ b/component/viewer/junit/impl/pom.xml
@@ -134,11 +134,6 @@
         </dependency>
 
         <dependency>
-            <groupId>org.jmock</groupId>
-            <artifactId>jmock-legacy</artifactId>
-        </dependency>
-
-        <dependency>
             <groupId>junit</groupId>
             <artifactId>junit</artifactId>
         </dependency>

http://git-wip-us.apache.org/repos/asf/isis/blob/07fb0e6e/component/viewer/wicket/impl/pom.xml
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/impl/pom.xml b/component/viewer/wicket/impl/pom.xml
index 051cad8..89ec66b 100644
--- a/component/viewer/wicket/impl/pom.xml
+++ b/component/viewer/wicket/impl/pom.xml
@@ -90,12 +90,6 @@
 		</dependency>
 
 
-		<!-- jmock class mocking -->
-		<dependency>
-			<groupId>org.jmock</groupId>
-			<artifactId>jmock-legacy</artifactId>
-			<scope>test</scope>
-		</dependency>
 		<dependency>
 			<groupId>com.google.inject</groupId>
 			<artifactId>guice-parent</artifactId>

http://git-wip-us.apache.org/repos/asf/isis/blob/07fb0e6e/component/viewer/wicket/model/pom.xml
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/model/pom.xml b/component/viewer/wicket/model/pom.xml
index bd647cd..6b4cb0b 100644
--- a/component/viewer/wicket/model/pom.xml
+++ b/component/viewer/wicket/model/pom.xml
@@ -60,13 +60,6 @@
 			<artifactId>isis-core-runtime</artifactId>
 		</dependency>
 
-		<!--  jmock class mocking -->
-		<dependency>
-		    <groupId>org.jmock</groupId>
-			<artifactId>jmock-legacy</artifactId>
-		    <scope>test</scope>
-		</dependency>
-
 	</dependencies>
 
 </project>

http://git-wip-us.apache.org/repos/asf/isis/blob/07fb0e6e/component/viewer/wicket/ui/pom.xml
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/pom.xml b/component/viewer/wicket/ui/pom.xml
index 66903f6..b085474 100644
--- a/component/viewer/wicket/ui/pom.xml
+++ b/component/viewer/wicket/ui/pom.xml
@@ -117,11 +117,5 @@
 			<artifactId>log4j</artifactId>
 		</dependency>
 
-		<!-- jmock class mocking -->
-		<dependency>
-			<groupId>org.jmock</groupId>
-			<artifactId>jmock-legacy</artifactId>
-			<scope>test</scope>
-		</dependency>
 	</dependencies>
 </project>

http://git-wip-us.apache.org/repos/asf/isis/blob/07fb0e6e/core/integtestsupport/pom.xml
----------------------------------------------------------------------
diff --git a/core/integtestsupport/pom.xml b/core/integtestsupport/pom.xml
index 11e76f7..775e38e 100644
--- a/core/integtestsupport/pom.xml
+++ b/core/integtestsupport/pom.xml
@@ -93,11 +93,6 @@
         </dependency>
 
         <dependency>
-            <groupId>org.jmock</groupId>
-            <artifactId>jmock-legacy</artifactId>
-        </dependency>
-
-        <dependency>
             <groupId>org.apache.isis.core</groupId>
             <artifactId>isis-core-tck-dom</artifactId>
         </dependency>

http://git-wip-us.apache.org/repos/asf/isis/blob/07fb0e6e/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/ImperativeFacetUtilsTest.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/ImperativeFacetUtilsTest.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/ImperativeFacetUtilsTest.java
index 821e067..23238d9 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/ImperativeFacetUtilsTest.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/ImperativeFacetUtilsTest.java
@@ -19,28 +19,23 @@
 
 package org.apache.isis.core.metamodel.facets;
 
-import static org.hamcrest.CoreMatchers.is;
-import static org.hamcrest.CoreMatchers.not;
-import static org.hamcrest.CoreMatchers.nullValue;
-import static org.junit.Assert.assertThat;
-
 import java.lang.reflect.Method;
-
 import com.google.common.collect.Lists;
-
 import org.jmock.Expectations;
 import org.jmock.Mockery;
 import org.jmock.integration.junit4.JMock;
 import org.jmock.integration.junit4.JUnit4Mockery;
-import org.jmock.lib.legacy.ClassImposteriser;
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
-
 import org.apache.isis.applib.filter.Filter;
 import org.apache.isis.core.metamodel.facetapi.Facet;
 import org.apache.isis.core.metamodel.facets.ImperativeFacetUtils.ImperativeFacetFlags;
 import org.apache.isis.core.metamodel.spec.feature.ObjectMember;
+import org.apache.isis.core.unittestsupport.jmocking.JavassistImposteriser;
+
+import static org.hamcrest.CoreMatchers.*;
+import static org.junit.Assert.assertThat;
 
 @RunWith(JMock.class)
 public class ImperativeFacetUtilsTest {
@@ -61,7 +56,7 @@ public class ImperativeFacetUtilsTest {
 
     private final Mockery context = new JUnit4Mockery() {
         {
-            setImposteriser(ClassImposteriser.INSTANCE);
+            setImposteriser(JavassistImposteriser.INSTANCE);
         }
     };
 

http://git-wip-us.apache.org/repos/asf/isis/blob/07fb0e6e/core/metamodel/src/test/java/org/apache/isis/core/metamodel/services/ServicesInjectorDefaultTest.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/services/ServicesInjectorDefaultTest.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/services/ServicesInjectorDefaultTest.java
index e3e2bcc..01a305f 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/services/ServicesInjectorDefaultTest.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/services/ServicesInjectorDefaultTest.java
@@ -48,19 +48,19 @@ public class ServicesInjectorDefaultTest {
     
     private ServicesInjectorSpi injector;
 
-    static interface Service1 {
+    public static interface Service1 {
     }
 
-    static interface Service2 {
+    public static interface Service2 {
     }
 
-    static interface Mixin {
+    public static interface Mixin {
     }
 
-    static interface DomainObjectContainerExtended extends DomainObjectContainer, Mixin {
+    public static interface DomainObjectContainerExtended extends DomainObjectContainer, Mixin {
     }
 
-    static interface SomeDomainObject {
+    public static interface SomeDomainObject {
         public void setContainer(DomainObjectContainer container);
         public void setMixin(Mixin mixin);
         public void setService1(Service1 service);

http://git-wip-us.apache.org/repos/asf/isis/blob/07fb0e6e/core/metamodel/src/test/java/org/apache/isis/core/progmodel/facets/propparam/specification/MustSatisfySpecificationFacetFactoryProcessParameterTest.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/progmodel/facets/propparam/specification/MustSatisfySpecificationFacetFactoryProcessParameterTest.java b/core/metamodel/src/test/java/org/apache/isis/core/progmodel/facets/propparam/specification/MustSatisfySpecificationFacetFactoryProcessParameterTest.java
index 70a16cc..eab8435 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/progmodel/facets/propparam/specification/MustSatisfySpecificationFacetFactoryProcessParameterTest.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/progmodel/facets/propparam/specification/MustSatisfySpecificationFacetFactoryProcessParameterTest.java
@@ -19,30 +19,28 @@
 
 package org.apache.isis.core.progmodel.facets.propparam.specification;
 
-import static org.apache.isis.core.commons.matchers.IsisMatchers.anInstanceOf;
-
 import java.lang.reflect.Method;
-
 import org.jmock.Expectations;
 import org.jmock.Mockery;
 import org.jmock.integration.junit4.JMock;
 import org.jmock.integration.junit4.JUnit4Mockery;
-import org.jmock.lib.legacy.ClassImposteriser;
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
-
 import org.apache.isis.core.metamodel.facets.FacetFactory.ProcessParameterContext;
 import org.apache.isis.core.metamodel.facets.FacetedMethodParameter;
 import org.apache.isis.core.progmodel.facets.param.validate.perspec.MustSatisfySpecificationOnParameterFacet;
 import org.apache.isis.core.progmodel.facets.param.validate.perspec.MustSatisfySpecificationOnParameterFacetFactory;
+import org.apache.isis.core.unittestsupport.jmocking.JavassistImposteriser;
+
+import static org.apache.isis.core.commons.matchers.IsisMatchers.anInstanceOf;
 
 @RunWith(JMock.class)
 public class MustSatisfySpecificationFacetFactoryProcessParameterTest {
 
     private final Mockery mockery = new JUnit4Mockery() {
         {
-            setImposteriser(ClassImposteriser.INSTANCE);
+            setImposteriser(JavassistImposteriser.INSTANCE);
         }
     };
 

http://git-wip-us.apache.org/repos/asf/isis/blob/07fb0e6e/core/metamodel/src/test/java/org/apache/isis/core/progmodel/facets/propparam/specification/MustSatisfySpecificationFacetFactoryProcessPropertyTest.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/progmodel/facets/propparam/specification/MustSatisfySpecificationFacetFactoryProcessPropertyTest.java b/core/metamodel/src/test/java/org/apache/isis/core/progmodel/facets/propparam/specification/MustSatisfySpecificationFacetFactoryProcessPropertyTest.java
index 308ef93..b273a14 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/progmodel/facets/propparam/specification/MustSatisfySpecificationFacetFactoryProcessPropertyTest.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/progmodel/facets/propparam/specification/MustSatisfySpecificationFacetFactoryProcessPropertyTest.java
@@ -19,34 +19,25 @@
 
 package org.apache.isis.core.progmodel.facets.propparam.specification;
 
-import static org.apache.isis.core.commons.matchers.IsisMatchers.anInstanceOf;
-
 import java.lang.reflect.Method;
-
 import org.jmock.Expectations;
-import org.jmock.Mockery;
-import org.jmock.integration.junit4.JMock;
-import org.jmock.integration.junit4.JUnit4Mockery;
-import org.jmock.lib.legacy.ClassImposteriser;
 import org.junit.After;
 import org.junit.Before;
+import org.junit.Rule;
 import org.junit.Test;
-import org.junit.runner.RunWith;
-
 import org.apache.isis.core.metamodel.facetapi.MethodRemover;
 import org.apache.isis.core.metamodel.facets.FacetFactory.ProcessMethodContext;
 import org.apache.isis.core.metamodel.facets.FacetedMethod;
 import org.apache.isis.core.progmodel.facets.properties.validate.perspec.MustSatisfySpecificationOnPropertyFacet;
 import org.apache.isis.core.progmodel.facets.properties.validate.perspec.MustSatisfySpecificationOnPropertyFacetFactory;
+import org.apache.isis.core.unittestsupport.jmocking.JUnitRuleMockery2;
+
+import static org.apache.isis.core.commons.matchers.IsisMatchers.anInstanceOf;
 
-@RunWith(JMock.class)
 public class MustSatisfySpecificationFacetFactoryProcessPropertyTest {
 
-    private final Mockery mockery = new JUnit4Mockery() {
-        {
-            setImposteriser(ClassImposteriser.INSTANCE);
-        }
-    };
+    @Rule
+    public JUnitRuleMockery2 mockery = JUnitRuleMockery2.createFor(JUnitRuleMockery2.Mode.INTERFACES_AND_CLASSES);
 
     private MethodRemover mockMethodRemover;
     private FacetedMethod mockFacetHolder;

http://git-wip-us.apache.org/repos/asf/isis/blob/07fb0e6e/core/metamodel/src/test/java/org/apache/isis/core/progmodel/facets/propparam/specification/MustSatisfySpecificationValidatingInteractionMoreTest.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/progmodel/facets/propparam/specification/MustSatisfySpecificationValidatingInteractionMoreTest.java b/core/metamodel/src/test/java/org/apache/isis/core/progmodel/facets/propparam/specification/MustSatisfySpecificationValidatingInteractionMoreTest.java
index 13388ff..ba7bc3e 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/progmodel/facets/propparam/specification/MustSatisfySpecificationValidatingInteractionMoreTest.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/progmodel/facets/propparam/specification/MustSatisfySpecificationValidatingInteractionMoreTest.java
@@ -19,35 +19,25 @@
 
 package org.apache.isis.core.progmodel.facets.propparam.specification;
 
-import static org.hamcrest.CoreMatchers.is;
-import static org.hamcrest.CoreMatchers.not;
-import static org.hamcrest.CoreMatchers.nullValue;
-import static org.junit.Assert.assertThat;
-
 import org.jmock.Expectations;
-import org.jmock.Mockery;
-import org.jmock.integration.junit4.JMock;
-import org.jmock.integration.junit4.JUnit4Mockery;
-import org.jmock.lib.legacy.ClassImposteriser;
 import org.junit.After;
 import org.junit.Before;
+import org.junit.Rule;
 import org.junit.Test;
-import org.junit.runner.RunWith;
-
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 import org.apache.isis.core.metamodel.facetapi.IdentifiedHolder;
 import org.apache.isis.core.metamodel.interactions.PropertyModifyContext;
 import org.apache.isis.core.progmodel.facets.object.validperspec.MustSatisfySpecificationOnTypeFacet;
+import org.apache.isis.core.unittestsupport.jmocking.JUnitRuleMockery2;
+
+import static org.hamcrest.CoreMatchers.*;
+import static org.junit.Assert.assertThat;
 
-@RunWith(JMock.class)
 public class MustSatisfySpecificationValidatingInteractionMoreTest {
 
-    private final Mockery mockery = new JUnit4Mockery() {
-        {
-            setImposteriser(ClassImposteriser.INSTANCE);
-        }
-    };
+    @Rule
+    public JUnitRuleMockery2 mockery = JUnitRuleMockery2.createFor(JUnitRuleMockery2.Mode.INTERFACES_AND_CLASSES);
 
     private MustSatisfySpecificationOnTypeFacet facetForSpecificationFirstLetterUpperCase;
     private FacetHolder mockHolder;

http://git-wip-us.apache.org/repos/asf/isis/blob/07fb0e6e/core/metamodel/src/test/java/org/apache/isis/core/progmodel/facets/propparam/specification/MustSatisfySpecificationValidatingInteractionTest.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/progmodel/facets/propparam/specification/MustSatisfySpecificationValidatingInteractionTest.java b/core/metamodel/src/test/java/org/apache/isis/core/progmodel/facets/propparam/specification/MustSatisfySpecificationValidatingInteractionTest.java
index b9d9193..c9e7fd1 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/progmodel/facets/propparam/specification/MustSatisfySpecificationValidatingInteractionTest.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/progmodel/facets/propparam/specification/MustSatisfySpecificationValidatingInteractionTest.java
@@ -19,35 +19,25 @@
 
 package org.apache.isis.core.progmodel.facets.propparam.specification;
 
-import static org.hamcrest.CoreMatchers.is;
-import static org.hamcrest.CoreMatchers.not;
-import static org.hamcrest.CoreMatchers.nullValue;
-import static org.junit.Assert.assertThat;
-
 import org.jmock.Expectations;
-import org.jmock.Mockery;
-import org.jmock.integration.junit4.JMock;
-import org.jmock.integration.junit4.JUnit4Mockery;
-import org.jmock.lib.legacy.ClassImposteriser;
 import org.junit.After;
 import org.junit.Before;
+import org.junit.Rule;
 import org.junit.Test;
-import org.junit.runner.RunWith;
-
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 import org.apache.isis.core.metamodel.facetapi.IdentifiedHolder;
 import org.apache.isis.core.metamodel.interactions.PropertyModifyContext;
 import org.apache.isis.core.progmodel.facets.object.validperspec.MustSatisfySpecificationOnTypeFacet;
+import org.apache.isis.core.unittestsupport.jmocking.JUnitRuleMockery2;
+
+import static org.hamcrest.CoreMatchers.*;
+import static org.junit.Assert.assertThat;
 
-@RunWith(JMock.class)
 public class MustSatisfySpecificationValidatingInteractionTest {
 
-    private final Mockery mockery = new JUnit4Mockery() {
-        {
-            setImposteriser(ClassImposteriser.INSTANCE);
-        }
-    };
+    @Rule
+    public JUnitRuleMockery2 mockery = JUnitRuleMockery2.createFor(JUnitRuleMockery2.Mode.INTERFACES_AND_CLASSES);
 
     private MustSatisfySpecificationOnTypeFacet facetForSpecificationAlwaysSatisfied;
     private MustSatisfySpecificationOnTypeFacet facetForSpecificationNeverSatisfied;

http://git-wip-us.apache.org/repos/asf/isis/blob/07fb0e6e/core/objectstore-inmemory/src/test/java/org/apache/isis/core/objectstore/internal/ObjectStorePersistedObjectsDefault_savesOidGeneratorAsMemento.java
----------------------------------------------------------------------
diff --git a/core/objectstore-inmemory/src/test/java/org/apache/isis/core/objectstore/internal/ObjectStorePersistedObjectsDefault_savesOidGeneratorAsMemento.java b/core/objectstore-inmemory/src/test/java/org/apache/isis/core/objectstore/internal/ObjectStorePersistedObjectsDefault_savesOidGeneratorAsMemento.java
index 671af11..e41d2f8 100644
--- a/core/objectstore-inmemory/src/test/java/org/apache/isis/core/objectstore/internal/ObjectStorePersistedObjectsDefault_savesOidGeneratorAsMemento.java
+++ b/core/objectstore-inmemory/src/test/java/org/apache/isis/core/objectstore/internal/ObjectStorePersistedObjectsDefault_savesOidGeneratorAsMemento.java
@@ -19,27 +19,22 @@
 
 package org.apache.isis.core.objectstore.internal;
 
-import static org.hamcrest.Matchers.is;
-import static org.hamcrest.Matchers.nullValue;
-import static org.junit.Assert.assertThat;
-
-import org.jmock.Mockery;
-import org.jmock.integration.junit4.JUnit4Mockery;
-import org.jmock.lib.legacy.ClassImposteriser;
 import org.junit.Before;
+import org.junit.Rule;
 import org.junit.Test;
-
 import org.apache.isis.core.runtime.system.persistence.IdentifierGeneratorDefault;
+import org.apache.isis.core.unittestsupport.jmocking.JUnitRuleMockery2;
+
+import static org.hamcrest.Matchers.is;
+import static org.hamcrest.Matchers.nullValue;
+import static org.junit.Assert.assertThat;
 
 public class ObjectStorePersistedObjectsDefault_savesOidGeneratorAsMemento {
 
     private ObjectStorePersistedObjectsDefault persistedObjects;
 
-    private final Mockery context = new JUnit4Mockery() {
-        {
-            setImposteriser(ClassImposteriser.INSTANCE);
-        }
-    };
+    @Rule
+    public JUnitRuleMockery2 context = JUnitRuleMockery2.createFor(JUnitRuleMockery2.Mode.INTERFACES_AND_CLASSES);
 
     private IdentifierGeneratorDefault.Memento mockMemento;
 

http://git-wip-us.apache.org/repos/asf/isis/blob/07fb0e6e/core/pom.xml
----------------------------------------------------------------------
diff --git a/core/pom.xml b/core/pom.xml
index bff65cf..3129f99 100644
--- a/core/pom.xml
+++ b/core/pom.xml
@@ -1305,23 +1305,6 @@ ${license.additional-notes}
                 </exclusions>
             </dependency>
 
-            <!-- transitively includes cglib:cglib-nodep:2.1_3 and org.objenesis:objenesis:1.0 -->
-            <dependency>
-                <groupId>org.jmock</groupId>
-                <artifactId>jmock-legacy</artifactId>
-                <version>2.6.0</version>
-                <exclusions>
-                	<exclusion>
-                		<groupId>cglib</groupId>
-                		<artifactId>cglib-nodep</artifactId>
-                	</exclusion>
-                	<exclusion>
-                		<groupId>org.objenesis</groupId>
-                		<artifactId>objenesis</artifactId>
-                	</exclusion>
-                </exclusions>
-            </dependency>
-
             <!-- BDD testing -->
             <dependency>
                 <groupId>info.cukes</groupId>
@@ -1431,11 +1414,6 @@ ${license.additional-notes}
             <scope>test</scope>
         </dependency>
         <dependency>
-            <groupId>org.jmock</groupId>
-            <artifactId>jmock-legacy</artifactId>
-            <scope>test</scope>
-        </dependency>
-        <dependency>
             <groupId>cglib</groupId>
             <artifactId>cglib-nodep</artifactId>
             <scope>test</scope>

http://git-wip-us.apache.org/repos/asf/isis/blob/07fb0e6e/core/runtime/pom.xml
----------------------------------------------------------------------
diff --git a/core/runtime/pom.xml b/core/runtime/pom.xml
index d35a515..a5340f8 100644
--- a/core/runtime/pom.xml
+++ b/core/runtime/pom.xml
@@ -119,12 +119,6 @@
             <scope>test</scope>
         </dependency>
 
-		<dependency>
-			<groupId>org.jmock</groupId>
-			<artifactId>jmock-legacy</artifactId>
-			<scope>test</scope>
-		</dependency>
-
         <dependency>
             <groupId>org.javassist</groupId>
             <artifactId>javassist</artifactId>

http://git-wip-us.apache.org/repos/asf/isis/blob/07fb0e6e/core/specsupport/pom.xml
----------------------------------------------------------------------
diff --git a/core/specsupport/pom.xml b/core/specsupport/pom.xml
index 90f5369..78e46fb 100644
--- a/core/specsupport/pom.xml
+++ b/core/specsupport/pom.xml
@@ -57,7 +57,6 @@
         <dependency>
             <groupId>org.apache.isis.core</groupId>
             <artifactId>isis-core-unittestsupport</artifactId>
-            <scope>test</scope>
         </dependency>
 
         <dependency>
@@ -77,10 +76,6 @@
            <groupId>org.jmock</groupId>
            <artifactId>jmock</artifactId>
         </dependency>
-        <dependency>
-           <groupId>org.jmock</groupId>
-           <artifactId>jmock-legacy</artifactId>
-        </dependency>
 
         <dependency>
             <groupId>info.cukes</groupId>

http://git-wip-us.apache.org/repos/asf/isis/blob/07fb0e6e/core/specsupport/src/main/java/org/apache/isis/core/specsupport/scenarios/DomainServiceProviderMockery.java
----------------------------------------------------------------------
diff --git a/core/specsupport/src/main/java/org/apache/isis/core/specsupport/scenarios/DomainServiceProviderMockery.java b/core/specsupport/src/main/java/org/apache/isis/core/specsupport/scenarios/DomainServiceProviderMockery.java
index 5b639c9..860cfa9 100644
--- a/core/specsupport/src/main/java/org/apache/isis/core/specsupport/scenarios/DomainServiceProviderMockery.java
+++ b/core/specsupport/src/main/java/org/apache/isis/core/specsupport/scenarios/DomainServiceProviderMockery.java
@@ -17,17 +17,14 @@
 package org.apache.isis.core.specsupport.scenarios;
 
 import java.util.Map;
-
 import com.google.common.collect.Maps;
-
 import org.hamcrest.Description;
 import org.jmock.Expectations;
 import org.jmock.Mockery;
 import org.jmock.api.Action;
 import org.jmock.api.Invocation;
-import org.jmock.lib.legacy.ClassImposteriser;
-
 import org.apache.isis.applib.DomainObjectContainer;
+import org.apache.isis.core.unittestsupport.jmocking.JavassistImposteriser;
 
 class DomainServiceProviderMockery implements DomainServiceProvider {
 
@@ -44,7 +41,7 @@ class DomainServiceProviderMockery implements DomainServiceProvider {
 
     private void init() {
         context = new Mockery() {{
-            setImposteriser(ClassImposteriser.INSTANCE);
+            setImposteriser(JavassistImposteriser.INSTANCE);
         }};
         mocks.clear();
     }

http://git-wip-us.apache.org/repos/asf/isis/blob/07fb0e6e/core/unittestsupport/pom.xml
----------------------------------------------------------------------
diff --git a/core/unittestsupport/pom.xml b/core/unittestsupport/pom.xml
index 462fe06..fe0fc1c 100644
--- a/core/unittestsupport/pom.xml
+++ b/core/unittestsupport/pom.xml
@@ -87,11 +87,6 @@
                <artifactId>jmock-junit4</artifactId>
            </dependency>
 
-           <dependency>
-               <groupId>org.jmock</groupId>
-               <artifactId>jmock-legacy</artifactId>
-           </dependency>
-
             <dependency>
                 <groupId>javax.jdo</groupId>
                 <artifactId>jdo-api</artifactId>
@@ -100,6 +95,18 @@
             </dependency>
 
             <dependency>
+                <groupId>org.javassist</groupId>
+                <artifactId>javassist</artifactId>
+                <!--<version>3.18.1-GA</version>-->
+            </dependency>
+
+            <dependency>
+                <groupId>org.objenesis</groupId>
+                <artifactId>objenesis</artifactId>
+                <!--<version>1.4</version>-->
+            </dependency>
+
+        <dependency>
                 <groupId>org.reflections</groupId>
                 <artifactId>reflections</artifactId>
                 <exclusions>

http://git-wip-us.apache.org/repos/asf/isis/blob/07fb0e6e/core/unittestsupport/src/main/java/org/apache/isis/core/unittestsupport/files/Files.java
----------------------------------------------------------------------
diff --git a/core/unittestsupport/src/main/java/org/apache/isis/core/unittestsupport/files/Files.java b/core/unittestsupport/src/main/java/org/apache/isis/core/unittestsupport/files/Files.java
index c03347b..c397ab2 100644
--- a/core/unittestsupport/src/main/java/org/apache/isis/core/unittestsupport/files/Files.java
+++ b/core/unittestsupport/src/main/java/org/apache/isis/core/unittestsupport/files/Files.java
@@ -70,7 +70,7 @@ public final class Files {
     }
 
     // introduced for testing of this utility class.
-    interface Deleter {
+    public interface Deleter {
         void deleteFile(File f);
     }
 

http://git-wip-us.apache.org/repos/asf/isis/blob/07fb0e6e/core/unittestsupport/src/main/java/org/apache/isis/core/unittestsupport/jmocking/IsisActions.java
----------------------------------------------------------------------
diff --git a/core/unittestsupport/src/main/java/org/apache/isis/core/unittestsupport/jmocking/IsisActions.java b/core/unittestsupport/src/main/java/org/apache/isis/core/unittestsupport/jmocking/IsisActions.java
index 99afeb9..26cec06 100644
--- a/core/unittestsupport/src/main/java/org/apache/isis/core/unittestsupport/jmocking/IsisActions.java
+++ b/core/unittestsupport/src/main/java/org/apache/isis/core/unittestsupport/jmocking/IsisActions.java
@@ -23,7 +23,7 @@ import org.jmock.api.Action;
 import org.jmock.api.Invocation;
 
 public final class IsisActions {
-    
+
     private IsisActions() {
     }
     

http://git-wip-us.apache.org/repos/asf/isis/blob/07fb0e6e/core/unittestsupport/src/main/java/org/apache/isis/core/unittestsupport/jmocking/JUnitRuleMockery2.java
----------------------------------------------------------------------
diff --git a/core/unittestsupport/src/main/java/org/apache/isis/core/unittestsupport/jmocking/JUnitRuleMockery2.java b/core/unittestsupport/src/main/java/org/apache/isis/core/unittestsupport/jmocking/JUnitRuleMockery2.java
index f4ac728..7cb2e90 100644
--- a/core/unittestsupport/src/main/java/org/apache/isis/core/unittestsupport/jmocking/JUnitRuleMockery2.java
+++ b/core/unittestsupport/src/main/java/org/apache/isis/core/unittestsupport/jmocking/JUnitRuleMockery2.java
@@ -18,31 +18,28 @@
  */
 package org.apache.isis.core.unittestsupport.jmocking;
 
-import static java.lang.annotation.ElementType.FIELD;
-import static java.lang.annotation.RetentionPolicy.RUNTIME;
-import static org.junit.Assert.fail;
+import junit.framework.AssertionFailedError;
 
 import java.lang.annotation.Retention;
 import java.lang.annotation.Target;
 import java.lang.reflect.Constructor;
 import java.lang.reflect.Field;
 import java.util.List;
-
-import junit.framework.AssertionFailedError;
-
 import org.jmock.Expectations;
 import org.jmock.auto.Mock;
 import org.jmock.integration.junit4.JUnit4Mockery;
 import org.jmock.internal.AllDeclaredFields;
 import org.jmock.lib.concurrent.Synchroniser;
-import org.jmock.lib.legacy.ClassImposteriser;
 import org.junit.rules.MethodRule;
 import org.junit.runners.model.FrameworkMethod;
 import org.junit.runners.model.Statement;
-import org.picocontainer.DefaultPicoContainer;
 import org.picocontainer.MutablePicoContainer;
 import org.picocontainer.PicoBuilder;
 
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+import static org.junit.Assert.fail;
+
 
 /**
  * Use as a <tt>@Rule</tt>, meaning that the <tt>@RunWith(JMock.class)</tt> can
@@ -70,7 +67,7 @@ public class JUnitRuleMockery2 extends JUnit4Mockery implements MethodRule {
     public static JUnitRuleMockery2 createFor(final Mode mode) {
         final JUnitRuleMockery2 jUnitRuleMockery2 = new JUnitRuleMockery2();
         if (mode == Mode.INTERFACES_AND_CLASSES) {
-            jUnitRuleMockery2.setImposteriser(ClassImposteriser.INSTANCE);
+            jUnitRuleMockery2.setImposteriser(JavassistImposteriser.INSTANCE);
         }
         jUnitRuleMockery2.setThreadingPolicy(new Synchroniser());
         return jUnitRuleMockery2;

http://git-wip-us.apache.org/repos/asf/isis/blob/07fb0e6e/core/unittestsupport/src/main/java/org/apache/isis/core/unittestsupport/jmocking/JavassistImposteriser.java
----------------------------------------------------------------------
diff --git a/core/unittestsupport/src/main/java/org/apache/isis/core/unittestsupport/jmocking/JavassistImposteriser.java b/core/unittestsupport/src/main/java/org/apache/isis/core/unittestsupport/jmocking/JavassistImposteriser.java
new file mode 100644
index 0000000..0fc9332
--- /dev/null
+++ b/core/unittestsupport/src/main/java/org/apache/isis/core/unittestsupport/jmocking/JavassistImposteriser.java
@@ -0,0 +1,208 @@
+/**
+ *  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.core.unittestsupport.jmocking;
+
+import javassist.util.proxy.MethodFilter;
+import javassist.util.proxy.MethodHandler;
+import javassist.util.proxy.ProxyFactory;
+import javassist.util.proxy.ProxyObject;
+
+import java.lang.reflect.Constructor;
+import java.lang.reflect.Method;
+import java.lang.reflect.Modifier;
+import org.jmock.api.Imposteriser;
+import org.jmock.api.Invocation;
+import org.jmock.api.Invokable;
+import org.jmock.lib.JavaReflectionImposteriser;
+import org.objenesis.Objenesis;
+import org.objenesis.ObjenesisStd;
+
+public class JavassistImposteriser implements Imposteriser {
+
+    public static final Imposteriser INSTANCE = new JavassistImposteriser();
+
+    private final Imposteriser reflectionImposteriser = new JavaReflectionImposteriser();
+    private final Objenesis objenesis = new ObjenesisStd();
+
+    private JavassistImposteriser() {
+    }
+
+
+    public boolean canImposterise(Class<?> mockedType) {
+
+        if(mockedType.isInterface()) {
+            return reflectionImposteriser.canImposterise(mockedType);
+        }
+
+        return !mockedType.isPrimitive() &&
+               !Modifier.isFinal(mockedType.getModifiers()) &&
+               !toStringMethodIsFinal(mockedType);
+    }
+    
+    public <T> T imposterise(final Invokable mockObject, final Class<T> mockedType, Class<?>... ancilliaryTypes) {
+        if (!canImposterise(mockedType)) {
+            throw new IllegalArgumentException(mockedType.getName() + " cannot be imposterized (either a primitive, or a final type or has final toString method)");
+        }
+
+        if(mockedType.isInterface()) {
+            return reflectionImposteriser.imposterise(mockObject, mockedType, ancilliaryTypes);
+        }
+
+        try {
+            setConstructorsAccessible(mockedType, true);
+
+            final Class<?> proxyClass = proxyClass(mockedType, ancilliaryTypes);
+            final Object proxy = proxy(proxyClass, mockObject);
+            return mockedType.cast(proxy);
+        } finally {
+            setConstructorsAccessible(mockedType, false);
+        }
+    }
+
+    // //////////////////////////////////////
+
+    private static boolean toStringMethodIsFinal(Class<?> type) {
+        try {
+            Method toString = type.getMethod("toString");
+            return Modifier.isFinal(toString.getModifiers());
+            
+        }
+        catch (SecurityException e) {
+            throw new IllegalStateException("not allowed to reflect on toString method", e);
+        }
+        catch (NoSuchMethodException e) {
+            throw new Error("no public toString method found", e);
+        }
+    }
+
+    private static void setConstructorsAccessible(Class<?> mockedType, boolean accessible) {
+        for (Constructor<?> constructor : mockedType.getDeclaredConstructors()) {
+            constructor.setAccessible(accessible);
+        }
+    }
+
+    private Class<?> proxyClass(Class<?> mockedType, Class<?>... ancilliaryTypes) {
+
+        final ProxyFactory proxyFactory;
+        proxyFactory = new ProxyFactory();
+        proxyFactory.setFilter(new MethodFilter() {
+            @Override
+            public boolean isHandled(final Method m) {
+                // ignore finalize() and als bridge methods
+                return !m.getName().equals("finalize") || m.isBridge();
+            }
+        });
+
+        if(mockedType.isInterface()) {
+            proxyFactory.setSuperclass(Object.class);
+            proxyFactory.setInterfaces(prepend(mockedType, ancilliaryTypes));
+        } else {
+            proxyFactory.setSuperclass(mockedType);
+            proxyFactory.setInterfaces(ancilliaryTypes);
+        }
+
+        return proxyFactory.createClass();
+
+        // original cglib code:
+
+    //        final Enhancer enhancer = new Enhancer() {
+    //            @Override
+    //            @SuppressWarnings("unchecked")
+    //            protected void filterConstructors(Class sc, List constructors) {
+    //                // Don't filter
+    //            }
+    //        };
+    //        enhancer.setClassLoader(SearchingClassLoader.combineLoadersOf(mockedType, ancilliaryTypes));
+    //        enhancer.setUseFactory(true);
+    //        if (mockedType.isInterface()) {
+    //            enhancer.setSuperclass(Object.class);
+    //            enhancer.setInterfaces(prepend(mockedType, ancilliaryTypes));
+    //        }
+    //        else {
+    //            enhancer.setSuperclass(mockedType);
+    //            enhancer.setInterfaces(ancilliaryTypes);
+    //        }
+    //        enhancer.setCallbackTypes(new Class[]{InvocationHandler.class, NoOp.class});
+    //        enhancer.setCallbackFilter(IGNORE_BRIDGE_METHODS);
+    //        if (mockedType.getSigners() != null) {
+    //            enhancer.setNamingPolicy(NAMING_POLICY_THAT_ALLOWS_IMPOSTERISATION_OF_CLASSES_IN_SIGNED_PACKAGES);
+    //        }
+    //
+    //        try {
+    //            return enhancer.createClass();
+    //        }
+    //        catch (CodeGenerationException e) {
+    //            // Note: I've only been able to manually test this.  It exists to help people writing
+    //            //       Eclipse plug-ins or using other environments that have sophisticated class loader
+    //            //       structures.
+    //            throw new IllegalArgumentException("could not imposterise " + mockedType, e);
+    //        }
+
+    }
+
+
+    // original cglib code:
+
+    //    private static final NamingPolicy NAMING_POLICY_THAT_ALLOWS_IMPOSTERISATION_OF_CLASSES_IN_SIGNED_PACKAGES = new DefaultNamingPolicy() {
+    //        @Override
+    //        public String getClassName(String prefix, String source, Object key, Predicate names) {
+    //            return "org.jmock.codegen." + super.getClassName(prefix, source, key, names);
+    //        }
+    //    };
+    //
+    //    private static final CallbackFilter IGNORE_BRIDGE_METHODS = new CallbackFilter() {
+    //        public int accept(Method method) {
+    //            return method.isBridge() ? 1 : 0;
+    //        }
+    //    };
+
+
+    private Object proxy(Class<?> proxyClass, final Invokable mockObject) {
+
+        final ProxyObject proxyObject = (ProxyObject) objenesis.newInstance(proxyClass);
+        proxyObject.setHandler(new MethodHandler() {
+            @Override
+            public Object invoke(Object self, Method thisMethod, Method proceed, Object[] args) throws Throwable {
+                return mockObject.invoke(new Invocation(self, thisMethod, args));
+            }
+        });
+
+        return proxyObject;
+
+        // original cglib code:
+
+        //        final Factory proxy = (Factory)objenesis.newInstance(proxyClass);
+        //        proxy.setCallbacks(new Callback[] {
+        //            new InvocationHandler() {
+        //                public Object invoke(Object receiver, Method method, Object[] args) throws Throwable {
+        //                    return mockObject.invoke(new Invocation(receiver, method, args));
+        //                }
+        //            },
+        //            NoOp.INSTANCE
+        //        });
+        //        return proxy;
+    }
+
+    private Class<?>[] prepend(Class<?> first, Class<?>... rest) {
+        Class<?>[] all = new Class<?>[rest.length+1];
+        all[0] = first;
+        System.arraycopy(rest, 0, all, 1, rest.length);
+        return all;
+    }
+    
+    //public static class ClassWithSuperclassToWorkAroundCglibBug {}
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/07fb0e6e/core/unittestsupport/src/test/java/org/apache/isis/core/unittestsupport/jmocking/JavassistImposteriserTest.java
----------------------------------------------------------------------
diff --git a/core/unittestsupport/src/test/java/org/apache/isis/core/unittestsupport/jmocking/JavassistImposteriserTest.java b/core/unittestsupport/src/test/java/org/apache/isis/core/unittestsupport/jmocking/JavassistImposteriserTest.java
new file mode 100644
index 0000000..ce6480e
--- /dev/null
+++ b/core/unittestsupport/src/test/java/org/apache/isis/core/unittestsupport/jmocking/JavassistImposteriserTest.java
@@ -0,0 +1,299 @@
+package org.apache.isis.core.unittestsupport.jmocking;
+
+import java.io.File;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+import java.net.URL;
+import java.net.URLClassLoader;
+import java.util.Date;
+import org.jmock.api.Imposteriser;
+import org.jmock.api.Invocation;
+import org.jmock.api.Invokable;
+import org.jmock.lib.action.VoidAction;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+
+import static org.junit.Assert.*;
+
+public class JavassistImposteriserTest {
+
+    private Imposteriser imposteriser = JavassistImposteriser.INSTANCE;
+
+    private Invokable invokable;
+    private Invocation invocation;
+
+
+    @Before
+    public void setUp() throws Exception {
+        invokable = new Invokable() {
+            @Override
+            public Object invoke(Invocation invocation) throws Throwable {
+                JavassistImposteriserTest.this.invocation = invocation;
+                return "result";
+            }
+        };
+    }
+
+    @After
+    public void tearDown() throws Exception {
+        invokable = null;
+        invocation = null;
+    }
+
+
+    // //////////////////////////////////////
+
+
+    @Test
+    public void happyCaseWhenJdkInterface() {
+        assertTrue(imposteriser.canImposterise(Runnable.class));
+        final Runnable imposter = imposteriser.imposterise(invokable, Runnable.class);
+        assertNotNull(imposter);
+        imposter.run();
+    }
+
+    @Test
+    public void happyCaseWhenJdkClass() {
+        assertTrue(imposteriser.canImposterise(Date.class));
+        final Date imposter = imposteriser.imposterise(invokable, Date.class);
+        assertNotNull(imposter);
+        imposter.toString();
+    }
+
+
+    // //////////////////////////////////////
+
+    @Test
+    public void cannotImposterisePrimitiveType() {
+        assertFalse(imposteriser.canImposterise(int.class));
+    }
+
+    @Test
+    public void cannotImposteriseVoidType() {
+        assertFalse(imposteriser.canImposterise(void.class));
+    }
+
+
+    // //////////////////////////////////////
+
+
+    public static abstract class AnAbstractNestedClass {
+        @SuppressWarnings("UnusedDeclaration")
+        public abstract String foo();
+    }
+
+    @Test
+    public void happyCaseWhenAbstractClass() {
+        assertTrue(imposteriser.canImposterise(AnAbstractNestedClass.class));
+        final AnAbstractNestedClass imposter = imposteriser.imposterise(invokable, AnAbstractNestedClass.class);
+        assertNotNull(imposter);
+        assertEquals("result", imposter.foo());
+    }
+
+
+    // //////////////////////////////////////
+
+
+
+    public static class AnInnerClass {
+        @SuppressWarnings("UnusedDeclaration")
+        public String foo() {return "original result";}
+    }
+
+    @Test
+    public void happyCaseWhenNonFinalInstantiableClass() {
+        assertTrue(imposteriser.canImposterise(AnInnerClass.class));
+        final AnInnerClass imposter = imposteriser.imposterise(invokable, AnInnerClass.class);
+        assertNotNull(imposter);
+        assertEquals("result", imposter.foo());
+    }
+
+
+
+    // //////////////////////////////////////
+
+
+    public static final class AFinalClass {
+        @SuppressWarnings("UnusedDeclaration")
+        public String foo() {return "original result";}
+    }
+
+    @Test
+    public void cannotImposteriseWhenFinalInstantiableClasses() {
+        assertFalse(imposteriser.canImposterise(AFinalClass.class));
+    }
+
+
+    // //////////////////////////////////////
+
+
+
+    public static class AClassWithAPrivateConstructor {
+        @SuppressWarnings("unused")
+        private AClassWithAPrivateConstructor(String someArgument) {}
+
+        public String foo() {return "original result";}
+    }
+
+    @Test
+    public void happyCaseWhenClassWithNonPublicConstructor() {
+        assertTrue(imposteriser.canImposterise(AClassWithAPrivateConstructor.class));
+        AClassWithAPrivateConstructor imposter =
+                imposteriser.imposterise(invokable, AClassWithAPrivateConstructor.class);
+
+        assertNotNull(imposter);
+        assertEquals("result", imposter.foo());
+    }
+
+
+    // //////////////////////////////////////
+
+
+
+    @SuppressWarnings("ClassInitializerMayBeStatic")
+    public static class ConcreteClassWithConstructorAndInstanceInitializer {
+        {
+            shouldNotBeCalled("instance initializer");
+        }
+
+        public ConcreteClassWithConstructorAndInstanceInitializer() {
+            shouldNotBeCalled("constructor");
+        }
+
+        public String foo() {
+            shouldNotBeCalled("method foo()");
+            return null; // never reached
+        }
+
+        private static void shouldNotBeCalled(String exceptionMessageIfCalled) {
+            throw new IllegalStateException(exceptionMessageIfCalled + " should not be called");
+        }
+    }
+
+    @Test
+    public void happyCaseWhenConcreteClassWithConstructorAndInitialisersThatShouldNotBeCalled() {
+        assertTrue(imposteriser.canImposterise(ConcreteClassWithConstructorAndInstanceInitializer.class));
+        ConcreteClassWithConstructorAndInstanceInitializer imposter =
+                imposteriser.imposterise(invokable, ConcreteClassWithConstructorAndInstanceInitializer.class);
+        assertNotNull(imposter);
+        assertEquals("result", imposter.foo());
+    }
+
+
+
+    // //////////////////////////////////////
+
+
+
+    public interface AnInterface {
+        String foo();
+    }
+
+    @Test
+    public void happyCaseWhenCustomInterface() {
+        assertTrue(imposteriser.canImposterise(AnInterface.class));
+        AnInterface imposter = imposteriser.imposterise(invokable, AnInterface.class);
+
+        assertNotNull(imposter);
+        assertEquals("result", imposter.foo());
+    }
+
+
+
+    // //////////////////////////////////////
+
+
+
+
+    @Test
+    public void happyCaseWhenClassInASignedJarFile() throws Exception {
+        File jarFile = new File("src/test/resources/signed.jar");
+
+        assertTrue(jarFile.exists());
+
+        URL jarURL = jarFile.toURI().toURL();
+        ClassLoader loader = new URLClassLoader(new URL[]{jarURL});
+        Class<?> typeInSignedJar = loader.loadClass("TypeInSignedJar");
+
+        assertTrue(imposteriser.canImposterise(typeInSignedJar));
+        Object o = imposteriser.imposterise(new VoidAction(), typeInSignedJar);
+
+        assertTrue(typeInSignedJar.isInstance(o));
+    }
+
+
+
+    // //////////////////////////////////////
+
+
+    public static class ClassWithFinalToStringMethod {
+        @Override
+        public final String toString() {
+            return "you can't override me!";
+        }
+    }
+
+    // See issue JMOCK-150
+    @Test
+    public void cannotImposteriseAClassWithAFinalToStringMethod() {
+        assertFalse(imposteriser.canImposterise(ClassWithFinalToStringMethod.class));
+
+        try {
+            imposteriser.imposterise(new VoidAction(), ClassWithFinalToStringMethod.class);
+            fail("should have thrown IllegalArgumentException");
+        }
+        catch (IllegalArgumentException expected) {
+
+        }
+    }
+
+
+
+
+
+    // //////////////////////////////////////
+
+
+    public interface EmptyInterface {}
+
+    public interface AnInterface2 {
+        String foo();
+    }
+
+
+    // See issue JMOCK-145
+    @Test
+    public void worksAroundBugInCglibWhenAskedToImposteriseObject() {
+        imposteriser.imposterise(new VoidAction(), Object.class);
+        imposteriser.imposterise(new VoidAction(), Object.class, EmptyInterface.class);
+        imposteriser.imposterise(new VoidAction(), Object.class, AnInterface2.class);
+    }
+
+    private static Object invokeMethod(Object object, Method method, Object... args) throws IllegalAccessException, InvocationTargetException {
+        method.setAccessible(true);
+        return method.invoke(object, args);
+    }
+
+
+
+    // //////////////////////////////////////
+
+
+
+    // See issue JMOCK-256 (Github #36)
+    @Test
+    public void doesntDelegateFinalizeMethod() throws Exception {
+        Invokable failIfInvokedAction = new Invokable() {
+            @Override
+            public Object invoke(Invocation invocation) throws Throwable {
+                fail("invocation should not have happened");
+                return null;
+            }
+        };
+
+        Object imposter = imposteriser.imposterise(failIfInvokedAction, Object.class);
+        invokeMethod(imposter, Object.class.getDeclaredMethod("finalize"));
+    }
+
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/isis/blob/07fb0e6e/mothballed/component/objectstore/sql/sql-tests-common/pom.xml
----------------------------------------------------------------------
diff --git a/mothballed/component/objectstore/sql/sql-tests-common/pom.xml b/mothballed/component/objectstore/sql/sql-tests-common/pom.xml
index 829c1e4..ddb472a 100644
--- a/mothballed/component/objectstore/sql/sql-tests-common/pom.xml
+++ b/mothballed/component/objectstore/sql/sql-tests-common/pom.xml
@@ -152,10 +152,6 @@
 		<!-- others -->
         <dependency>
             <groupId>org.jmock</groupId>
-            <artifactId>jmock-legacy</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.jmock</groupId>
             <artifactId>jmock-junit4</artifactId>
         </dependency>
         <dependency>

http://git-wip-us.apache.org/repos/asf/isis/blob/07fb0e6e/mothballed/misc/metamodel/namefile/pom.xml
----------------------------------------------------------------------
diff --git a/mothballed/misc/metamodel/namefile/pom.xml b/mothballed/misc/metamodel/namefile/pom.xml
index 481ef78..17a8f6e 100644
--- a/mothballed/misc/metamodel/namefile/pom.xml
+++ b/mothballed/misc/metamodel/namefile/pom.xml
@@ -72,11 +72,6 @@
                 </exclusion>
             </exclusions>
         </dependency>
-        <dependency>
-            <groupId>org.jmock</groupId>
-            <artifactId>jmock-legacy</artifactId>
-            <version>2.6.0</version>
-        </dependency>
 
     </dependencies>