public void Choice_OnChangeOnly_Or_Normal__OnNotify() { CObserverSubject <Test_Args> pObserverSubject = new CObserverSubject <Test_Args>(); _TestValue = 0; Assert.IsTrue(_TestValue == 0); pObserverSubject.DoRegist_Listener(AddField_HasParam_WhenApplyOnly, true); // 두번째 인자가 True일때만 계산되는 이벤트를 리스너로 등록합니다. pObserverSubject.DoNotify(new Test_Args(5, false)); // 두번째 인자가 False이기 때문에 적용되지 않습니다. Assert.IsTrue(_TestValue == 0); pObserverSubject.DoNotify(new Test_Args(5, true)); // 두번째 인자가 True이기 때문에 적용됩니다. Assert.IsTrue(_TestValue == 5); }
public void HasMultipleObserver_And_GenericParams() { CObserverSubject <int> pObserverSubject = new CObserverSubject <int>(); _TestValue = 0; pObserverSubject.DoRegist_Listener(AddField_HasParam); Assert.IsTrue(_TestValue == 0); pObserverSubject.DoNotify(5); Assert.IsTrue(_TestValue == 5); pObserverSubject.DoRegist_Listener(MinusField_HasParam); pObserverSubject.DoNotify(6); Assert.IsTrue(_TestValue == 5); // Add 6, Minus 6을 했기 때문에 원본값 그대로입니다. pObserverSubject.DoRemove_Listener(AddField_HasParam); pObserverSubject.DoNotify(5); Assert.IsTrue(_TestValue == 0); }
public void Regist_And_InstantNotify() { CObserverSubject <int> pObserverSubject = new CObserverSubject <int>(); _TestValue = 0; Assert.IsTrue(_TestValue == 0); pObserverSubject.DoNotify(5); Assert.IsTrue(_TestValue == 0); // 등록되있는 Listener가 없기 때문에 변동이 없습니다. pObserverSubject.DoRegist_Listener(AddField_HasParam, true); // 뒤늦게 요청했을 때, 2번째 인자가 true면 최신값을 받을 수 있습니다. Assert.IsTrue(_TestValue == 5); // 최신값을 받았기 때문에 값이 변했습니다. pObserverSubject.DoRemove_Listener(AddField_HasParam); // 이때 Add를 지웠기 때문에 이제 리스너가 없어 TestValue는 변하지 않습니다. pObserverSubject.DoNotify(6); Assert.IsTrue(_TestValue == 5); pObserverSubject.DoRegist_Listener(AddField_HasParam); // 뒤늦게 요청했을 때 2번째 인자를 안넣으면 값은 갱신되지 않습니다. Assert.IsTrue(_TestValue == 5); pObserverSubject.DoNotify(-5); // AddField Listener가 하나 존재하기 때문에, 값은 0이 됩니다. Assert.IsTrue(_TestValue == 0); }
public void HasGenericParams() { CObserverSubject <int> pObserverSubject = new CObserverSubject <int>(); _TestValue = 0; pObserverSubject.DoRegist_Listener(AddField_HasParam); pObserverSubject.DoRegist_Listener(AddField_HasParam); // Listener는 중복되지 않습니다. Assert.IsTrue(_TestValue == 0); pObserverSubject.DoNotify(5); Assert.IsTrue(_TestValue == 5); }
public void HasMultipleObserver() { CObserverSubject pObserverSubject = new CObserverSubject(); _TestValue = 0; pObserverSubject.DoRegist_Listener(AddField_1); // _TestValue = 1 pObserverSubject.Subscribe += AddField_2; // _TestValue = 1 + 2 = 3 Assert.IsTrue(_TestValue == 0); pObserverSubject.DoNotify(); Assert.IsTrue(_TestValue == 3); }
public void IsNotOverlap_Observer() { CObserverSubject pObserverSubject = new CObserverSubject(); _TestValue = 0; pObserverSubject.DoRegist_Listener(AddField_1); // _TestValue = 1 pObserverSubject.DoRegist_Listener(AddField_1); // 등록 되있으면 _TestValue = 2, 등록이 안되었기 때문에 _TestValue = 1 Assert.IsTrue(_TestValue == 0); pObserverSubject.DoNotify(); Assert.IsTrue(_TestValue == 1); }