|
From: Steve F. <sm...@us...> - 2002-10-21 22:52:41
|
Update of /cvsroot/mockobjects/mockobjects-java/src/core/test/mockobjects/dynamic
In directory usw-pr-cvs1:/tmp/cvs-serv11992/src/core/test/mockobjects/dynamic
Added Files:
Test_Predicates.java Test_Mock.java
Log Message:
moved test classes to a new package
--- NEW FILE: Test_Predicates.java ---
/* Copyright (c) 2002 Nat Pryce. All rights reserved.
*
* Created on February 10, 2002, 11:24 PM
*/
package test.mockobjects.dynamic;
import com.mockobjects.dynamic.*;
import java.util.EventObject;
public class Test_Predicates
extends junit.framework.TestCase
{
class True implements Predicate {
public boolean eval( Object o ) { return true; }
}
class False implements Predicate {
public boolean eval( Object o ) { return false; }
}
/** Creates a new instance of Test_Predicates
*/
public Test_Predicates( String test ) {
super(test);
}
public void testIsNull() {
Predicate p = new IsNull();
assertTrue( p.eval(null) );
assertTrue( !p.eval(new Object()) );
}
public void testIsSame() {
Object o1 = new Object();
Object o2 = new Object();
Predicate p = new IsSame(o1);
assertTrue( p.eval(o1) );
assertTrue( !p.eval(o2) );
}
public void testIsEqual() {
Integer i1 = new Integer(1);
Integer i2 = new Integer(2);
Predicate p = new IsEqual(i1);
assertTrue( p.eval(i1) );
assertTrue( p.eval( new Integer(1) ) );
assertTrue( !p.eval(i2) );
}
public void testIsGreaterThan() {
Predicate p = new IsGreaterThan( new Integer(1) );
assertTrue( !p.eval( new Integer(0) ) );
assertTrue( !p.eval( new Integer(1) ) );
assertTrue( p.eval( new Integer(2) ) );
}
public void testIsLessThan() {
Predicate p = new IsLessThan( new Integer(1) );
assertTrue( p.eval( new Integer(0) ) );
assertTrue( !p.eval( new Integer(1) ) );
assertTrue( !p.eval( new Integer(2) ) );
}
public void testIsAnything() {
Predicate p = new IsAnything();
assertTrue( p.eval(null) );
assertTrue( p.eval( new Object() ) );
}
public void testIsInstanceOf() {
Predicate p = new IsInstanceOf( Number.class );
assertTrue( p.eval( new Integer(1) ) );
assertTrue( p.eval( new Double(1.0) ) );
assertTrue( !p.eval("a string") );
assertTrue( !p.eval(null) );
}
public void testIsNot() {
Predicate p = new IsNot( new True() );
assertTrue( !p.eval(null) );
assertTrue( !p.eval( new Object() ) );
}
public void testAnd() {
Object o = new Object();
assertTrue( new And( new True(), new True() ).eval(o) );
assertTrue( !new And( new False(), new True() ).eval(o) );
assertTrue( !new And( new True(), new False() ).eval(o) );
assertTrue( !new And( new False(), new False() ).eval(o) );
}
public void testOr() {
Object o = new Object();
assertTrue( new Or( new True(), new True() ).eval(o) );
assertTrue( new Or( new False(), new True() ).eval(o) );
assertTrue( new Or( new True(), new False() ).eval(o) );
assertTrue( !new Or( new False(), new False() ).eval(o) );
}
public void testIsEventFrom() {
Object o = new Object();
EventObject ev = new EventObject(o);
EventObject ev2 = new EventObject( new Object() );
Predicate p = new IsEventFrom(o);
assertTrue( p.eval(ev) );
assertTrue( "p should eval to false for an event not from o",
!p.eval(ev2) );
assertTrue( "p should eval to false for objects that are not events",
!p.eval(o) );
}
private static class DerivedEvent extends EventObject {
public DerivedEvent( Object source ) {
super(source);
}
}
public void testIsEventSubtypeFrom() {
Object o = new Object();
DerivedEvent good_ev = new DerivedEvent(o);
DerivedEvent wrong_source = new DerivedEvent(new Object());
EventObject wrong_type = new EventObject(o);
EventObject wrong_source_and_type = new EventObject(new Object());
Predicate p = new IsEventFrom( DerivedEvent.class, o );
assertTrue( p.eval(good_ev) );
assertTrue( "p should eval to false for an event not from o",
!p.eval(wrong_source) );
assertTrue( "p should eval to false for an event of the wrong type",
!p.eval(wrong_type) );
assertTrue( "p should eval to false for an event of the wrong type "+
"and from the wrong source",
!p.eval(wrong_source_and_type) );
}
public void testIsCloseTo() {
Predicate p = new IsCloseTo( 1.0, 0.5 );
assertTrue( p.eval( new Double(1.0) ) );
assertTrue( p.eval( new Double(0.5) ) );
assertTrue( p.eval( new Double(1.5) ) );
assertTrue( p.eval( new Float(1.0) ) );
assertTrue( p.eval( new Integer(1) ) );
assertTrue( "number too large", !p.eval( new Double(2.0) ) );
assertTrue( "number too small", !p.eval( new Double(0.0) ) );
try {
p.eval("wrong type");
fail("ClassCastException expected for wrong type of argument");
}
catch( ClassCastException ex ) {
// expected
}
}
}
--- NEW FILE: Test_Mock.java ---
/* Copyright (c) 2002 Nat Pryce. All rights reserved.
*
* Created on February 11, 2002, 12:34 AM
*/
package test.mockobjects.dynamic;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
import junit.framework.AssertionFailedError;
import com.mockobjects.dynamic.*;
public class Test_Mock
extends junit.framework.TestCase
{
public static interface ExampleInterface {
Object noArgs();
void voidMethod();
String objectTypes( Integer i );
int primitiveTypes( int x, int y );
void sideEffect( StringBuffer buf );
// These are used to test default return values
boolean booleanResult();
byte byteResult();
char charResult();
short shortResult();
int intResult();
long longResult();
float floatResult();
double doubleResult();
String stringResult();
// Used to test ordered calls
void first();
void second();
}
public static class DerivedMock
extends Mock
{
DerivedMock( String name ) {
super(name);
}
public boolean was_called = false;
public void voidMethod() {
this.was_called = true;
}
public String objectTypes( Integer n ) throws Throwable {
Method method = getClass().getMethod("objectTypes",
new Class[] { Integer.class } );
return (String)mockCall( method , new Object[]{n} );
}
};
private Mock _mock;
private ExampleInterface _interface;
public Test_Mock( String test ) {
super(test);
}
public void setUp() {
_mock = new Mock();
_interface =
(ExampleInterface)_mock.createInterface( ExampleInterface.class );
}
public void tearDown() {
_mock = null;
_interface = null;
}
public void testNewMockVerifies() {
_mock.verify();
}
public void testNamedMock() {
Mock mock = new Mock("Name");
assertEquals( "Name", mock.toString() );
}
public void testMockCallToNoArgMethod() {
Object result = new Object();
_mock.expectReturn( "noArgs", Mock.NO_ARGS, result );
assertSame( result, _interface.noArgs() );
_mock.verify();
}
public void testMockCallToVoidMethod() {
_mock.expectVoid( "voidMethod", Mock.NO_ARGS );
_interface.voidMethod();
_mock.verify();
}
public void testObjectTypes() {
_mock.expectReturn( "objectTypes",
new Predicate[] { new IsEqual( new Integer(1) ) },
"1" );
assertEquals( "1", _interface.objectTypes( new Integer(1) ) );
_mock.verify();
}
public void testPrimitiveTypes() {
_mock.expectReturn( "primitiveTypes",
new Predicate[] { new IsEqual( new Integer(2) ),
new IsEqual( new Integer(3) ) },
new Integer(6) );
assertEquals( 6, _interface.primitiveTypes(2,3) );
_mock.verify();
}
public void testLaterExpectationsOverrideEarlierExpectations() {
Object result1 = new Object();
Object result2 = new Object();
_mock.expectReturn( "noArgs", Mock.NO_ARGS, result1 );
_mock.expectReturn( "noArgs", Mock.NO_ARGS, result2 );
assertSame( result2, _interface.noArgs() );
assertSame( result2, _interface.noArgs() );
_mock.verify();
}
public void testThrow() {
_mock.expectThrow( "primitiveTypes",
new Predicate[] { new IsEqual( new Integer(2) ),
new IsEqual( new Integer(3) ) },
new ArithmeticException("message") );
try {
_interface.primitiveTypes( 2, 3 );
fail( "expected ArithmeticException to be thrown" );
}
catch( ArithmeticException ex ) {
assertEquals( "message", ex.getMessage() );
}
_mock.verify();
}
public void testExpectCallWithSideEffects() {
final StringBuffer buf = new StringBuffer();
_mock.expect(
new ExpectedCall( "sideEffect",
new Predicate[]{ new IsSame(buf) } )
{
public Object eval( Object[] args ) throws Throwable {
buf.append("hello");
return null;
}
} );
_interface.sideEffect( buf );
assertEquals( "hello", buf.toString() );
_mock.verify();
}
public void testNotAllMethodsCalled() {
_mock.expectVoid( "noArgs", Mock.NO_ARGS );
try {
_mock.verify();
}
catch( AssertionFailedError ex ) {
return;
}
fail( "verify did not fail when all expected methods were not called" );
}
public void testCalledExpectationClearedBySubsequentExpecation() {
_mock.expectVoid( "noArgs", Mock.NO_ARGS );
_interface.noArgs();
_mock.expectVoid( "noArgs", Mock.NO_ARGS );
try {
_mock.verify();
}
catch( AssertionFailedError ex ) {
return;
}
fail( "verify did not fail when all expected methods were not called" );
}
public void testUnexpectedMethodThrowsWhenStrict() {
_mock.setStrict(true);
try {
_interface.voidMethod();
}
catch( AssertionFailedError ex ) {
return;
}
fail( "strict mock did not fail when unexpected method was called" );
}
public void testUnexpectedMethodDoesNotThrowWhenNotStrict() {
try {
_interface.voidMethod();
}
catch( AssertionFailedError ex ) {
fail( "unstrict mock failed when unexpected method was called" );
}
}
public void testDefaultResultFromUnexpectedCalls() {
assertEquals( false, _interface.booleanResult() );
assertEquals( 0, _interface.byteResult() );
assertEquals( '\0', _interface.charResult() );
assertEquals( 0, _interface.shortResult() );
assertEquals( 0, _interface.intResult() );
assertEquals( 0L, _interface.longResult() );
assertEquals( 0.0f, _interface.floatResult(), 0.0f );
assertEquals( 0.0d, _interface.doubleResult(), 0.0d );
assertEquals( "", _interface.stringResult() );
}
public void testSetupDefaultResult() {
_mock.setupDefaultResult( boolean.class, new Boolean(true) );
_mock.setupDefaultResult( byte.class, new Byte((byte)1) );
_mock.setupDefaultResult( char.class, new Character( '2' ) );
_mock.setupDefaultResult( short.class, new Short( (short)3 ) );
_mock.setupDefaultResult( int.class, new Integer(4) );
_mock.setupDefaultResult( long.class, new Long(5L) );
_mock.setupDefaultResult( float.class, new Float(6.0f) );
_mock.setupDefaultResult( double.class, new Double(7.0d) );
_mock.setupDefaultResult( String.class, "8" );
assertEquals( true, _interface.booleanResult() );
assertEquals( (byte)1, _interface.byteResult() );
assertEquals( '2', _interface.charResult() );
assertEquals( 3, _interface.shortResult() );
assertEquals( 4, _interface.intResult() );
assertEquals( 5L, _interface.longResult() );
assertEquals( 6.0f, _interface.floatResult(), 0.0f );
assertEquals( 7.0d, _interface.doubleResult(), 0.0d );
assertEquals( "8", _interface.stringResult() );
}
public void testWrongNumberOfArguments() {
Predicate p = new IsEqual( new Integer(2) );
Predicate q = new IsAnything();
_mock.expectReturn( "objectTypes", new Predicate[]{p,q}, "2" );
try {
_interface.objectTypes( new Integer(1) );
}
catch( AssertionFailedError ex ) {
return;
}
fail( "mock did not fail when wrong number of arguments passed" );
}
public void testArgumentsPassedToNoArgMethod() {
Predicate p = new IsAnything();
_mock.expectVoid( "voidMethod", new Predicate[]{p} );
try {
_interface.voidMethod();
}
catch( AssertionFailedError ex ) {
return;
}
fail( "mock did not fail when arguments passed to void method" );
}
public void testPredicateFailure() {
Predicate p = new IsEqual( new Integer(2) );
_mock.expectReturn( "objectTypes", new Predicate[]{p}, "2" );
assertTrue( !p.eval( new Integer(1) ) );
try {
_interface.objectTypes( new Integer(1) );
}
catch( AssertionFailedError ex ) {
return;
}
fail( "mock did not fail when predicate returned false" );
}
public void testErrorWhenOrderedMethodsCalledInWrongOrder() {
_mock.expectVoid( "first", Mock.NO_ARGS );
_mock.expectVoid( "second", Mock.NO_ARGS );
_mock.order( "first", "second" );
try {
_interface.second();
}
catch( AssertionFailedError ex ) {
return;
}
fail( "mock did not enforce order of calls" );
}
public void testExpectNotCalled() {
_mock.expectNotCalled("noArgs");
try {
_interface.noArgs();
}
catch( AssertionFailedError ex ) {
return;
}
fail("AssertionFailedError expected");
}
public void testExpectNotCalledClearedBySubsequentExpectation() {
_mock.expectNotCalled("noArgs");
_mock.expectVoid( "noArgs", Mock.NO_ARGS );
_interface.noArgs();
_mock.verify();
}
public void testSetupResult() {
final String RESULT = "result";
_mock.setupResult( "objectTypes", RESULT );
assertEquals( RESULT, _interface.objectTypes(null) );
assertEquals( RESULT, _interface.objectTypes(new Integer(0)) );
_mock.verify();
}
public void testSetupThrow() {
_mock.setupThrow( "objectTypes", new IllegalArgumentException() );
try {
_interface.objectTypes(null);
fail("expected IllegalArgumentException");
}
catch( IllegalArgumentException ex ) {
// expected
}
try {
_interface.objectTypes(new Integer(0));
fail("expected IllegalArgumentException");
}
catch( IllegalArgumentException ex ) {
// expected
}
_mock.verify();
}
public void testSetupCallWithSideEffect() {
final StringBuffer buf = new StringBuffer();
_mock.setup( new ExpectedCall("sideEffect") {
public Object eval( Object[] args ) throws Throwable {
buf.append("hello");
return null;
}
} );
_interface.sideEffect( buf );
assertEquals( "hello", buf.toString() );
_mock.verify();
}
public void testSetupResultDoesNotRequireCall() {
_mock.setupResult( "objectTypes", "result" );
_mock.verify();
}
public void testSetupThrowDoesNotRequireCall() {
_mock.setupThrow( "objectTypes", new RuntimeException() );
_mock.verify();
}
public void testSetupCallWithSideEffectDoesNotRequireCall() {
_mock.setup( new ExpectedCall("sideEffect") {
public Object eval( Object[] args ) throws Throwable {
throw new RuntimeException("should not be called");
}
} );
_mock.verify();
}
public void testNoErrorWhenOrderedMethodsCalledInCorrectOrder() {
_mock.expectVoid( "first", Mock.NO_ARGS );
_mock.expectVoid( "second", Mock.NO_ARGS );
_mock.order( "first", "second" );
_interface.first();
_interface.second();
}
public void testDerivedMockClass() {
DerivedMock mock = new DerivedMock("Derived");
ExampleInterface i = (ExampleInterface)Proxy.newProxyInstance(
getClass().getClassLoader(),
new Class[]{ ExampleInterface.class },
mock );
i.voidMethod();
assertTrue( "mock method not called on derived class",
mock.was_called );
mock.verify();
}
public void testDerivedClassPassingInvocationToMockCall() {
DerivedMock mock = new DerivedMock("Derived");
ExampleInterface i = (ExampleInterface)Proxy.newProxyInstance(
getClass().getClassLoader(),
new Class[]{ ExampleInterface.class },
mock );
mock.expectReturn( "objectTypes",
new Predicate[] { new IsAnything() },
"result" );
assertEquals( "result", i.objectTypes( new Integer(1) ) );
mock.verify();
}
}
|