Return-Path: X-Original-To: apmail-incubator-isis-commits-archive@minotaur.apache.org Delivered-To: apmail-incubator-isis-commits-archive@minotaur.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id 8258B7AB5 for ; Sat, 17 Dec 2011 14:15:04 +0000 (UTC) Received: (qmail 7794 invoked by uid 500); 17 Dec 2011 14:15:04 -0000 Delivered-To: apmail-incubator-isis-commits-archive@incubator.apache.org Received: (qmail 7777 invoked by uid 500); 17 Dec 2011 14:15:04 -0000 Mailing-List: contact isis-commits-help@incubator.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: isis-dev@incubator.apache.org Delivered-To: mailing list isis-commits@incubator.apache.org Received: (qmail 7770 invoked by uid 99); 17 Dec 2011 14:15:04 -0000 Received: from nike.apache.org (HELO nike.apache.org) (192.87.106.230) by apache.org (qpsmtpd/0.29) with ESMTP; Sat, 17 Dec 2011 14:15:04 +0000 X-ASF-Spam-Status: No, hits=-2000.0 required=5.0 tests=ALL_TRUSTED,T_FILL_THIS_FORM_SHORT X-Spam-Check-By: apache.org Received: from [140.211.11.4] (HELO eris.apache.org) (140.211.11.4) by apache.org (qpsmtpd/0.29) with ESMTP; Sat, 17 Dec 2011 14:14:54 +0000 Received: from eris.apache.org (localhost [127.0.0.1]) by eris.apache.org (Postfix) with ESMTP id 5DABD2388980; Sat, 17 Dec 2011 14:14:31 +0000 (UTC) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r1215492 [1/2] - in /incubator/isis/trunk/framework: core/testsupport/src/main/java/org/apache/isis/core/testsupport/jmock/ core/testsupport/src/main/java/org/apache/isis/core/testsupport/jmock/internal/ core/testsupport/src/main/java/org/j... Date: Sat, 17 Dec 2011 14:14:29 -0000 To: isis-commits@incubator.apache.org From: danhaywood@apache.org X-Mailer: svnmailer-1.0.8-patched Message-Id: <20111217141431.5DABD2388980@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org Author: danhaywood Date: Sat Dec 17 14:14:28 2011 New Revision: 1215492 URL: http://svn.apache.org/viewvc?rev=1215492&view=rev Log: ISIS-158, ISIS-107: jmock 2.6-RC2 support; also some updates to docs (for embedded runtime) Added: incubator/isis/trunk/framework/core/testsupport/src/main/java/org/apache/isis/core/testsupport/jmock/JUnitRuleMockery2.java - copied, changed from r1214077, incubator/isis/trunk/framework/core/testsupport/src/main/java/org/apache/isis/core/testsupport/jmock/ConvenienceMockery.java incubator/isis/trunk/framework/core/testsupport/src/main/java/org/apache/isis/core/testsupport/jmock/internal/ incubator/isis/trunk/framework/core/testsupport/src/main/java/org/jmock/ incubator/isis/trunk/framework/core/testsupport/src/main/java/org/jmock/auto/ incubator/isis/trunk/framework/core/testsupport/src/main/java/org/jmock/auto/Auto.java incubator/isis/trunk/framework/core/testsupport/src/main/java/org/jmock/auto/Mock.java incubator/isis/trunk/framework/core/testsupport/src/main/java/org/jmock/auto/internal/ incubator/isis/trunk/framework/core/testsupport/src/main/java/org/jmock/auto/internal/AllDeclaredFields.java incubator/isis/trunk/framework/core/testsupport/src/main/java/org/jmock/auto/internal/Mockomatic.java incubator/isis/trunk/framework/core/testsupport/src/main/java/org/jmock/integration/ incubator/isis/trunk/framework/core/testsupport/src/main/java/org/jmock/integration/junit4/ incubator/isis/trunk/framework/core/testsupport/src/main/java/org/jmock/integration/junit4/JUnitRuleMockery.java incubator/isis/trunk/framework/core/testsupport/src/test/java/org/apache/isis/core/testsupport/jmock/ incubator/isis/trunk/framework/core/testsupport/src/test/java/org/apache/isis/core/testsupport/jmock/JUnit4RuleMockery2Test.java incubator/isis/trunk/framework/runtimes/embedded/src/test/java/org/apache/isis/runtimes/embedded/IsisMetaModelTest_constructDefaults.java - copied, changed from r1214077, incubator/isis/trunk/framework/runtimes/embedded/src/test/java/org/apache/isis/runtimes/embedded/GivenMetaModelWhenInstantiated.java incubator/isis/trunk/framework/runtimes/embedded/src/test/java/org/apache/isis/runtimes/embedded/IsisMetaModelTest_constructWithServices.java - copied, changed from r1214077, incubator/isis/trunk/framework/runtimes/embedded/src/test/java/org/apache/isis/runtimes/embedded/GivenMetaModelWhenInstantiate.java incubator/isis/trunk/framework/runtimes/embedded/src/test/java/org/apache/isis/runtimes/embedded/IsisMetaModelTest_getWrapperFactory.java - copied, changed from r1214077, incubator/isis/trunk/framework/runtimes/embedded/src/test/java/org/apache/isis/runtimes/embedded/GivenMetaModelWhenInitialized.java incubator/isis/trunk/framework/runtimes/embedded/src/test/java/org/apache/isis/runtimes/embedded/IsisMetaModelTest_init.java - copied, changed from r1214077, incubator/isis/trunk/framework/runtimes/embedded/src/test/java/org/apache/isis/runtimes/embedded/GivenMetaModelWhenInitialize.java incubator/isis/trunk/framework/runtimes/embedded/src/test/java/org/apache/isis/runtimes/embedded/IsisMetaModelTest_shutdown.java - copied, changed from r1214077, incubator/isis/trunk/framework/runtimes/embedded/src/test/java/org/apache/isis/runtimes/embedded/GivenMetaModelWhenShutdown.java incubator/isis/trunk/framework/runtimes/embedded/src/test/java/org/apache/isis/runtimes/embedded/WrappedFactoryDefaultTest_wrappedObject.java - copied, changed from r1214077, incubator/isis/trunk/framework/runtimes/embedded/src/test/java/org/apache/isis/runtimes/embedded/GivenEmbeddedViewerAndPersistentDomainObject.java incubator/isis/trunk/framework/runtimes/embedded/src/test/java/org/apache/isis/runtimes/embedded/WrappedFactoryDefaultTest_wrappedObject_transient.java Removed: incubator/isis/trunk/framework/core/testsupport/src/main/java/org/apache/isis/core/testsupport/jmock/AbstractJMockForClassesTest.java incubator/isis/trunk/framework/core/testsupport/src/main/java/org/apache/isis/core/testsupport/jmock/AbstractJMockForInterfacesTest.java incubator/isis/trunk/framework/core/testsupport/src/main/java/org/apache/isis/core/testsupport/jmock/AbstractJMockTest.java incubator/isis/trunk/framework/core/testsupport/src/main/java/org/apache/isis/core/testsupport/jmock/ConvenienceMockery.java incubator/isis/trunk/framework/core/testsupport/src/main/java/org/apache/isis/core/testsupport/jmock/DelegatingMockery.java incubator/isis/trunk/framework/core/testsupport/src/main/java/org/apache/isis/core/testsupport/jmock/Fixture.java incubator/isis/trunk/framework/core/testsupport/src/main/java/org/apache/isis/core/testsupport/jmock/FixtureMockery.java incubator/isis/trunk/framework/core/testsupport/src/main/java/org/apache/isis/core/testsupport/jmock/JMockContextBuilder.java incubator/isis/trunk/framework/core/testsupport/src/main/java/org/apache/isis/core/testsupport/jmock/JMockRule.java incubator/isis/trunk/framework/core/testsupport/src/main/java/org/apache/isis/core/testsupport/jmock/MockFixture.java incubator/isis/trunk/framework/core/testsupport/src/main/java/org/apache/isis/core/testsupport/jmock/MockFixtureAdapter.java incubator/isis/trunk/framework/runtimes/embedded/src/test/java/org/apache/isis/runtimes/embedded/GivenEmbeddedViewerAndPersistentDomainObject.java incubator/isis/trunk/framework/runtimes/embedded/src/test/java/org/apache/isis/runtimes/embedded/GivenMetaModelWhenInitialize.java incubator/isis/trunk/framework/runtimes/embedded/src/test/java/org/apache/isis/runtimes/embedded/GivenMetaModelWhenInitialized.java incubator/isis/trunk/framework/runtimes/embedded/src/test/java/org/apache/isis/runtimes/embedded/GivenMetaModelWhenInstantiate.java incubator/isis/trunk/framework/runtimes/embedded/src/test/java/org/apache/isis/runtimes/embedded/GivenMetaModelWhenInstantiated.java incubator/isis/trunk/framework/runtimes/embedded/src/test/java/org/apache/isis/runtimes/embedded/GivenMetaModelWhenShutdown.java incubator/isis/trunk/framework/viewer/wicket/wicket-viewer/src/test/java/org/apache/isis/viewer/wicket/viewer/Fixture_AuthenticationManager_AuthenticateOk.java incubator/isis/trunk/framework/viewer/wicket/wicket-viewer/src/test/java/org/apache/isis/viewer/wicket/viewer/Fixture_Request_Stub.java incubator/isis/trunk/framework/viewer/wicket/wicket-viewer/src/test/java/org/apache/isis/viewer/wicket/viewer/app/wicket/Fixture_AuthenticatedWebSessionForIsis_SignedIn.java Modified: incubator/isis/trunk/framework/progmodels/wrapper/wrapper-metamodel/src/main/java/org/apache/isis/progmodel/wrapper/metamodel/DomainObjectContainerWrapperFactory.java incubator/isis/trunk/framework/progmodels/wrapper/wrapper-metamodel/src/main/java/org/apache/isis/progmodel/wrapper/metamodel/internal/Proxy.java incubator/isis/trunk/framework/progmodels/wrapper/wrapper-metamodel/src/main/java/org/apache/isis/progmodel/wrapper/metamodel/internal/WrapperFactoryDefault.java incubator/isis/trunk/framework/runtimes/embedded/pom.xml incubator/isis/trunk/framework/runtimes/embedded/src/docbkx/guide/isis-embedded-runtime.xml incubator/isis/trunk/framework/runtimes/embedded/src/main/java/org/apache/isis/runtimes/embedded/IsisMetaModel.java incubator/isis/trunk/framework/runtimes/embedded/src/test/java/org/apache/isis/runtimes/embedded/dom/employee/Employee.java incubator/isis/trunk/framework/viewer/wicket/wicket-viewer/src/test/java/org/apache/isis/viewer/wicket/viewer/IsisWicketApplication_Defaults.java incubator/isis/trunk/framework/viewer/wicket/wicket-viewer/src/test/java/org/apache/isis/viewer/wicket/viewer/IsisWicketApplication_Pages.java incubator/isis/trunk/framework/viewer/wicket/wicket-viewer/src/test/java/org/apache/isis/viewer/wicket/viewer/IsisWicketApplication_init.java incubator/isis/trunk/framework/viewer/wicket/wicket-viewer/src/test/java/org/apache/isis/viewer/wicket/viewer/app/wicket/AuthenticatedWebSessionForIsis_Authenticate.java incubator/isis/trunk/framework/viewer/wicket/wicket-viewer/src/test/java/org/apache/isis/viewer/wicket/viewer/app/wicket/AuthenticatedWebSessionForIsis_Instantiation.java incubator/isis/trunk/framework/viewer/wicket/wicket-viewer/src/test/java/org/apache/isis/viewer/wicket/viewer/app/wicket/AuthenticatedWebSessionForIsis_SignIn.java incubator/isis/trunk/framework/viewer/wicket/wicket-viewer/src/test/java/org/apache/isis/viewer/wicket/viewer/app/wicket/AuthenticatedWebSessionForIsis_ThreadManagement.java incubator/isis/trunk/framework/viewer/wicket/wicket-viewer/src/test/java/org/apache/isis/viewer/wicket/viewer/app/wicket/WebRequestCycleForIsisTest.java Copied: incubator/isis/trunk/framework/core/testsupport/src/main/java/org/apache/isis/core/testsupport/jmock/JUnitRuleMockery2.java (from r1214077, incubator/isis/trunk/framework/core/testsupport/src/main/java/org/apache/isis/core/testsupport/jmock/ConvenienceMockery.java) URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/core/testsupport/src/main/java/org/apache/isis/core/testsupport/jmock/JUnitRuleMockery2.java?p2=incubator/isis/trunk/framework/core/testsupport/src/main/java/org/apache/isis/core/testsupport/jmock/JUnitRuleMockery2.java&p1=incubator/isis/trunk/framework/core/testsupport/src/main/java/org/apache/isis/core/testsupport/jmock/ConvenienceMockery.java&r1=1214077&r2=1215492&rev=1215492&view=diff ============================================================================== --- incubator/isis/trunk/framework/core/testsupport/src/main/java/org/apache/isis/core/testsupport/jmock/ConvenienceMockery.java (original) +++ incubator/isis/trunk/framework/core/testsupport/src/main/java/org/apache/isis/core/testsupport/jmock/JUnitRuleMockery2.java Sat Dec 17 14:14:28 2011 @@ -20,124 +20,106 @@ package org.apache.isis.core.testsupport.jmock; import org.jmock.Expectations; -import org.jmock.Mockery; +import org.jmock.integration.junit4.JUnitRuleMockery; +import org.jmock.lib.legacy.ClassImposteriser; +import org.junit.runners.model.FrameworkMethod; +import org.junit.runners.model.Statement; /** - * Adds some convenience methods to {@link Mockery}. + * Use as a @Rule, meaning that the @RunWith(JMock.class) + * can be ignored. + * + *
+ * public class MyTest {
+ * 
+ *     @Rule
+ *     public final Junit4Mockery2 context = Junit4Mockery2.createFor(Mode.INTERFACES);
+ *
+ * }
+ * 
+ * + *

+ * The class also adds some convenience methods, and uses a factory method + * to make it explicit whether the context can mock only interfaces or + * interfaces and classes. */ -public abstract class ConvenienceMockery extends Mockery { +public class JUnitRuleMockery2 extends JUnitRuleMockery { + + public static enum Mode { + INTERFACES_ONLY, + INTERFACES_AND_CLASSES; + } /** + * Factory method. + */ + public static JUnitRuleMockery2 createFor(Mode mode) { + JUnitRuleMockery2 jUnitRuleMockery2 = new JUnitRuleMockery2(); + if(mode == Mode.INTERFACES_AND_CLASSES) { + jUnitRuleMockery2.setImposteriser(ClassImposteriser.INSTANCE); + } + return jUnitRuleMockery2; + } + + private JUnitRuleMockery2() {} + + /** * Ignoring any interaction with the mock; an allowing/ignoring mock will be returned in turn. */ - public void ignoring(final Object mock) { + public T ignoring(final T mock) { checking(new Expectations() { { ignoring(mock); } }); + return mock; } /** * Allow any interaction with the mock; an allowing mock will be returned in turn. */ - public void allowing(final Object mock) { + public T allowing(final T mock) { checking(new Expectations() { { allowing(mock); } }); + return mock; } /** * Prohibit any interaction with the mock. */ - public void never(final Object mock) { + public T never(final T mock) { checking(new Expectations() { { never(mock); } }); - } - - /** - * Same as {@link #never(Object)}. - */ - public void prohibit(final Object mock) { - never(mock); - } - - public T mockAndIgnoreAnyInteraction(final Class typeToMock) { - final T mock = mock(typeToMock); - checking(new Expectations() { - { - ignoring(mock); - } - }); return mock; } - public T mockAndIgnoreAnyInteraction(final Class typeToMock, final String name) { - final T mock = mock(typeToMock, name); - checking(new Expectations() { - { - ignoring(mock); - } - }); - return mock; + public T mockAndIgnoring(final Class typeToMock) { + return ignoring(mock(typeToMock)); } - public T mockAndAllowAnyInteraction(final Class typeToMock) { - final T mock = mock(typeToMock); - checking(new Expectations() { - { - allowing(mock); - } - }); - return mock; + public T mockAndIgnoring(final Class typeToMock, final String name) { + return ignoring(mock(typeToMock, name)); } - public T mockAndAllowAnyInteraction(final Class typeToMock, final String name) { - final T mock = mock(typeToMock, name); - checking(new Expectations() { - { - allowing(mock); - } - }); - return mock; + public T mockAndAllowing(final Class typeToMock) { + return allowing(mock(typeToMock)); } - public T mockAndNeverAnyInteraction(final Class typeToMock) { - final T mock = mock(typeToMock); - checking(new Expectations() { - { - never(mock); - } - }); - return mock; + public T mockAndAllowing(final Class typeToMock, final String name) { + return allowing(mock(typeToMock, name)); } - public T mockAndNeverAnyInteraction(final Class typeToMock, final String name) { - final T mock = mock(typeToMock, name); - checking(new Expectations() { - { - never(mock); - } - }); - return mock; + public T mockAndNever(final Class typeToMock) { + return never(mock(typeToMock)); } - /** - * Same as {@link #mockAndNeverAnyInteraction(Class)}. - */ - public T mockAndProhibitAnyInteraction(final Class typeToMock) { - return mockAndNeverAnyInteraction(typeToMock); - } - - /** - * Same as {@link #mockAndNeverAnyInteraction(Class, String)}. - */ - public T mockAndProhibitAnyInteraction(final Class typeToMock, final String name) { - return mockAndNeverAnyInteraction(typeToMock, name); + public T mockAndNever(final Class typeToMock, final String name) { + return never(mock(typeToMock, name)); } } Added: incubator/isis/trunk/framework/core/testsupport/src/main/java/org/jmock/auto/Auto.java URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/core/testsupport/src/main/java/org/jmock/auto/Auto.java?rev=1215492&view=auto ============================================================================== --- incubator/isis/trunk/framework/core/testsupport/src/main/java/org/jmock/auto/Auto.java (added) +++ incubator/isis/trunk/framework/core/testsupport/src/main/java/org/jmock/auto/Auto.java Sat Dec 17 14:14:28 2011 @@ -0,0 +1,39 @@ +/** +Copyright (c) 2000-2007, jMock.org +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +Redistributions of source code must retain the above copyright notice, this list of +conditions and the following disclaimer. Redistributions in binary form must reproduce +the above copyright notice, this list of conditions and the following disclaimer in +the documentation and/or other materials provided with the distribution. + +Neither the name of jMock nor the names of its contributors may be used to endorse +or promote products derived from this software without specific prior written +permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY +EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT +SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED +TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR +BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY +WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. +*/ +package org.jmock.auto; + +import static java.lang.annotation.ElementType.FIELD; +import static java.lang.annotation.RetentionPolicy.RUNTIME; + +import java.lang.annotation.Retention; +import java.lang.annotation.Target; + +@Retention(RUNTIME) +@Target(FIELD) +public @interface Auto { +} \ No newline at end of file Added: incubator/isis/trunk/framework/core/testsupport/src/main/java/org/jmock/auto/Mock.java URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/core/testsupport/src/main/java/org/jmock/auto/Mock.java?rev=1215492&view=auto ============================================================================== --- incubator/isis/trunk/framework/core/testsupport/src/main/java/org/jmock/auto/Mock.java (added) +++ incubator/isis/trunk/framework/core/testsupport/src/main/java/org/jmock/auto/Mock.java Sat Dec 17 14:14:28 2011 @@ -0,0 +1,40 @@ +/** +Copyright (c) 2000-2007, jMock.org +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +Redistributions of source code must retain the above copyright notice, this list of +conditions and the following disclaimer. Redistributions in binary form must reproduce +the above copyright notice, this list of conditions and the following disclaimer in +the documentation and/or other materials provided with the distribution. + +Neither the name of jMock nor the names of its contributors may be used to endorse +or promote products derived from this software without specific prior written +permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY +EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT +SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED +TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR +BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY +WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. +*/ +package org.jmock.auto; + +import static java.lang.annotation.ElementType.FIELD; +import static java.lang.annotation.RetentionPolicy.RUNTIME; + +import java.lang.annotation.Retention; +import java.lang.annotation.Target; + + +@Retention(RUNTIME) +@Target(FIELD) +public @interface Mock { +} \ No newline at end of file Added: incubator/isis/trunk/framework/core/testsupport/src/main/java/org/jmock/auto/internal/AllDeclaredFields.java URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/core/testsupport/src/main/java/org/jmock/auto/internal/AllDeclaredFields.java?rev=1215492&view=auto ============================================================================== --- incubator/isis/trunk/framework/core/testsupport/src/main/java/org/jmock/auto/internal/AllDeclaredFields.java (added) +++ incubator/isis/trunk/framework/core/testsupport/src/main/java/org/jmock/auto/internal/AllDeclaredFields.java Sat Dec 17 14:14:28 2011 @@ -0,0 +1,44 @@ +/** +Copyright (c) 2000-2007, jMock.org +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +Redistributions of source code must retain the above copyright notice, this list of +conditions and the following disclaimer. Redistributions in binary form must reproduce +the above copyright notice, this list of conditions and the following disclaimer in +the documentation and/or other materials provided with the distribution. + +Neither the name of jMock nor the names of its contributors may be used to endorse +or promote products derived from this software without specific prior written +permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY +EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT +SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED +TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR +BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY +WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. +*/ +package org.jmock.auto.internal; + +import java.lang.reflect.Field; +import java.util.ArrayList; +import java.util.List; + +import static java.util.Arrays.asList; + +public class AllDeclaredFields { + public static List in(Class clazz) { + final ArrayList fields = new ArrayList(); + for (Class c = clazz; c != Object.class; c = c.getSuperclass()) { + fields.addAll(asList(c.getDeclaredFields())); + } + return fields; + } +} \ No newline at end of file Added: incubator/isis/trunk/framework/core/testsupport/src/main/java/org/jmock/auto/internal/Mockomatic.java URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/core/testsupport/src/main/java/org/jmock/auto/internal/Mockomatic.java?rev=1215492&view=auto ============================================================================== --- incubator/isis/trunk/framework/core/testsupport/src/main/java/org/jmock/auto/internal/Mockomatic.java (added) +++ incubator/isis/trunk/framework/core/testsupport/src/main/java/org/jmock/auto/internal/Mockomatic.java Sat Dec 17 14:14:28 2011 @@ -0,0 +1,103 @@ +/** +Copyright (c) 2000-2007, jMock.org +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +Redistributions of source code must retain the above copyright notice, this list of +conditions and the following disclaimer. Redistributions in binary form must reproduce +the above copyright notice, this list of conditions and the following disclaimer in +the documentation and/or other materials provided with the distribution. + +Neither the name of jMock nor the names of its contributors may be used to endorse +or promote products derived from this software without specific prior written +permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY +EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT +SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED +TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR +BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY +WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. +*/ +package org.jmock.auto.internal; + +import java.lang.reflect.Field; +import java.util.List; + +import org.jmock.Mockery; +import org.jmock.Sequence; +import org.jmock.States; +import org.jmock.auto.Auto; +import org.jmock.auto.Mock; + + +public class Mockomatic { + private final Mockery mockery; + + public Mockomatic(Mockery mockery) { + this.mockery = mockery; + } + + public void fillIn(Object object) { + fillIn(object, AllDeclaredFields.in(object.getClass())); + } + + public void fillIn(Object object, final List knownFields) { + for (Field field : knownFields) { + if (field.isAnnotationPresent(Mock.class)) { + autoMock(object, field); + } + else if (field.isAnnotationPresent(Auto.class)) { + autoInstantiate(object, field); + } + } + } + + private void autoMock(Object object, Field field) { + setAutoField(field, object, + mockery.mock(field.getType(), field.getName()), + "auto-mock field " + field.getName()); + } + + private void autoInstantiate(Object object, Field field) { + final Class type = field.getType(); + if (type == States.class) { + autoInstantiateStates(field, object); + } + else if (type == Sequence.class) { + autoInstantiateSequence(field, object); + } + else { + throw new IllegalStateException("cannot auto-instantiate field of type " + type.getName()); + } + } + + private void autoInstantiateStates(Field field, Object object) { + setAutoField(field, object, + mockery.states(field.getName()), + "auto-instantiate States field " + field.getName()); + } + + private void autoInstantiateSequence(Field field, Object object) { + setAutoField(field, object, + mockery.sequence(field.getName()), + "auto-instantiate Sequence field " + field.getName()); + } + + private void setAutoField(Field field, Object object, Object value, String description) { + try { + field.setAccessible(true); + field.set(object, value); + } + catch (IllegalAccessException e) { + throw new IllegalStateException("cannot " + description, e); + } + } + +} \ No newline at end of file Added: incubator/isis/trunk/framework/core/testsupport/src/main/java/org/jmock/integration/junit4/JUnitRuleMockery.java URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/core/testsupport/src/main/java/org/jmock/integration/junit4/JUnitRuleMockery.java?rev=1215492&view=auto ============================================================================== --- incubator/isis/trunk/framework/core/testsupport/src/main/java/org/jmock/integration/junit4/JUnitRuleMockery.java (added) +++ incubator/isis/trunk/framework/core/testsupport/src/main/java/org/jmock/integration/junit4/JUnitRuleMockery.java Sat Dec 17 14:14:28 2011 @@ -0,0 +1,104 @@ +/** +Copyright (c) 2000-2007, jMock.org +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +Redistributions of source code must retain the above copyright notice, this list of +conditions and the following disclaimer. Redistributions in binary form must reproduce +the above copyright notice, this list of conditions and the following disclaimer in +the documentation and/or other materials provided with the distribution. + +Neither the name of jMock nor the names of its contributors may be used to endorse +or promote products derived from this software without specific prior written +permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY +EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT +SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED +TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR +BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY +WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. + */ +package org.jmock.integration.junit4; + +import org.jmock.auto.internal.AllDeclaredFields; +import org.jmock.auto.internal.Mockomatic; +import org.jmock.integration.junit4.JUnit4Mockery; +import org.junit.rules.MethodRule; +import org.junit.runners.model.FrameworkMethod; +import org.junit.runners.model.Statement; + +import java.lang.reflect.Field; +import java.util.List; + +import static org.junit.Assert.fail; + +/** + * A JUnitRuleMockery is a JUnit Rule that manages JMock expectations + * and allowances, and asserts that expectations have been met after each test + * has finished. To use it, add a field to the test class (note that you don't + * have to specify @RunWith(JMock.class) any more). For example, + * + *

public class ATestWithSatisfiedExpectations {
+ *  @Rule public final JUnitRuleMockery context = new JUnitRuleMockery();
+ *  private final Runnable runnable = context.mock(Runnable.class);
+ *     
+ *  @Test
+ *  public void doesSatisfyExpectations() {
+ *    context.checking(new Expectations() {{
+ *      oneOf (runnable).run();
+ *    }});
+ *          
+ *    runnable.run();
+ *  }
+ *}
+ * + * Note that the Rule field must be declared public and as a JUnitRuleMockery + * (not a Mockery) for JUnit to recognise it, as it's checked statically. + * + * @author smgf + */ +public class JUnitRuleMockery extends JUnit4Mockery implements MethodRule { + private final Mockomatic mockomatic = new Mockomatic(this); + + @Override + public Statement apply(final Statement base, FrameworkMethod method, final Object target) { + return new Statement() { + @Override + public void evaluate() throws Throwable { + prepare(target); + base.evaluate(); + assertIsSatisfied(); + } + + private void prepare(final Object target) { + List allFields = AllDeclaredFields.in(target.getClass()); + assertOnlyOneJMockContextIn(allFields); + fillInAutoMocks(target, allFields); + } + + private void assertOnlyOneJMockContextIn(List allFields) { + Field contextField = null; + for (Field field : allFields) { + if (JUnitRuleMockery.class.isAssignableFrom(field.getType())) { + if (null != contextField) { + fail("Test class should only have one JUnitRuleMockery field, found " + + contextField.getName() + " and " + field.getName()); + } + contextField = field; + } + } + } + + private void fillInAutoMocks(final Object target, List allFields) { + mockomatic.fillIn(target, allFields); + } + }; + } +} \ No newline at end of file Added: incubator/isis/trunk/framework/core/testsupport/src/test/java/org/apache/isis/core/testsupport/jmock/JUnit4RuleMockery2Test.java URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/core/testsupport/src/test/java/org/apache/isis/core/testsupport/jmock/JUnit4RuleMockery2Test.java?rev=1215492&view=auto ============================================================================== --- incubator/isis/trunk/framework/core/testsupport/src/test/java/org/apache/isis/core/testsupport/jmock/JUnit4RuleMockery2Test.java (added) +++ incubator/isis/trunk/framework/core/testsupport/src/test/java/org/apache/isis/core/testsupport/jmock/JUnit4RuleMockery2Test.java Sat Dec 17 14:14:28 2011 @@ -0,0 +1,40 @@ +package org.apache.isis.core.testsupport.jmock; + +import org.apache.isis.core.testsupport.jmock.JUnitRuleMockery2.Mode; +import org.jmock.Expectations; +import org.jmock.auto.Mock; +import org.junit.Rule; +import org.junit.Test; + +public class JUnit4RuleMockery2Test { + + @Rule + public JUnitRuleMockery2 context = JUnitRuleMockery2.createFor(Mode.INTERFACES_AND_CLASSES); + + public static class Collaborator { + public void doOtherStuff() { + } + } + public static class ClassUnderTest { + private final Collaborator collaborator; + + private ClassUnderTest(Collaborator collaborator) { + this.collaborator = collaborator; + } + + public void doStuff() { + collaborator.doOtherStuff(); + } + } + + @Mock + private Collaborator collaborator; + + @Test + public void poke() { + context.checking(new Expectations(){{ + one(collaborator).doOtherStuff(); + }}); + new ClassUnderTest(collaborator).doStuff(); + } +} Modified: incubator/isis/trunk/framework/progmodels/wrapper/wrapper-metamodel/src/main/java/org/apache/isis/progmodel/wrapper/metamodel/DomainObjectContainerWrapperFactory.java URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/progmodels/wrapper/wrapper-metamodel/src/main/java/org/apache/isis/progmodel/wrapper/metamodel/DomainObjectContainerWrapperFactory.java?rev=1215492&r1=1215491&r2=1215492&view=diff ============================================================================== --- incubator/isis/trunk/framework/progmodels/wrapper/wrapper-metamodel/src/main/java/org/apache/isis/progmodel/wrapper/metamodel/DomainObjectContainerWrapperFactory.java (original) +++ incubator/isis/trunk/framework/progmodels/wrapper/wrapper-metamodel/src/main/java/org/apache/isis/progmodel/wrapper/metamodel/DomainObjectContainerWrapperFactory.java Sat Dec 17 14:14:28 2011 @@ -103,9 +103,9 @@ public class DomainObjectContainerWrappe } @Override - public void setAdapterMap(final AdapterMap adapterManager) { - super.setAdapterMap(adapterManager); - wrapperFactoryDelegate.setAdapterMap(adapterManager); + public void setAdapterMap(final AdapterMap adapterMap) { + super.setAdapterMap(adapterMap); + wrapperFactoryDelegate.setAdapterMap(adapterMap); } @Override Modified: incubator/isis/trunk/framework/progmodels/wrapper/wrapper-metamodel/src/main/java/org/apache/isis/progmodel/wrapper/metamodel/internal/Proxy.java URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/progmodels/wrapper/wrapper-metamodel/src/main/java/org/apache/isis/progmodel/wrapper/metamodel/internal/Proxy.java?rev=1215492&r1=1215491&r2=1215492&view=diff ============================================================================== --- incubator/isis/trunk/framework/progmodels/wrapper/wrapper-metamodel/src/main/java/org/apache/isis/progmodel/wrapper/metamodel/internal/Proxy.java (original) +++ incubator/isis/trunk/framework/progmodels/wrapper/wrapper-metamodel/src/main/java/org/apache/isis/progmodel/wrapper/metamodel/internal/Proxy.java Sat Dec 17 14:14:28 2011 @@ -19,10 +19,15 @@ package org.apache.isis.progmodel.wrapper.metamodel.internal; +import static org.hamcrest.CoreMatchers.is; +import static org.hamcrest.CoreMatchers.not; +import static org.hamcrest.CoreMatchers.nullValue; + import java.util.Collection; import java.util.Map; import org.apache.isis.core.commons.authentication.AuthenticationSessionProvider; +import org.apache.isis.core.commons.ensure.Ensure; import org.apache.isis.core.metamodel.adapter.ObjectPersistor; import org.apache.isis.core.metamodel.adapter.map.AdapterMap; import org.apache.isis.core.metamodel.spec.SpecificationLookup; @@ -32,12 +37,19 @@ import org.apache.isis.progmodel.wrapper public class Proxy { - public static T proxy(final T domainObject, final WrapperFactory embeddedViewer, final ExecutionMode mode, + public static T proxy(final T domainObject, final WrapperFactory wrapperFactory, final ExecutionMode mode, final AuthenticationSessionProvider authenticationSessionProvider, final SpecificationLookup specificationLookup, final AdapterMap adapterManager, final ObjectPersistor objectPersistor) { + + Ensure.ensureThatArg(wrapperFactory, is(not(nullValue()))); + Ensure.ensureThatArg(authenticationSessionProvider, is(not(nullValue()))); + Ensure.ensureThatArg(specificationLookup, is(not(nullValue()))); + Ensure.ensureThatArg(adapterManager, is(not(nullValue()))); + Ensure.ensureThatArg(objectPersistor, is(not(nullValue()))); + final DomainObjectInvocationHandler invocationHandler = - new DomainObjectInvocationHandler(domainObject, embeddedViewer, mode, authenticationSessionProvider, + new DomainObjectInvocationHandler(domainObject, wrapperFactory, mode, authenticationSessionProvider, specificationLookup, adapterManager, objectPersistor); final CgLibProxy cglibProxy = new CgLibProxy(invocationHandler); Modified: incubator/isis/trunk/framework/progmodels/wrapper/wrapper-metamodel/src/main/java/org/apache/isis/progmodel/wrapper/metamodel/internal/WrapperFactoryDefault.java URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/progmodels/wrapper/wrapper-metamodel/src/main/java/org/apache/isis/progmodel/wrapper/metamodel/internal/WrapperFactoryDefault.java?rev=1215492&r1=1215491&r2=1215492&view=diff ============================================================================== --- incubator/isis/trunk/framework/progmodels/wrapper/wrapper-metamodel/src/main/java/org/apache/isis/progmodel/wrapper/metamodel/internal/WrapperFactoryDefault.java (original) +++ incubator/isis/trunk/framework/progmodels/wrapper/wrapper-metamodel/src/main/java/org/apache/isis/progmodel/wrapper/metamodel/internal/WrapperFactoryDefault.java Sat Dec 17 14:14:28 2011 @@ -272,8 +272,8 @@ public class WrapperFactoryDefault imple } @Override - public void setAdapterMap(final AdapterMap adapterManager) { - this.adapterManager = adapterManager; + public void setAdapterMap(final AdapterMap adapterMap) { + this.adapterManager = adapterMap; } @Override Modified: incubator/isis/trunk/framework/runtimes/embedded/pom.xml URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/runtimes/embedded/pom.xml?rev=1215492&r1=1215491&r2=1215492&view=diff ============================================================================== --- incubator/isis/trunk/framework/runtimes/embedded/pom.xml (original) +++ incubator/isis/trunk/framework/runtimes/embedded/pom.xml Sat Dec 17 14:14:28 2011 @@ -122,6 +122,13 @@ org.apache.isis.runtimes.dflt.bytecode identity + + + org.apache.isis.core + testsupport + test + + Modified: incubator/isis/trunk/framework/runtimes/embedded/src/docbkx/guide/isis-embedded-runtime.xml URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/runtimes/embedded/src/docbkx/guide/isis-embedded-runtime.xml?rev=1215492&r1=1215491&r2=1215492&view=diff ============================================================================== --- incubator/isis/trunk/framework/runtimes/embedded/src/docbkx/guide/isis-embedded-runtime.xml (original) +++ incubator/isis/trunk/framework/runtimes/embedded/src/docbkx/guide/isis-embedded-runtime.xml Sat Dec 17 14:14:28 2011 @@ -1,6 +1,6 @@ - + @@ -74,11 +95,35 @@ *** *** yada yada + + + + + + The IsisMetaModel class. + + - + + + + + + WrapperFactory, and wrapped objects. + + + + + + The Wrapped Objects + + - how they handle save(), how they hand title() + + - *** + EmbeddedContext API *** yada yada @@ -88,9 +133,73 @@ *** *** yada yada + + + + + + + + public interface EmbeddedContext { + + AuthenticationSession getAuthenticationSession(); + Localization getLocalization(); + + Object instantiate(Class<?> type); + + void resolve(Object parent); + void resolve(Object parent, Object field); + void objectChanged(Object object); + + void makePersistent(Object object); + void remove(Object object); + PersistenceState getPersistenceState(Object object); + + <T> List<T> allMatchingQuery(Query<T> query); + <T> T firstMatchingQuery(Query<T> query); + + boolean flush(); + void commit(); + + void informUser(String message); + void warnUser(String message); + void raiseError(String message); +} + + + + + + + + Writing and Deploying an Implementation + + + + + + instantiate IsisMetaModel via Spring. + + + + Provide some copy-n-paste example code here... + + + + The IsisMetaModel creates a DomainObjectContainerWrapperFactory. The + EmbeddedContext implementation should take this and inject into entities + as required. + + + + + + + + *** Modified: incubator/isis/trunk/framework/runtimes/embedded/src/main/java/org/apache/isis/runtimes/embedded/IsisMetaModel.java URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/runtimes/embedded/src/main/java/org/apache/isis/runtimes/embedded/IsisMetaModel.java?rev=1215492&r1=1215491&r2=1215492&view=diff ============================================================================== --- incubator/isis/trunk/framework/runtimes/embedded/src/main/java/org/apache/isis/runtimes/embedded/IsisMetaModel.java (original) +++ incubator/isis/trunk/framework/runtimes/embedded/src/main/java/org/apache/isis/runtimes/embedded/IsisMetaModel.java Sat Dec 17 14:14:28 2011 @@ -24,7 +24,6 @@ import static org.apache.isis.core.commo import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.CoreMatchers.notNullValue; -import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.List; @@ -34,12 +33,10 @@ import java.util.TreeSet; import org.apache.isis.core.commons.components.ApplicationScopedComponent; import org.apache.isis.core.commons.config.IsisConfiguration; import org.apache.isis.core.commons.config.IsisConfigurationDefault; -import org.apache.isis.core.commons.exceptions.IsisException; import org.apache.isis.core.metamodel.facetdecorator.FacetDecorator; import org.apache.isis.core.metamodel.layout.MemberLayoutArranger; import org.apache.isis.core.metamodel.progmodel.ProgrammingModel; import org.apache.isis.core.metamodel.services.ServicesInjector; -import org.apache.isis.core.metamodel.services.container.DomainObjectContainerDefault; import org.apache.isis.core.metamodel.spec.ObjectSpecification; import org.apache.isis.core.metamodel.spec.SpecificationLoader; import org.apache.isis.core.metamodel.specloader.ObjectReflectorDefault; @@ -53,11 +50,12 @@ import org.apache.isis.core.progmodel.la import org.apache.isis.core.progmodel.metamodelvalidator.dflt.MetaModelValidatorDefault; import org.apache.isis.progmodel.wrapper.applib.WrapperFactory; import org.apache.isis.progmodel.wrapper.metamodel.DomainObjectContainerWrapperFactory; -import org.apache.isis.progmodel.wrapper.metamodel.internal.WrapperFactoryDefault; import org.apache.isis.progmodels.dflt.ProgrammingModelFacetsJava5; import org.apache.isis.runtimes.dflt.bytecode.identity.classsubstitutor.ClassSubstitutorIdentity; import org.apache.isis.runtimes.embedded.internal.RuntimeContextForEmbeddedMetaModel; +import com.google.common.collect.Lists; + /** * Facade for the entire Isis metamodel and supporting components. */ @@ -67,7 +65,7 @@ public class IsisMetaModel implements Ap NOT_INITIALIZED, INITIALIZED, SHUTDOWN; } - private final List> serviceTypes = new ArrayList>(); + private final List services = Lists.newArrayList(); private State state = State.NOT_INITIALIZED; private ObjectReflectorDefault reflector; @@ -82,13 +80,15 @@ public class IsisMetaModel implements Ap private Set facetDecorators; private MetaModelValidator metaModelValidator; - private WrapperFactory viewer; + private WrapperFactory wrapperFactory; private final EmbeddedContext context; - private List services; - public IsisMetaModel(final EmbeddedContext context, final Class... serviceTypes) { + public IsisMetaModel(final EmbeddedContext context, final Object... services) { + this(context, Arrays.asList(services)); + } - this.serviceTypes.addAll(Arrays.asList(serviceTypes)); + public IsisMetaModel(final EmbeddedContext context, final List services) { + this.services.addAll(services); setConfiguration(new IsisConfigurationDefault()); setClassSubstitutor(new ClassSubstitutorIdentity()); setCollectionTypeRegistry(new CollectionTypeRegistryDefault()); @@ -96,9 +96,9 @@ public class IsisMetaModel implements Ap setMemberLayoutArranger(new MemberLayoutArrangerDefault()); setFacetDecorators(new TreeSet()); setProgrammingModelFacets(new ProgrammingModelFacetsJava5()); - + setMetaModelValidator(new MetaModelValidatorDefault()); - + this.context = context; } @@ -110,8 +110,8 @@ public class IsisMetaModel implements Ap * To obtain the instantiated services, use the {@link ServicesInjector#getRegisteredServices()} (available from * {@link #getServicesInjector()}). */ - public List> getServiceTypes() { - return Collections.unmodifiableList(serviceTypes); + public List getServices() { + return Collections.unmodifiableList(services); } // /////////////////////////////////////////////////////// @@ -125,9 +125,8 @@ public class IsisMetaModel implements Ap new ObjectReflectorDefault(configuration, classSubstitutor, collectionTypeRegistry, specificationTraverser, memberLayoutArranger, programmingModel, facetDecorators, metaModelValidator); - services = createServices(serviceTypes); runtimeContext = new RuntimeContextForEmbeddedMetaModel(context, services); - final DomainObjectContainerDefault container = new DomainObjectContainerWrapperFactory(); + final DomainObjectContainerWrapperFactory container = new DomainObjectContainerWrapperFactory(); runtimeContext.injectInto(container); runtimeContext.setContainer(container); @@ -137,13 +136,13 @@ public class IsisMetaModel implements Ap reflector.init(); runtimeContext.init(); - for (final Class serviceType : serviceTypes) { - final ObjectSpecification serviceSpec = reflector.loadSpecification(serviceType); + for (final Object service : services) { + final ObjectSpecification serviceSpec = reflector.loadSpecification(service.getClass()); serviceSpec.markAsService(); } state = State.INITIALIZED; - viewer = new WrapperFactoryDefault(); + wrapperFactory = container; } @Override @@ -152,20 +151,6 @@ public class IsisMetaModel implements Ap state = State.SHUTDOWN; } - private List createServices(final List> serviceTypes) { - final List services = new ArrayList(); - for (final Class serviceType : serviceTypes) { - try { - services.add(serviceType.newInstance()); - } catch (final InstantiationException e) { - throw new IsisException("Unable to instantiate service", e); - } catch (final IllegalAccessException e) { - throw new IsisException("Unable to instantiate service", e); - } - } - return services; - } - // /////////////////////////////////////////////////////// // SpecificationLoader // /////////////////////////////////////////////////////// @@ -184,9 +169,9 @@ public class IsisMetaModel implements Ap /** * Available once {@link #init() initialized}. */ - public WrapperFactory getViewer() { + public WrapperFactory getWrapperFactory() { ensureInitialized(); - return viewer; + return wrapperFactory; } // /////////////////////////////////////////////////////// Copied: incubator/isis/trunk/framework/runtimes/embedded/src/test/java/org/apache/isis/runtimes/embedded/IsisMetaModelTest_constructDefaults.java (from r1214077, incubator/isis/trunk/framework/runtimes/embedded/src/test/java/org/apache/isis/runtimes/embedded/GivenMetaModelWhenInstantiated.java) URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/runtimes/embedded/src/test/java/org/apache/isis/runtimes/embedded/IsisMetaModelTest_constructDefaults.java?p2=incubator/isis/trunk/framework/runtimes/embedded/src/test/java/org/apache/isis/runtimes/embedded/IsisMetaModelTest_constructDefaults.java&p1=incubator/isis/trunk/framework/runtimes/embedded/src/test/java/org/apache/isis/runtimes/embedded/GivenMetaModelWhenInstantiated.java&r1=1214077&r2=1215492&rev=1215492&view=diff ============================================================================== --- incubator/isis/trunk/framework/runtimes/embedded/src/test/java/org/apache/isis/runtimes/embedded/GivenMetaModelWhenInstantiated.java (original) +++ incubator/isis/trunk/framework/runtimes/embedded/src/test/java/org/apache/isis/runtimes/embedded/IsisMetaModelTest_constructDefaults.java Sat Dec 17 14:14:28 2011 @@ -23,25 +23,25 @@ import static org.hamcrest.CoreMatchers. import static org.hamcrest.CoreMatchers.notNullValue; import static org.junit.Assert.assertThat; -import org.jmock.Mockery; -import org.jmock.integration.junit4.JMock; -import org.jmock.integration.junit4.JUnit4Mockery; +import org.apache.isis.core.testsupport.jmock.JUnitRuleMockery2; +import org.apache.isis.core.testsupport.jmock.JUnitRuleMockery2.Mode; +import org.jmock.auto.Mock; import org.junit.Before; +import org.junit.Rule; import org.junit.Test; -import org.junit.runner.RunWith; -@RunWith(JMock.class) -public class GivenMetaModelWhenInstantiated { +public class IsisMetaModelTest_constructDefaults { - private final Mockery mockery = new JUnit4Mockery(); + @Rule + public final JUnitRuleMockery2 mockery = JUnitRuleMockery2.createFor(Mode.INTERFACES_ONLY); + @Mock private EmbeddedContext mockContext; private IsisMetaModel metaModel; @Before public void setUp() { - mockContext = mockery.mock(EmbeddedContext.class); metaModel = new IsisMetaModel(mockContext); } Copied: incubator/isis/trunk/framework/runtimes/embedded/src/test/java/org/apache/isis/runtimes/embedded/IsisMetaModelTest_constructWithServices.java (from r1214077, incubator/isis/trunk/framework/runtimes/embedded/src/test/java/org/apache/isis/runtimes/embedded/GivenMetaModelWhenInstantiate.java) URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/runtimes/embedded/src/test/java/org/apache/isis/runtimes/embedded/IsisMetaModelTest_constructWithServices.java?p2=incubator/isis/trunk/framework/runtimes/embedded/src/test/java/org/apache/isis/runtimes/embedded/IsisMetaModelTest_constructWithServices.java&p1=incubator/isis/trunk/framework/runtimes/embedded/src/test/java/org/apache/isis/runtimes/embedded/GivenMetaModelWhenInstantiate.java&r1=1214077&r2=1215492&rev=1215492&view=diff ============================================================================== --- incubator/isis/trunk/framework/runtimes/embedded/src/test/java/org/apache/isis/runtimes/embedded/GivenMetaModelWhenInstantiate.java (original) +++ incubator/isis/trunk/framework/runtimes/embedded/src/test/java/org/apache/isis/runtimes/embedded/IsisMetaModelTest_constructWithServices.java Sat Dec 17 14:14:28 2011 @@ -26,6 +26,9 @@ import java.util.List; import org.apache.isis.runtimes.embedded.dom.claim.ClaimRepositoryImpl; import org.apache.isis.runtimes.embedded.dom.employee.EmployeeRepositoryImpl; +import org.hamcrest.Description; +import org.hamcrest.Matcher; +import org.hamcrest.TypeSafeMatcher; import org.jmock.Mockery; import org.jmock.integration.junit4.JMock; import org.jmock.integration.junit4.JUnit4Mockery; @@ -34,7 +37,7 @@ import org.junit.Test; import org.junit.runner.RunWith; @RunWith(JMock.class) -public class GivenMetaModelWhenInstantiate { +public class IsisMetaModelTest_constructWithServices { private final Mockery mockery = new JUnit4Mockery(); @@ -54,11 +57,31 @@ public class GivenMetaModelWhenInstantia @Test public void shouldBeAbleToRegisterServices() { - metaModel = new IsisMetaModel(mockContext, EmployeeRepositoryImpl.class, ClaimRepositoryImpl.class); - final List> serviceTypes = metaModel.getServiceTypes(); - assertThat(serviceTypes.size(), is(2)); - assertThat(serviceTypes.contains(EmployeeRepositoryImpl.class), is(true)); - assertThat(serviceTypes.contains(ClaimRepositoryImpl.class), is(true)); + metaModel = new IsisMetaModel(mockContext, new EmployeeRepositoryImpl(), new ClaimRepositoryImpl()); + final List services = metaModel.getServices(); + assertThat(services.size(), is(2)); + assertThat(services, contains(EmployeeRepositoryImpl.class)); + assertThat(services, contains(ClaimRepositoryImpl.class)); + } + + private Matcher> contains(final Class cls) { + return new TypeSafeMatcher>() { + + @Override + public void describeTo(Description desc) { + desc.appendText("contains instance of type " + cls.getName()); + } + + @Override + public boolean matchesSafely(List items) { + for (Object object : items) { + if(cls.isAssignableFrom(object.getClass())) { + return true; + } + } + return false; + } + }; } } Copied: incubator/isis/trunk/framework/runtimes/embedded/src/test/java/org/apache/isis/runtimes/embedded/IsisMetaModelTest_getWrapperFactory.java (from r1214077, incubator/isis/trunk/framework/runtimes/embedded/src/test/java/org/apache/isis/runtimes/embedded/GivenMetaModelWhenInitialized.java) URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/runtimes/embedded/src/test/java/org/apache/isis/runtimes/embedded/IsisMetaModelTest_getWrapperFactory.java?p2=incubator/isis/trunk/framework/runtimes/embedded/src/test/java/org/apache/isis/runtimes/embedded/IsisMetaModelTest_getWrapperFactory.java&p1=incubator/isis/trunk/framework/runtimes/embedded/src/test/java/org/apache/isis/runtimes/embedded/GivenMetaModelWhenInitialized.java&r1=1214077&r2=1215492&rev=1215492&view=diff ============================================================================== --- incubator/isis/trunk/framework/runtimes/embedded/src/test/java/org/apache/isis/runtimes/embedded/GivenMetaModelWhenInitialized.java (original) +++ incubator/isis/trunk/framework/runtimes/embedded/src/test/java/org/apache/isis/runtimes/embedded/IsisMetaModelTest_getWrapperFactory.java Sat Dec 17 14:14:28 2011 @@ -33,7 +33,7 @@ import org.junit.Test; import org.junit.runner.RunWith; @RunWith(JMock.class) -public class GivenMetaModelWhenInitialized { +public class IsisMetaModelTest_getWrapperFactory { private final Mockery mockery = new JUnit4Mockery(); @@ -45,13 +45,13 @@ public class GivenMetaModelWhenInitializ public void setUp() { mockContext = mockery.mock(EmbeddedContext.class); - metaModel = new IsisMetaModel(mockContext, EmployeeRepositoryImpl.class, ClaimRepositoryImpl.class); + metaModel = new IsisMetaModel(mockContext); metaModel.init(); } @Test - public void shouldBeAbleToGetViewer() { - assertThat(metaModel.getViewer(), is(notNullValue())); + public void happyCase() { + assertThat(metaModel.getWrapperFactory(), is(notNullValue())); } } Copied: incubator/isis/trunk/framework/runtimes/embedded/src/test/java/org/apache/isis/runtimes/embedded/IsisMetaModelTest_init.java (from r1214077, incubator/isis/trunk/framework/runtimes/embedded/src/test/java/org/apache/isis/runtimes/embedded/GivenMetaModelWhenInitialize.java) URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/runtimes/embedded/src/test/java/org/apache/isis/runtimes/embedded/IsisMetaModelTest_init.java?p2=incubator/isis/trunk/framework/runtimes/embedded/src/test/java/org/apache/isis/runtimes/embedded/IsisMetaModelTest_init.java&p1=incubator/isis/trunk/framework/runtimes/embedded/src/test/java/org/apache/isis/runtimes/embedded/GivenMetaModelWhenInitialize.java&r1=1214077&r2=1215492&rev=1215492&view=diff ============================================================================== --- incubator/isis/trunk/framework/runtimes/embedded/src/test/java/org/apache/isis/runtimes/embedded/GivenMetaModelWhenInitialize.java (original) +++ incubator/isis/trunk/framework/runtimes/embedded/src/test/java/org/apache/isis/runtimes/embedded/IsisMetaModelTest_init.java Sat Dec 17 14:14:28 2011 @@ -36,7 +36,7 @@ import org.junit.Test; import org.junit.runner.RunWith; @RunWith(JMock.class) -public class GivenMetaModelWhenInitialize { +public class IsisMetaModelTest_init { private final Mockery mockery = new JUnit4Mockery(); @@ -58,7 +58,7 @@ public class GivenMetaModelWhenInitializ mockFacetDecorator = mockery.mock(FacetDecorator.class); mockClassSubstitutor = mockery.mock(ClassSubstitutor.class); - metaModel = new IsisMetaModel(mockContext, EmployeeRepositoryImpl.class, ClaimRepositoryImpl.class); + metaModel = new IsisMetaModel(mockContext); } @Test Copied: incubator/isis/trunk/framework/runtimes/embedded/src/test/java/org/apache/isis/runtimes/embedded/IsisMetaModelTest_shutdown.java (from r1214077, incubator/isis/trunk/framework/runtimes/embedded/src/test/java/org/apache/isis/runtimes/embedded/GivenMetaModelWhenShutdown.java) URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/runtimes/embedded/src/test/java/org/apache/isis/runtimes/embedded/IsisMetaModelTest_shutdown.java?p2=incubator/isis/trunk/framework/runtimes/embedded/src/test/java/org/apache/isis/runtimes/embedded/IsisMetaModelTest_shutdown.java&p1=incubator/isis/trunk/framework/runtimes/embedded/src/test/java/org/apache/isis/runtimes/embedded/GivenMetaModelWhenShutdown.java&r1=1214077&r2=1215492&rev=1215492&view=diff ============================================================================== --- incubator/isis/trunk/framework/runtimes/embedded/src/test/java/org/apache/isis/runtimes/embedded/GivenMetaModelWhenShutdown.java (original) +++ incubator/isis/trunk/framework/runtimes/embedded/src/test/java/org/apache/isis/runtimes/embedded/IsisMetaModelTest_shutdown.java Sat Dec 17 14:14:28 2011 @@ -36,7 +36,7 @@ import org.junit.Test; import org.junit.runner.RunWith; @RunWith(JMock.class) -public class GivenMetaModelWhenShutdown { +public class IsisMetaModelTest_shutdown { private final Mockery mockery = new JUnit4Mockery(); @@ -58,7 +58,7 @@ public class GivenMetaModelWhenShutdown mockFacetDecorator = mockery.mock(FacetDecorator.class); mockClassSubstitutor = mockery.mock(ClassSubstitutor.class); - metaModel = new IsisMetaModel(mockContext, EmployeeRepositoryImpl.class, ClaimRepositoryImpl.class); + metaModel = new IsisMetaModel(mockContext); } @Test Copied: incubator/isis/trunk/framework/runtimes/embedded/src/test/java/org/apache/isis/runtimes/embedded/WrappedFactoryDefaultTest_wrappedObject.java (from r1214077, incubator/isis/trunk/framework/runtimes/embedded/src/test/java/org/apache/isis/runtimes/embedded/GivenEmbeddedViewerAndPersistentDomainObject.java) URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/runtimes/embedded/src/test/java/org/apache/isis/runtimes/embedded/WrappedFactoryDefaultTest_wrappedObject.java?p2=incubator/isis/trunk/framework/runtimes/embedded/src/test/java/org/apache/isis/runtimes/embedded/WrappedFactoryDefaultTest_wrappedObject.java&p1=incubator/isis/trunk/framework/runtimes/embedded/src/test/java/org/apache/isis/runtimes/embedded/GivenEmbeddedViewerAndPersistentDomainObject.java&r1=1214077&r2=1215492&rev=1215492&view=diff ============================================================================== --- incubator/isis/trunk/framework/runtimes/embedded/src/test/java/org/apache/isis/runtimes/embedded/GivenEmbeddedViewerAndPersistentDomainObject.java (original) +++ incubator/isis/trunk/framework/runtimes/embedded/src/test/java/org/apache/isis/runtimes/embedded/WrappedFactoryDefaultTest_wrappedObject.java Sat Dec 17 14:14:28 2011 @@ -28,8 +28,10 @@ import org.apache.isis.progmodel.wrapper import org.apache.isis.progmodel.wrapper.applib.HiddenException; import org.apache.isis.progmodel.wrapper.applib.InvalidException; import org.apache.isis.progmodel.wrapper.applib.WrapperFactory; +import org.apache.isis.runtimes.embedded.dom.claim.ClaimRepository; import org.apache.isis.runtimes.embedded.dom.claim.ClaimRepositoryImpl; import org.apache.isis.runtimes.embedded.dom.employee.Employee; +import org.apache.isis.runtimes.embedded.dom.employee.EmployeeRepository; import org.apache.isis.runtimes.embedded.dom.employee.EmployeeRepositoryImpl; import org.apache.isis.runtimes.embedded.internal.PersistenceState; import org.jmock.Expectations; @@ -42,27 +44,37 @@ import org.junit.Test; import org.junit.runner.RunWith; @RunWith(JMock.class) -public class GivenEmbeddedViewerAndPersistentDomainObject { +public class WrappedFactoryDefaultTest_wrappedObject { +// @Rule +// public JMockRule rule = new JMockRule(); + private final Mockery mockery = new JUnit4Mockery(); + // @Mock private EmbeddedContext mockContext; - + // @Mock private AuthenticationSession mockAuthenticationSession; - private IsisMetaModel metaModel; - - private WrapperFactory viewer; - + private EmployeeRepository employeeRepository; + private ClaimRepository claimRepository; + private Employee employeeDO; + private Employee employeeWO; - private Employee employeeVO; + private IsisMetaModel metaModel; + private WrapperFactory wrapperFactory; + @Before public void setUp() { + employeeRepository = new EmployeeRepositoryImpl(); + claimRepository = new ClaimRepositoryImpl(); + employeeDO = new Employee(); employeeDO.setName("Smith"); + employeeDO.setEmployeeRepository(employeeRepository); // would be done by the EmbeddedContext impl mockContext = mockery.mock(EmbeddedContext.class); mockAuthenticationSession = mockery.mock(AuthenticationSession.class); @@ -80,87 +92,85 @@ public class GivenEmbeddedViewerAndPersi } }); - metaModel = new IsisMetaModel(mockContext, EmployeeRepositoryImpl.class, ClaimRepositoryImpl.class); + metaModel = new IsisMetaModel(mockContext, employeeRepository, claimRepository); metaModel.init(); - viewer = metaModel.getViewer(); + //employeeDO.setEmployeeRepository(employeeRepository); + wrapperFactory = metaModel.getWrapperFactory(); + employeeWO = wrapperFactory.wrap(employeeDO); } @Test - public void shouldBeAbleToGetViewOfDomainObject() { - employeeVO = viewer.wrap(employeeDO); - assertThat(employeeVO, is(notNullValue())); + public void shouldWrapDomainObject() { + // then + assertThat(employeeWO, is(notNullValue())); } @Test - public void shouldBeAbleToReadVisibleProperty() { - employeeVO = viewer.wrap(employeeDO); + public void shouldBeAbleToInjectIntoDomainObjects() { - assertThat(employeeVO.getName(), is(employeeDO.getName())); + // given + assertThat(employeeDO.getEmployeeRepository(), is(notNullValue())); + + // then + assertThat(employeeWO.getEmployeeRepository(), is(notNullValue())); + } + + + @Test + public void shouldBeAbleToReadVisibleProperty() { + // then + assertThat(employeeWO.getName(), is(employeeDO.getName())); } @Test(expected = HiddenException.class) public void shouldNotBeAbleToViewHiddenProperty() { - employeeVO = viewer.wrap(employeeDO); - + // given employeeDO.whetherHideName = true; - employeeVO.getName(); // should throw exception + // when + employeeWO.getName(); + // then should throw exception } @Test public void shouldBeAbleToModifyEnabledPropertyUsingSetter() { - employeeVO = viewer.wrap(employeeDO); - - employeeVO.setName("Jones"); + // when + employeeWO.setName("Jones"); + // then assertThat(employeeDO.getName(), is("Jones")); - assertThat(employeeVO.getName(), is(employeeDO.getName())); + assertThat(employeeWO.getName(), is(employeeDO.getName())); } @Test(expected = DisabledException.class) public void shouldNotBeAbleToModifyDisabledProperty() { - employeeVO = viewer.wrap(employeeDO); - + // given employeeDO.reasonDisableName = "sorry, no change allowed"; - employeeVO.setName("Jones"); + // when + employeeWO.setName("Jones"); + // then should throw exception } @Test(expected = UnsupportedOperationException.class) public void shouldNotBeAbleToModifyPropertyUsingModify() { - employeeVO = viewer.wrap(employeeDO); - - employeeVO.modifyName("Jones"); // should throw exception + // when + employeeWO.modifyName("Jones"); + // then should throw exception } @Test(expected = UnsupportedOperationException.class) public void shouldNotBeAbleToModifyPropertyUsingClear() { - employeeVO = viewer.wrap(employeeDO); - - employeeVO.clearName(); // should throw exception + // when + employeeWO.clearName(); + // then should throw exception } @Test(expected = InvalidException.class) public void shouldNotBeAbleToModifyPropertyIfInvalid() { - employeeVO = viewer.wrap(employeeDO); - + // given employeeDO.reasonValidateName = "sorry, invalid data"; - employeeVO.setName("Jones"); - } - - @Test(expected = DisabledException.class) - public void shouldNotBeAbleToModifyPropertyForTransientOnly() { - employeeVO = viewer.wrap(employeeDO); - - employeeVO.setPassword("12345678"); - } - - @Ignore("incomplete") - @Test - public void shouldBeAbleToInjectIntoDomainObjects() { - - // TODO: also ... be able to inject EmbeddedViewer as a service itself, if required. - - employeeVO.setPassword("12345678"); - + // when + employeeWO.setName("Jones"); + // then should throw exception } } Added: incubator/isis/trunk/framework/runtimes/embedded/src/test/java/org/apache/isis/runtimes/embedded/WrappedFactoryDefaultTest_wrappedObject_transient.java URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/runtimes/embedded/src/test/java/org/apache/isis/runtimes/embedded/WrappedFactoryDefaultTest_wrappedObject_transient.java?rev=1215492&view=auto ============================================================================== --- incubator/isis/trunk/framework/runtimes/embedded/src/test/java/org/apache/isis/runtimes/embedded/WrappedFactoryDefaultTest_wrappedObject_transient.java (added) +++ incubator/isis/trunk/framework/runtimes/embedded/src/test/java/org/apache/isis/runtimes/embedded/WrappedFactoryDefaultTest_wrappedObject_transient.java Sat Dec 17 14:14:28 2011 @@ -0,0 +1,123 @@ +/* + * 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.runtimes.embedded; + +import static org.hamcrest.CoreMatchers.is; +import static org.junit.Assert.assertThat; + +import org.apache.isis.core.commons.authentication.AuthenticationSession; +import org.apache.isis.core.testsupport.jmock.JUnitRuleMockery2; +import org.apache.isis.core.testsupport.jmock.JUnitRuleMockery2.Mode; +import org.apache.isis.progmodel.wrapper.applib.DisabledException; +import org.apache.isis.progmodel.wrapper.applib.WrapperFactory; +import org.apache.isis.runtimes.embedded.dom.claim.ClaimRepository; +import org.apache.isis.runtimes.embedded.dom.claim.ClaimRepositoryImpl; +import org.apache.isis.runtimes.embedded.dom.employee.Employee; +import org.apache.isis.runtimes.embedded.dom.employee.EmployeeRepository; +import org.apache.isis.runtimes.embedded.dom.employee.EmployeeRepositoryImpl; +import org.apache.isis.runtimes.embedded.internal.PersistenceState; +import org.jmock.Expectations; +import org.jmock.auto.Mock; +import org.junit.Before; +import org.junit.Rule; +import org.junit.Test; + +public class WrappedFactoryDefaultTest_wrappedObject_transient { + + @Rule + public final JUnitRuleMockery2 mockery = JUnitRuleMockery2.createFor(Mode.INTERFACES_ONLY); + + @Mock + private EmbeddedContext mockContext; + @Mock + private AuthenticationSession mockAuthenticationSession; + + private EmployeeRepository employeeRepository; + private ClaimRepository claimRepository; + + private Employee employeeDO; + private Employee employeeWO; + + private IsisMetaModel metaModel; + private WrapperFactory wrapperFactory; + + + @Before + public void setUp() { + + employeeRepository = new EmployeeRepositoryImpl(); + claimRepository = new ClaimRepositoryImpl(); + + employeeDO = new Employee(); + employeeDO.setName("Smith"); + employeeDO.setEmployeeRepository(employeeRepository); // would be done by the EmbeddedContext impl + } + + + @Test(expected = DisabledException.class) + public void shouldNotBeAbleToModifyPropertyIfPersistent() { + + // given + initializedMetaModelWhereEmployeeIs(PersistenceState.PERSISTENT); + + // when + employeeWO.setPassword("12345678"); + // then should throw exception + } + + + @Test + public void canModifyPropertyIfTransient() { + // given + initializedMetaModelWhereEmployeeIs(PersistenceState.TRANSIENT); + + // when + employeeWO.setPassword("12345678"); + // then be allowed + assertThat(employeeWO.getPassword(), is("12345678")); + } + + + private void initializedMetaModelWhereEmployeeIs(final PersistenceState persistentState) { + mockery.checking(new Expectations() { + { + allowing(mockContext).getPersistenceState(with(any(Employee.class))); + will(returnValue(persistentState)); + } + }); + mockery.checking(new Expectations() { + { + allowing(mockContext).getPersistenceState(with(any(String.class))); + will(returnValue(PersistenceState.STANDALONE)); + + allowing(mockContext).getAuthenticationSession(); + will(returnValue(mockAuthenticationSession)); + } + }); + metaModel = new IsisMetaModel(mockContext, employeeRepository, claimRepository); + metaModel.init(); + + wrapperFactory = metaModel.getWrapperFactory(); + + employeeWO = wrapperFactory.wrap(employeeDO); + } + + +} Modified: incubator/isis/trunk/framework/runtimes/embedded/src/test/java/org/apache/isis/runtimes/embedded/dom/employee/Employee.java URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/runtimes/embedded/src/test/java/org/apache/isis/runtimes/embedded/dom/employee/Employee.java?rev=1215492&r1=1215491&r2=1215492&view=diff ============================================================================== --- incubator/isis/trunk/framework/runtimes/embedded/src/test/java/org/apache/isis/runtimes/embedded/dom/employee/Employee.java (original) +++ incubator/isis/trunk/framework/runtimes/embedded/src/test/java/org/apache/isis/runtimes/embedded/dom/employee/Employee.java Sat Dec 17 14:14:28 2011 @@ -104,4 +104,16 @@ public class Employee extends AbstractDo } // }} + + // {{ injected: EmployeeRepository + private EmployeeRepository employeeRepository; + public EmployeeRepository getEmployeeRepository() { + return employeeRepository; + } + public void setEmployeeRepository(final EmployeeRepository employeeRepository) { + this.employeeRepository = employeeRepository; + } + // }} + + } Modified: incubator/isis/trunk/framework/viewer/wicket/wicket-viewer/src/test/java/org/apache/isis/viewer/wicket/viewer/IsisWicketApplication_Defaults.java URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/wicket/wicket-viewer/src/test/java/org/apache/isis/viewer/wicket/viewer/IsisWicketApplication_Defaults.java?rev=1215492&r1=1215491&r2=1215492&view=diff ============================================================================== --- incubator/isis/trunk/framework/viewer/wicket/wicket-viewer/src/test/java/org/apache/isis/viewer/wicket/viewer/IsisWicketApplication_Defaults.java (original) +++ incubator/isis/trunk/framework/viewer/wicket/wicket-viewer/src/test/java/org/apache/isis/viewer/wicket/viewer/IsisWicketApplication_Defaults.java Sat Dec 17 14:14:28 2011 @@ -25,7 +25,8 @@ import static org.hamcrest.Matchers.null import static org.junit.Assert.assertThat; import org.apache.isis.core.metamodel.adapter.ObjectAdapter; -import org.apache.isis.core.testsupport.jmock.FixtureMockery; +import org.apache.isis.core.testsupport.jmock.JUnitRuleMockery2; +import org.apache.isis.core.testsupport.jmock.JUnitRuleMockery2.Mode; import org.apache.isis.viewer.wicket.model.mementos.ObjectAdapterMemento; import org.apache.isis.viewer.wicket.viewer.integration.wicket.AuthenticatedWebSessionForIsis; import org.apache.isis.viewer.wicket.viewer.integration.wicket.WebRequestCycleForIsis; @@ -34,21 +35,15 @@ import org.apache.wicket.RequestCycle; import org.apache.wicket.Response; import org.apache.wicket.authentication.AuthenticatedWebSession; import org.apache.wicket.protocol.http.WebRequest; -import org.jmock.integration.junit4.JMock; -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; -@RunWith(JMock.class) public class IsisWicketApplication_Defaults { - private final FixtureMockery context = new FixtureMockery() { - { - setImposteriser(ClassImposteriser.INSTANCE); - } - }; + @Rule + public final JUnitRuleMockery2 context = JUnitRuleMockery2.createFor(Mode.INTERFACES_AND_CLASSES); private IsisWicketApplication application; Modified: incubator/isis/trunk/framework/viewer/wicket/wicket-viewer/src/test/java/org/apache/isis/viewer/wicket/viewer/IsisWicketApplication_Pages.java URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/wicket/wicket-viewer/src/test/java/org/apache/isis/viewer/wicket/viewer/IsisWicketApplication_Pages.java?rev=1215492&r1=1215491&r2=1215492&view=diff ============================================================================== --- incubator/isis/trunk/framework/viewer/wicket/wicket-viewer/src/test/java/org/apache/isis/viewer/wicket/viewer/IsisWicketApplication_Pages.java (original) +++ incubator/isis/trunk/framework/viewer/wicket/wicket-viewer/src/test/java/org/apache/isis/viewer/wicket/viewer/IsisWicketApplication_Pages.java Sat Dec 17 14:14:28 2011 @@ -22,7 +22,8 @@ package org.apache.isis.viewer.wicket.vi import static org.hamcrest.Matchers.is; import static org.junit.Assert.assertThat; -import org.apache.isis.core.testsupport.jmock.FixtureMockery; +import org.apache.isis.core.testsupport.jmock.JUnitRuleMockery2; +import org.apache.isis.core.testsupport.jmock.JUnitRuleMockery2.Mode; import org.apache.isis.viewer.wicket.ui.pages.PageClassRegistry; import org.apache.isis.viewer.wicket.ui.pages.PageType; import org.apache.isis.viewer.wicket.ui.pages.home.HomePage; @@ -30,18 +31,14 @@ import org.apache.wicket.Page; import org.apache.wicket.markup.html.WebPage; import org.jmock.Expectations; import org.jmock.integration.junit4.JMock; -import org.jmock.lib.legacy.ClassImposteriser; +import org.junit.Rule; import org.junit.Test; import org.junit.runner.RunWith; -@RunWith(JMock.class) public class IsisWicketApplication_Pages { - private final FixtureMockery context = new FixtureMockery() { - { - setImposteriser(ClassImposteriser.INSTANCE); - } - }; + @Rule + public JUnitRuleMockery2 context = JUnitRuleMockery2.createFor(Mode.INTERFACES_ONLY); private IsisWicketApplication application; Modified: incubator/isis/trunk/framework/viewer/wicket/wicket-viewer/src/test/java/org/apache/isis/viewer/wicket/viewer/IsisWicketApplication_init.java URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/wicket/wicket-viewer/src/test/java/org/apache/isis/viewer/wicket/viewer/IsisWicketApplication_init.java?rev=1215492&r1=1215491&r2=1215492&view=diff ============================================================================== --- incubator/isis/trunk/framework/viewer/wicket/wicket-viewer/src/test/java/org/apache/isis/viewer/wicket/viewer/IsisWicketApplication_init.java (original) +++ incubator/isis/trunk/framework/viewer/wicket/wicket-viewer/src/test/java/org/apache/isis/viewer/wicket/viewer/IsisWicketApplication_init.java Sat Dec 17 14:14:28 2011 @@ -23,16 +23,22 @@ import static org.hamcrest.Matchers.is; import static org.hamcrest.Matchers.notNullValue; import static org.junit.Assert.assertThat; -import org.apache.isis.core.testsupport.jmock.AbstractJMockForInterfacesTest; +import org.apache.isis.core.testsupport.jmock.JUnitRuleMockery2; +import org.apache.isis.core.testsupport.jmock.JUnitRuleMockery2.Mode; import org.apache.wicket.settings.IResourceSettings; import org.apache.wicket.settings.ISecuritySettings; import org.junit.Before; +import org.junit.Ignore; +import org.junit.Rule; import org.junit.Test; import com.google.inject.Injector; -public class IsisWicketApplication_init extends AbstractJMockForInterfacesTest { +public class IsisWicketApplication_init { + @Rule + public JUnitRuleMockery2 context = JUnitRuleMockery2.createFor(Mode.INTERFACES_ONLY); + private IsisWicketApplication application; private ISecuritySettings mockSecuritySettings; @@ -40,10 +46,8 @@ public class IsisWicketApplication_init @Before public void setUp() throws Exception { - mockSecuritySettings = context.mock(ISecuritySettings.class); - mockResourceSettings = context.mock(IResourceSettings.class); - ignoring(mockSecuritySettings); - ignoring(mockResourceSettings); + mockSecuritySettings = context.mockAndIgnoring(ISecuritySettings.class); + mockResourceSettings = context.mockAndIgnoring(IResourceSettings.class); application = new IsisWicketApplication() { private static final long serialVersionUID = 1L; @@ -65,18 +69,21 @@ public class IsisWicketApplication_init }; } + @Ignore @Test public void injectedApplicationCssUrl() { application.init(); assertThat(application.getApplicationCssUrl(), is(notNullValue())); } + @Ignore @Test public void injectedComponentFactoryRegistry() { application.init(); assertThat(application.getComponentFactoryRegistry(), is(notNullValue())); } + @Ignore @Test public void injectedImageCache() { application.init();