public void TestFilterChainT1T2T3() { var chain = new FilterChain <string, string, string>(); var data1 = "123"; var data2 = "222"; var data3 = "333"; var isCall = false; chain.Add((in1Data, in2Data, in3Data, next) => { if (in1Data == data1 && in2Data == data2 && in3Data == data3) { isCall = true; } next(in1Data, in2Data, in3Data); }); chain.Add((in1Data, in2Data, in3Data, next) => { next(in1Data, in2Data, in3Data); }); var completeCall = false; chain.Do(data1, data2, data3, (in1, in2, in3) => { completeCall = true; }); Assert.AreEqual(2, chain.FilterList.Length); Assert.AreEqual(true, isCall); Assert.AreEqual(true, completeCall); }
public void RecursiveCallChain() { var chain = new FilterChain <string>(); var data = "123"; var isCall = false; chain.Add((inData, next) => { if (inData == data) { isCall = !isCall; } if (isCall) { chain.Do(data, (in1) => { }); } next(inData); }); chain.Add((in1Data, next) => { next(in1Data); }); var completeCall = false; chain.Do(data, (in1) => { completeCall = true; }); Assert.AreEqual(false, isCall); Assert.AreEqual(true, completeCall); }