blob: 7b6b08222d2465dca3114b6a7ecc666c2ecb6287 [file] [log] [blame]
package groovy.mock.interceptor
import junit.framework.AssertionFailedError
/**
Testing Groovy Mock support for single calls to the Collaborator with
no, one, multiple, or arbitrary arguments, exceptions and failures.
@author Dierk Koenig
*/
class MockSingleCallTest extends GroovyTestCase {
MockFor mocker
void setUp() {
mocker = new MockFor(Collaborator.class)
}
void testMockGetter() {
mocker.demand.getFoo { "foo" }
mocker.demand.getFoo { "foobar" }
mocker.use {
assertEquals "foo", new Caller().callFoo1()
assertEquals "foobar", new Caller().callFoo2()
}
}
void testMockSetter() {
def result = null
mocker.demand.setBar { result = it }
mocker.demand.setBar { result = it }
mocker.use {
new Caller().setBar1()
assertEquals result, "bar1"
new Caller().setBar2()
assertEquals result, "bar2"
}
}
void testSingleCallNoArgs() {
mocker.demand.one { 1 }
mocker.use {
assertEquals 1, new Caller().collaborateOne()
}
}
void testSingleCallOneArg() {
mocker.demand.one { arg -> return arg }
mocker.use {
assertEquals 2, new Caller().collaborateOne(2)
}
}
void testSingleCallTwoArgs() {
mocker.demand.one { one, two -> return one + two }
mocker.use {
assertEquals 2, new Caller().collaborateOne(1, 1)
}
}
void testNoSingleCallTwoArgsWhenNoArgDemanded() {
mocker.demand.one { 2 }
mocker.use {
shouldFail {
assertEquals 2, new Caller().collaborateOne(1, 1)
}
}
}
void testSingleCallTwoArgsWhenArbitraryArgsDemanded() {
mocker.demand.one { Object[] arg -> 2 }
mocker.use {
assertEquals 2, new Caller().collaborateOne(1, 1)
}
}
void testSingleCallTwoArgsWhenDefaultArgsDemanded() {
mocker.demand.one { one=null, two=null -> 2 }
mocker.use {
assertEquals 2, new Caller().collaborateOne(1, 1)
}
}
void testVerifyFailsIfOneDemandedButNoneExcecuted() {
mocker.demand.one { 1 }
def msg = shouldFail(AssertionFailedError.class) {
mocker.use {
// no call
}
}
assert msg =~ /0.*1..1.*never called/
}
void testSingleCallExceptionDemanded() {
mocker.demand.one { throw new IllegalArgumentException() }
mocker.use {
//shouldFail(IllegalArgumentException.class) {
shouldFail { // todo: should fail with IllegalArgumentException instead of GroovyRuntimeException
new Caller().collaborateOne()
}
}
}
void testSingleCallFailDemanded() {
mocker.demand.one { fail 'just kidding' }
mocker.use {
shouldFail() { new Caller().collaborateOne() }
}
}
void testJavaCall() {
mocker = new MockFor(String.class)
mocker.demand.toString { 'groovy' }
mocker.use {
assertEquals 'groovy', new Caller().collaborateJava()
}
}
}