diff --git a/spring-aspects/src/main/java/org/springframework/mock/staticmock/AbstractMethodMockingControl.aj b/spring-aspects/src/main/java/org/springframework/mock/staticmock/AbstractMethodMockingControl.aj deleted file mode 100644 index fe378642a7..0000000000 --- a/spring-aspects/src/main/java/org/springframework/mock/staticmock/AbstractMethodMockingControl.aj +++ /dev/null @@ -1,254 +0,0 @@ -/* - * Copyright 2002-2014 the original author or authors. - * - * Licensed 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.springframework.mock.staticmock; - -import java.util.Arrays; -import java.util.LinkedList; - -import org.aspectj.lang.annotation.SuppressAjWarnings; - -import org.springframework.util.ObjectUtils; - -/** - * Abstract aspect to enable mocking of methods picked out by a pointcut. - * - *
Sub-aspects must define: - *
Mocking will occur within the call stack of any {@code public} method in a - * class (typically a test class) that is annotated with {@code @MockStaticEntityMethods}. - * Thus mocking is not limited to {@code @Test} methods. Furthermore, new mock - * state will be created for the invocation of each such public method, even when - * the method is invoked from another such public method. - * - *
This aspect also provides static methods to simplify the programming model for - * setting expectations and entering playback mode. - * - *
For scenarios where it would be convenient to programmatically verify - * the recorded expectations or reset the state of the mock, consider - * using combinations of {@link #verify()} and {@link #reset()}. - * - * @author Rod Johnson - * @author Ramnivas Laddad - * @author Sam Brannen - * @see MockStaticEntityMethods - */ -@RequiredTypes("javax.persistence.Entity") -public aspect AnnotationDrivenStaticEntityMockingControl extends AbstractMethodMockingControl { - - /** - * Expect the supplied {@link Object} to be returned by the previous static - * method invocation. - * @see #playback() - */ - public static void expectReturn(Object retVal) { - AnnotationDrivenStaticEntityMockingControl.aspectOf().expectReturnInternal(retVal); - } - - /** - * Expect the supplied {@link Throwable} to be thrown by the previous static - * method invocation. - * @see #playback() - */ - public static void expectThrow(Throwable throwable) { - AnnotationDrivenStaticEntityMockingControl.aspectOf().expectThrowInternal(throwable); - } - - /** - * Stop recording mock expectations and enter playback mode. - * @see #expectReturn(Object) - * @see #expectThrow(Throwable) - */ - public static void playback() { - AnnotationDrivenStaticEntityMockingControl.aspectOf().playbackInternal(); - } - - /** - * Verify that all expectations have been fulfilled. - * @since 4.0.2 - * @see #reset() - */ - public static void verify() { - AnnotationDrivenStaticEntityMockingControl.aspectOf().verifyInternal(); - } - - /** - * Reset the state of the mock and enter recording mode. - * @since 4.0.2 - * @see #verify() - */ - public static void reset() { - AnnotationDrivenStaticEntityMockingControl.aspectOf().resetInternal(); - } - - // Apparently, the following pointcut was originally defined to only match - // methods directly annotated with @Test (in order to allow methods in - // @MockStaticEntityMethods classes to invoke each other without creating a - // new mocking environment); however, this is no longer the case. The current - // pointcut applies to all public methods in @MockStaticEntityMethods classes. - @SuppressAjWarnings("adviceDidNotMatch") - protected pointcut mockStaticsTestMethod() : execution(public * (@MockStaticEntityMethods *).*(..)); - - @SuppressAjWarnings("adviceDidNotMatch") - protected pointcut methodToMock() : execution(public static * (@javax.persistence.Entity *).*(..)); - -} diff --git a/spring-aspects/src/main/java/org/springframework/mock/staticmock/MockStaticEntityMethods.java b/spring-aspects/src/main/java/org/springframework/mock/staticmock/MockStaticEntityMethods.java deleted file mode 100644 index f68b80640b..0000000000 --- a/spring-aspects/src/main/java/org/springframework/mock/staticmock/MockStaticEntityMethods.java +++ /dev/null @@ -1,37 +0,0 @@ -/* - * Copyright 2002-2014 the original author or authors. - * - * Licensed 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.springframework.mock.staticmock; - -import java.lang.annotation.ElementType; -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; -import java.lang.annotation.Target; - -/** - * Annotation to indicate a test class for whose {@code @Test} methods - * static methods on JPA-annotated {@code @Entity} classes should be mocked. - * - *
See {@link AnnotationDrivenStaticEntityMockingControl} for details.
- *
- * @author Rod Johnson
- * @author Sam Brannen
- */
-@Retention(RetentionPolicy.RUNTIME)
-@Target(ElementType.TYPE)
-public @interface MockStaticEntityMethods {
-
-}
diff --git a/spring-aspects/src/test/java/org/springframework/mock/staticmock/AnnotationDrivenStaticEntityMockingControlTests.java b/spring-aspects/src/test/java/org/springframework/mock/staticmock/AnnotationDrivenStaticEntityMockingControlTests.java
deleted file mode 100644
index 1dcf2e442b..0000000000
--- a/spring-aspects/src/test/java/org/springframework/mock/staticmock/AnnotationDrivenStaticEntityMockingControlTests.java
+++ /dev/null
@@ -1,300 +0,0 @@
-/*
- * Copyright 2002-2014 the original author or authors.
- *
- * Licensed 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.springframework.mock.staticmock;
-
-import javax.persistence.PersistenceException;
-
-import org.junit.Test;
-
-import static org.junit.Assert.*;
-import static org.springframework.mock.staticmock.AnnotationDrivenStaticEntityMockingControl.*;
-
-/**
- * Tests for Spring's static entity mocking framework (i.e., @{@link MockStaticEntityMethods}
- * and {@link AnnotationDrivenStaticEntityMockingControl}).
- *
- * @author Rod Johnson
- * @author Ramnivas Laddad
- * @author Sam Brannen
- */
-@MockStaticEntityMethods
-public class AnnotationDrivenStaticEntityMockingControlTests {
-
- @Test
- public void noArgumentMethodInvocationReturnsInt() {
- int expectedCount = 13;
- Person.countPeople();
- expectReturn(expectedCount);
- playback();
- assertEquals(expectedCount, Person.countPeople());
- }
-
- @Test(expected = PersistenceException.class)
- public void noArgumentMethodInvocationThrowsException() {
- Person.countPeople();
- expectThrow(new PersistenceException());
- playback();
- Person.countPeople();
- }
-
- @Test
- public void methodArgumentsMatch() {
- long id = 13;
- Person found = new Person();
- Person.findPerson(id);
- expectReturn(found);
- playback();
- assertEquals(found, Person.findPerson(id));
- }
-
- @Test
- public void longSeriesOfCalls() {
- long id1 = 13;
- long id2 = 24;
- Person found1 = new Person();
- Person.findPerson(id1);
- expectReturn(found1);
- Person found2 = new Person();
- Person.findPerson(id2);
- expectReturn(found2);
- Person.findPerson(id1);
- expectReturn(found1);
- Person.countPeople();
- expectReturn(0);
- playback();
-
- assertEquals(found1, Person.findPerson(id1));
- assertEquals(found2, Person.findPerson(id2));
- assertEquals(found1, Person.findPerson(id1));
- assertEquals(0, Person.countPeople());
- }
-
- @Test(expected = IllegalArgumentException.class)
- public void methodArgumentsDoNotMatchAndReturnsObject() {
- long id = 13;
- Person found = new Person();
- Person.findPerson(id);
- expectReturn(found);
- playback();
- assertEquals(found, Person.findPerson(id + 1));
- }
-
- @Test(expected = IllegalArgumentException.class)
- public void methodArgumentsDoNotMatchAndThrowsException() {
- long id = 13;
- Person found = new Person();
- Person.findPerson(id);
- expectThrow(new PersistenceException());
- playback();
- assertEquals(found, Person.findPerson(id + 1));
- }
-
- @Test
- public void reentrantCallToPrivateMethod() {
- long id = 13;
- Person found = new Person();
- Person.findPerson(id);
- expectReturn(found);
- playback();
- privateMethod(found, id);
- }
-
- private void privateMethod(Person found, long id) {
- assertEquals(found, Person.findPerson(id));
- }
-
- @Test
- public void reentrantCallToPublicMethod() {
- final Long ID = 13L;
- Person.findPerson(ID);
- expectReturn(new Person());
- playback();
- try {
- publicMethod();
- fail("Should have thrown an IllegalStateException");
- }
- catch (IllegalStateException e) {
- String snippet = "Calls have been recorded, but playback state was never reached.";
- assertTrue("Exception message should contain [" + snippet + "]", e.getMessage().contains(snippet));
- }
-
- // Now to keep the mock for "this" method happy:
- Person.findPerson(ID);
- }
-
- public void publicMethod() {
- // At this point, since publicMethod() is a public method in a class
- // annotated with @MockStaticEntityMethods, the current mock state is
- // fresh. In other words, we are again in recording mode. As such, any
- // call to a mocked method will return null. See the implementation of
- // the The reason is that the {@code mockStaticsTestMethod()} advice in
- * {@link AbstractMethodMockingControl} is declared as
- * {@code after() returning} instead of simply {@code after()}.
- *
- * If the aforementioned advice is changed to a generic "after" advice,
- * this test method will fail with an {@link IllegalStateException} (thrown
- * by the mock aspect) instead of the {@link UnsupportedOperationException}
- * thrown by the test method itself.
- */
- @Test(expected = UnsupportedOperationException.class)
- public void mockVerificationDoesNotOccurIfTestFailsWithAnExpectedException() {
- Person.countPeople();
- playback();
- // We intentionally do not execute any of the recorded method invocations in order
- // to demonstrate that mock verification does not occur if an
- // exception is thrown.
- throw new UnsupportedOperationException();
- }
-
- @Test
- public void resetMockWithoutVerficationAndStartOverWithoutRedeclaringExpectations() {
- final Long ID = 13L;
- Person.findPerson(ID);
- expectReturn(new Person());
-
- reset();
-
- Person.findPerson(ID);
- // Omit expectation.
- playback();
-
- try {
- Person.findPerson(ID);
- fail("Should have thrown an IllegalStateException");
- }
- catch (IllegalStateException e) {
- String snippet = "Behavior of Call with signature";
- assertTrue("Exception message should contain [" + snippet + "]", e.getMessage().contains(snippet));
- }
- }
-
- @Test
- public void resetMockWithoutVerificationAndStartOver() {
- final Long ID = 13L;
- Person found = new Person();
- Person.findPerson(ID);
- expectReturn(found);
-
- reset();
-
- // Intentionally use a different ID:
- final long ID_2 = ID + 1;
- Person.findPerson(ID_2);
- expectReturn(found);
- playback();
-
- assertEquals(found, Person.findPerson(ID_2));
- }
-
- @Test
- public void verifyResetAndStartOver() {
- final Long ID_1 = 13L;
- Person found1 = new Person();
- Person.findPerson(ID_1);
- expectReturn(found1);
- playback();
-
- assertEquals(found1, Person.findPerson(ID_1));
- verify();
- reset();
-
- // Intentionally use a different ID:
- final long ID_2 = ID_1 + 1;
- Person found2 = new Person();
- Person.findPerson(ID_2);
- expectReturn(found2);
- playback();
-
- assertEquals(found2, Person.findPerson(ID_2));
- }
-
- @Test
- public void verifyWithTooFewCalls() {
- final Long ID = 13L;
- Person found = new Person();
- Person.findPerson(ID);
- expectReturn(found);
- Person.findPerson(ID);
- expectReturn(found);
- playback();
-
- assertEquals(found, Person.findPerson(ID));
-
- try {
- verify();
- fail("Should have thrown an IllegalStateException");
- }
- catch (IllegalStateException e) {
- assertEquals("Expected 2 calls, but received 1", e.getMessage());
- // Since verify() failed, we need to manually reset so that the test method
- // does not fail.
- reset();
- }
- }
-
-}
diff --git a/spring-aspects/src/test/java/org/springframework/mock/staticmock/Person.java b/spring-aspects/src/test/java/org/springframework/mock/staticmock/Person.java
deleted file mode 100644
index ca98b77f92..0000000000
--- a/spring-aspects/src/test/java/org/springframework/mock/staticmock/Person.java
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
- * Copyright 2002-2012 the original author or authors.
- *
- * Licensed 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.springframework.mock.staticmock;
-
-import javax.persistence.Entity;
-
-@Entity
-public class Person {
-}
-
diff --git a/spring-aspects/src/test/java/org/springframework/mock/staticmock/Person_Roo_Entity.aj b/spring-aspects/src/test/java/org/springframework/mock/staticmock/Person_Roo_Entity.aj
deleted file mode 100644
index a6a62cdbb6..0000000000
--- a/spring-aspects/src/test/java/org/springframework/mock/staticmock/Person_Roo_Entity.aj
+++ /dev/null
@@ -1,100 +0,0 @@
-/*
- * Copyright 2002-2012 the original author or authors.
- *
- * Licensed 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.springframework.mock.staticmock;
-
-privileged aspect Person_Roo_Entity {
-
- @javax.persistence.PersistenceContext
- transient javax.persistence.EntityManager Person.entityManager;
-
- @javax.persistence.Id
- @javax.persistence.GeneratedValue(strategy = javax.persistence.GenerationType.AUTO)
- @javax.persistence.Column(name = "id")
- private java.lang.Long Person.id;
-
- @javax.persistence.Version
- @javax.persistence.Column(name = "version")
- private java.lang.Integer Person.version;
-
- public java.lang.Long Person.getId() {
- return this.id;
- }
-
- public void Person.setId(java.lang.Long id) {
- this.id = id;
- }
-
- public java.lang.Integer Person.getVersion() {
- return this.version;
- }
-
- public void Person.setVersion(java.lang.Integer version) {
- this.version = version;
- }
-
- @org.springframework.transaction.annotation.Transactional
- public void Person.persist() {
- if (this.entityManager == null) throw new IllegalStateException("Entity manager has not been injected (is the Spring Aspects JAR configured as an AJC/AJDT aspects library?)");
- this.entityManager.persist(this);
- }
-
- @org.springframework.transaction.annotation.Transactional
- public void Person.remove() {
- if (this.entityManager == null) throw new IllegalStateException("Entity manager has not been injected (is the Spring Aspects JAR configured as an AJC/AJDT aspects library?)");
- this.entityManager.remove(this);
- }
-
- @org.springframework.transaction.annotation.Transactional
- public void Person.flush() {
- if (this.entityManager == null) throw new IllegalStateException("Entity manager has not been injected (is the Spring Aspects JAR configured as an AJC/AJDT aspects library?)");
- this.entityManager.flush();
- }
-
- @org.springframework.transaction.annotation.Transactional
- public void Person.merge() {
- if (this.entityManager == null) throw new IllegalStateException("Entity manager has not been injected (is the Spring Aspects JAR configured as an AJC/AJDT aspects library?)");
- Person merged = this.entityManager.merge(this);
- this.entityManager.flush();
- this.id = merged.getId();
- }
-
- public static long Person.countPeople() {
- javax.persistence.EntityManager em = new Person().entityManager;
- if (em == null) throw new IllegalStateException("Entity manager has not been injected (is the Spring Aspects JAR configured as an AJC/AJDT aspects library?)");
- return (Long) em.createQuery("select count(o) from Person o").getSingleResult();
- }
-
- public static java.util.List