aboutsummaryrefslogtreecommitdiff
path: root/src/ProtocolBuffers.Test/ServiceTest.cs
diff options
context:
space:
mode:
authorcsharptest <roger@csharptest.net>2011-10-04 15:11:52 -0500
committerrogerk <devnull@localhost>2011-10-04 15:11:52 -0500
commit6f5bf8d48bda3f415796428f16b33be662a08329 (patch)
tree22f97d56aa5e0cd6c71fecf2ebf3feb7b7fc251e /src/ProtocolBuffers.Test/ServiceTest.cs
parent2622011a5dbd8dc20b9a49e10290047058fddc87 (diff)
downloadprotobuf-6f5bf8d48bda3f415796428f16b33be662a08329.tar.gz
protobuf-6f5bf8d48bda3f415796428f16b33be662a08329.tar.bz2
protobuf-6f5bf8d48bda3f415796428f16b33be662a08329.zip
Removed dependency on Rhino.Mocks
Added CleanAll batch file Added the now rhino-free service test to silverlight
Diffstat (limited to 'src/ProtocolBuffers.Test/ServiceTest.cs')
-rw-r--r--src/ProtocolBuffers.Test/ServiceTest.cs153
1 files changed, 99 insertions, 54 deletions
diff --git a/src/ProtocolBuffers.Test/ServiceTest.cs b/src/ProtocolBuffers.Test/ServiceTest.cs
index 4678ca7b..ee28ca1c 100644
--- a/src/ProtocolBuffers.Test/ServiceTest.cs
+++ b/src/ProtocolBuffers.Test/ServiceTest.cs
@@ -38,9 +38,6 @@ using System;
using Google.ProtocolBuffers.Descriptors;
using Google.ProtocolBuffers.TestProtos;
using Microsoft.VisualStudio.TestTools.UnitTesting;
-using Rhino.Mocks;
-using Rhino.Mocks.Constraints;
-using Is = Rhino.Mocks.Constraints.Is;
namespace Google.ProtocolBuffers
{
@@ -77,10 +74,9 @@ namespace Google.ProtocolBuffers
[TestMethod]
public void CallMethodFoo()
{
- MockRepository mocks = new MockRepository();
FooRequest fooRequest = FooRequest.CreateBuilder().Build();
FooResponse fooResponse = FooResponse.CreateBuilder().Build();
- IRpcController controller = mocks.StrictMock<IRpcController>();
+ IRpcController controller = new RpcTestController();
bool fooCalled = false;
@@ -98,60 +94,18 @@ namespace Google.ProtocolBuffers
doneHandlerCalled = true;
});
- using (mocks.Record())
- {
- // No mock interactions to record
- }
-
service.CallMethod(FooDescriptor, controller, fooRequest, doneHandler);
Assert.IsTrue(doneHandlerCalled);
Assert.IsTrue(fooCalled);
- mocks.VerifyAll();
- }
-
- private delegate void CallFooDelegate(MethodDescriptor descriptor, IRpcController controller,
- IMessage request, IMessage response, Action<IMessage> doneHandler);
-
- /// <summary>
- /// Tests the generated stub handling of Foo. By this stage we're reasonably confident
- /// that the choice between Foo and Bar is arbitrary, hence the lack of a corresponding Bar
- /// test.
- /// </summary>
- [TestMethod]
- [Ignore, System.ComponentModel.Description("Crashes Mono - needs further investigation")]
- public void GeneratedStubFooCall()
- {
- FooRequest fooRequest = FooRequest.CreateBuilder().Build();
- MockRepository mocks = new MockRepository();
- IRpcChannel mockChannel = mocks.StrictMock<IRpcChannel>();
- IRpcController mockController = mocks.StrictMock<IRpcController>();
- TestGenericService service = TestGenericService.CreateStub(mockChannel);
- Action<FooResponse> doneHandler = mocks.StrictMock<Action<FooResponse>>();
-
- using (mocks.Record())
- {
- // Nasty way of mocking out "the channel calls the done handler".
- Expect.Call(() => mockChannel.CallMethod(null, null, null, null, null))
- .IgnoreArguments()
- .Constraints(Is.Same(FooDescriptor), Is.Same(mockController), Is.Same(fooRequest),
- Is.Same(FooResponse.DefaultInstance), Is.Anything())
- .Do((CallFooDelegate) ((p1, p2, p3, response, done) => done(response)));
- doneHandler(FooResponse.DefaultInstance);
- }
-
- service.Foo(mockController, fooRequest, doneHandler);
-
- mocks.VerifyAll();
}
[TestMethod]
public void CallMethodBar()
{
- MockRepository mocks = new MockRepository();
BarRequest barRequest = BarRequest.CreateBuilder().Build();
BarResponse barResponse = BarResponse.CreateBuilder().Build();
- IRpcController controller = mocks.StrictMock<IRpcController>();
+ IRpcController controller = new RpcTestController();
bool barCalled = false;
@@ -169,19 +123,109 @@ namespace Google.ProtocolBuffers
doneHandlerCalled = true;
});
- using (mocks.Record())
- {
- // No mock interactions to record
- }
-
service.CallMethod(BarDescriptor, controller, barRequest, doneHandler);
Assert.IsTrue(doneHandlerCalled);
Assert.IsTrue(barCalled);
- mocks.VerifyAll();
}
+ [TestMethod]
+ public void GeneratedStubFooCall()
+ {
+ IRpcChannel channel = new RpcTestChannel();
+ IRpcController controller = new RpcTestController();
+ TestGenericService service = TestGenericService.CreateStub(channel);
+ FooResponse fooResponse = null;
+ Action<FooResponse> doneHandler = r => fooResponse = r;
+
+ service.Foo(controller, FooRequest.DefaultInstance, doneHandler);
+
+ Assert.IsNotNull(fooResponse);
+ Assert.IsFalse(controller.Failed);
+ }
+
+ [TestMethod]
+ public void GeneratedStubBarCallFails()
+ {
+ IRpcChannel channel = new RpcTestChannel();
+ IRpcController controller = new RpcTestController();
+ TestGenericService service = TestGenericService.CreateStub(channel);
+ BarResponse barResponse = null;
+ Action<BarResponse> doneHandler = r => barResponse = r;
+
+ service.Bar(controller, BarRequest.DefaultInstance, doneHandler);
+
+ Assert.IsNull(barResponse);
+ Assert.IsTrue(controller.Failed);
+ }
+
+ #region RpcTestController
+ private class RpcTestController : IRpcController
+ {
+ public string TestFailedReason { get; set; }
+ public bool TestCancelled { get; set; }
+ public Action<object> TestCancelledCallback { get; set; }
+
+ void IRpcController.Reset()
+ {
+ TestFailedReason = null;
+ TestCancelled = false;
+ TestCancelledCallback = null;
+ }
+
+ bool IRpcController.Failed
+ {
+ get { return TestFailedReason != null; }
+ }
+
+ string IRpcController.ErrorText
+ {
+ get { return TestFailedReason; }
+ }
+
+ void IRpcController.StartCancel()
+ {
+ TestCancelled = true;
+ if (TestCancelledCallback != null)
+ TestCancelledCallback(this);
+ }
+ void IRpcController.SetFailed(string reason)
+ {
+ TestFailedReason = reason;
+ }
+
+ bool IRpcController.IsCanceled()
+ {
+ return TestCancelled;
+ }
+
+ void IRpcController.NotifyOnCancel(Action<object> callback)
+ {
+ TestCancelledCallback = callback;
+ }
+ }
+ #endregion
+ #region RpcTestChannel
+ private class RpcTestChannel : IRpcChannel
+ {
+ public MethodDescriptor TestMethodCalled { get; set; }
+
+ void IRpcChannel.CallMethod(MethodDescriptor method, IRpcController controller, IMessage request, IMessage responsePrototype, Action<IMessage> done)
+ {
+ TestMethodCalled = method;
+ try
+ {
+ done(FooResponse.DefaultInstance);
+ }
+ catch (Exception e)
+ {
+ controller.SetFailed(e.Message);
+ }
+ }
+ }
+ #endregion
+ #region TestServiceImpl
private class TestServiceImpl : TestGenericService
{
private readonly Action<FooRequest, Action<FooResponse>> fooHandler;
@@ -213,5 +257,6 @@ namespace Google.ProtocolBuffers
barHandler(request, done);
}
}
+ #endregion
}
} \ No newline at end of file