class ConcreteHandler : public Handler<Rin, Rout, Win, Wout> {
typedef typename Handler<Rin, Rout, Win, Wout>::Context Context;
public:
- void read(Context* ctx, Rin msg) {}
- Future<void> write(Context* ctx, Win msg) { return makeFuture(); }
+ void read(Context* ctx, Rin msg) override {}
+ Future<void> write(Context* ctx, Win msg) override { return makeFuture(); }
};
typedef HandlerAdapter<std::string, std::string> StringHandler;
.finalize());
}
}
+
+TEST(Pipeline, RemovePointer) {
+ IntHandler handler1, handler2;
+ EXPECT_CALL(handler1, attachPipeline(_));
+ EXPECT_CALL(handler2, attachPipeline(_));
+ Pipeline<int, int> pipeline;
+ pipeline
+ .addBack(&handler1)
+ .addBack(&handler2)
+ .finalize();
+
+ EXPECT_CALL(handler1, detachPipeline(_));
+ pipeline
+ .remove(&handler1)
+ .finalize();
+
+ EXPECT_CALL(handler2, read_(_, _));
+ pipeline.read(1);
+
+ EXPECT_CALL(handler2, detachPipeline(_));
+}
+
+TEST(Pipeline, RemoveFront) {
+ IntHandler handler1, handler2;
+ EXPECT_CALL(handler1, attachPipeline(_));
+ EXPECT_CALL(handler2, attachPipeline(_));
+ Pipeline<int, int> pipeline;
+ pipeline
+ .addBack(&handler1)
+ .addBack(&handler2)
+ .finalize();
+
+ EXPECT_CALL(handler1, detachPipeline(_));
+ pipeline
+ .removeFront()
+ .finalize();
+
+ EXPECT_CALL(handler2, read_(_, _));
+ pipeline.read(1);
+
+ EXPECT_CALL(handler2, detachPipeline(_));
+}
+
+TEST(Pipeline, RemoveBack) {
+ IntHandler handler1, handler2;
+ EXPECT_CALL(handler1, attachPipeline(_));
+ EXPECT_CALL(handler2, attachPipeline(_));
+ Pipeline<int, int> pipeline;
+ pipeline
+ .addBack(&handler1)
+ .addBack(&handler2)
+ .finalize();
+
+ EXPECT_CALL(handler2, detachPipeline(_));
+ pipeline
+ .removeBack()
+ .finalize();
+
+ EXPECT_CALL(handler1, read_(_, _));
+ pipeline.read(1);
+
+ EXPECT_CALL(handler1, detachPipeline(_));
+}
+
+TEST(Pipeline, RemoveType) {
+ IntHandler handler1;
+ IntHandler2 handler2;
+ EXPECT_CALL(handler1, attachPipeline(_));
+ EXPECT_CALL(handler2, attachPipeline(_));
+ Pipeline<int, int> pipeline;
+ pipeline
+ .addBack(&handler1)
+ .addBack(&handler2)
+ .finalize();
+
+ EXPECT_CALL(handler1, detachPipeline(_));
+ pipeline
+ .remove<IntHandler>()
+ .finalize();
+
+ EXPECT_CALL(handler2, read_(_, _));
+ pipeline.read(1);
+
+ EXPECT_CALL(handler2, detachPipeline(_));
+}