public async Task When_Binding_xLoad_Nested_With_ElementStub_LoadCount() { // // This test is the same as When_Binding_xLoad_Nested, but with explicit querying // of ElementStub instances. This prevents the GC from collecting instances, but allows // for counting Load/Unload counts properly. // var SUT = new Binding_xLoad_Nested(); Assert.IsNull(SUT.tb01); Assert.IsNull(SUT.tb02); Assert.IsNull(SUT.tb03); Assert.IsNull(SUT.tb04); Assert.IsNull(SUT.tb05); Assert.IsNull(SUT.tb06); Assert.AreEqual(0, SUT.TopLevelVisiblity1GetCount); Assert.AreEqual(0, SUT.TopLevelVisiblity1SetCount); Assert.AreEqual(0, SUT.TopLevelVisiblity2GetCount); Assert.AreEqual(0, SUT.TopLevelVisiblity2SetCount); Assert.AreEqual(0, SUT.TopLevelVisiblity3GetCount); Assert.AreEqual(0, SUT.TopLevelVisiblity3SetCount); var grid = new Grid(); TestServices.WindowHelper.WindowContent = grid; grid.Children.Add(SUT); Assert.IsNull(SUT.tb01); Assert.IsNull(SUT.tb02); Assert.IsNull(SUT.tb03); Assert.IsNull(SUT.tb04); Assert.IsNull(SUT.tb05); Assert.IsNull(SUT.tb06); Assert.AreEqual(2, SUT.TopLevelVisiblity1GetCount); Assert.AreEqual(0, SUT.TopLevelVisiblity1SetCount); var tb01Stub = SUT.FindFirstChild <ElementStub>(e => e.Name == "tb01") !; var tb02Stub = SUT.FindFirstChild <ElementStub>(e => e.Name == "tb02") !; var panel01Stub = SUT.FindFirstChild <ElementStub>(e => e.Name == "panel01") !; var panel03Stub = SUT.FindFirstChild <ElementStub>(e => e.Name == "panel03") !; var tb01StubChangedCount = 0; tb01Stub.MaterializationChanged += _ => tb01StubChangedCount++; var tb02StubChangedCount = 0; tb02Stub.MaterializationChanged += _ => tb02StubChangedCount++; var panel01StubChangedCount = 0; panel01Stub.MaterializationChanged += _ => panel01StubChangedCount++; var panel03StubChangedCount = 0; panel03Stub.MaterializationChanged += _ => panel03StubChangedCount++; SUT.TopLevelVisiblity1 = true; await Task.Yield(); Assert.IsNotNull(SUT.tb01); Assert.IsNotNull(SUT.tb02); Assert.IsNull(SUT.tb03); Assert.IsNull(SUT.tb04); Assert.IsNull(SUT.tb05); Assert.IsNull(SUT.tb06); Assert.IsFalse(panel03Stub.Load); Assert.AreEqual(1, tb01StubChangedCount); Assert.AreEqual(1, tb02StubChangedCount); Assert.AreEqual(0, panel01StubChangedCount); SUT.TopLevelVisiblity2 = true; await Task.Yield(); Assert.IsNotNull(SUT.tb01); Assert.IsNotNull(SUT.tb02); Assert.IsNotNull(SUT.tb03); Assert.IsNull(SUT.tb04); Assert.IsNotNull(SUT.tb05); Assert.IsNull(SUT.tb06); Assert.IsTrue(panel03Stub.Load); Assert.AreEqual(1, tb01StubChangedCount); Assert.AreEqual(1, tb02StubChangedCount); Assert.AreEqual(1, panel01StubChangedCount); var panel02Stub = SUT.FindFirstChild <ElementStub>(e => e.Name == "panel02") !; var panel02StubChangedCount = 0; panel02Stub.MaterializationChanged += _ => panel02StubChangedCount++; SUT.TopLevelVisiblity3 = true; await Task.Yield(); Assert.IsNotNull(SUT.tb01); Assert.IsNotNull(SUT.tb02); Assert.IsNotNull(SUT.tb03); Assert.IsNotNull(SUT.panel02); Assert.IsNotNull(SUT.tb04); Assert.IsNotNull(SUT.tb05); Assert.IsNotNull(SUT.tb06); Assert.IsTrue(panel03Stub.Load); Assert.AreEqual(1, tb01StubChangedCount); Assert.AreEqual(1, tb02StubChangedCount); Assert.AreEqual(1, panel01StubChangedCount); Assert.AreEqual(1, panel02StubChangedCount); SUT.TopLevelVisiblity3 = false; await Task.Yield(); Assert.IsNotNull(SUT.tb01); Assert.IsNotNull(SUT.tb02); Assert.IsNotNull(SUT.tb03); Assert.IsNotNull(SUT.panel01); await AssertIsNullAsync(() => SUT.panel02); await AssertIsNullAsync(() => SUT.tb04); Assert.IsNotNull(SUT.tb05); await AssertIsNullAsync(() => SUT.tb06); Assert.IsTrue(panel03Stub.Load); Assert.AreEqual(1, tb01StubChangedCount); Assert.AreEqual(1, tb02StubChangedCount); Assert.AreEqual(1, panel01StubChangedCount); Assert.AreEqual(2, panel02StubChangedCount); SUT.TopLevelVisiblity2 = false; await Task.Yield(); Assert.IsNotNull(SUT.tb01); Assert.IsNotNull(SUT.tb02); await AssertIsNullAsync(() => SUT.panel01); await AssertIsNullAsync(() => SUT.tb03); await AssertIsNullAsync(() => SUT.panel02); await AssertIsNullAsync(() => SUT.tb04); await AssertIsNullAsync(() => SUT.tb06); Assert.IsFalse(panel03Stub.Load); await AssertIsNullAsync(() => SUT.panel03); await AssertIsNullAsync(() => SUT.tb05); Assert.AreEqual(1, tb01StubChangedCount); Assert.AreEqual(1, tb02StubChangedCount); Assert.AreEqual(2, panel01StubChangedCount); Assert.AreEqual(2, panel02StubChangedCount); SUT.TopLevelVisiblity1 = false; await Task.Yield(); await AssertIsNullAsync(() => SUT.tb01); await AssertIsNullAsync(() => SUT.tb02); await AssertIsNullAsync(() => SUT.panel01); await AssertIsNullAsync(() => SUT.tb03); await AssertIsNullAsync(() => SUT.panel02); await AssertIsNullAsync(() => SUT.tb04); Assert.IsFalse(panel03Stub.Load); await AssertIsNullAsync(() => SUT.panel03); await AssertIsNullAsync(() => SUT.tb05); await AssertIsNullAsync(() => SUT.tb06); Assert.AreEqual(2, tb01StubChangedCount); Assert.AreEqual(2, tb02StubChangedCount); Assert.AreEqual(2, panel01StubChangedCount); Assert.AreEqual(2, panel02StubChangedCount); }
public async Task When_Binding_xLoad_Nested() { var SUT = new Binding_xLoad_Nested(); Assert.IsNull(SUT.tb01); Assert.IsNull(SUT.tb02); Assert.IsNull(SUT.tb03); Assert.IsNull(SUT.tb04); Assert.IsNull(SUT.tb05); Assert.IsNull(SUT.tb06); Assert.AreEqual(0, SUT.TopLevelVisiblity1GetCount); Assert.AreEqual(0, SUT.TopLevelVisiblity1SetCount); Assert.AreEqual(0, SUT.TopLevelVisiblity2GetCount); Assert.AreEqual(0, SUT.TopLevelVisiblity2SetCount); Assert.AreEqual(0, SUT.TopLevelVisiblity3GetCount); Assert.AreEqual(0, SUT.TopLevelVisiblity3SetCount); var grid = new Grid(); TestServices.WindowHelper.WindowContent = grid; grid.Children.Add(SUT); Assert.IsNull(SUT.tb01); Assert.IsNull(SUT.tb02); Assert.IsNull(SUT.tb03); Assert.IsNull(SUT.tb04); Assert.IsNull(SUT.tb05); Assert.IsNull(SUT.tb06); Assert.AreEqual(2, SUT.TopLevelVisiblity1GetCount); Assert.AreEqual(0, SUT.TopLevelVisiblity1SetCount); SUT.TopLevelVisiblity1 = true; await Task.Yield(); Assert.IsNotNull(SUT.tb01); Assert.IsNotNull(SUT.tb02); Assert.IsNull(SUT.tb03); Assert.IsNull(SUT.tb04); Assert.IsNull(SUT.tb05); Assert.IsNull(SUT.tb06); SUT.TopLevelVisiblity2 = true; await Task.Yield(); Assert.IsNotNull(SUT.tb01); Assert.IsNotNull(SUT.tb02); Assert.IsNotNull(SUT.tb03); Assert.IsNull(SUT.tb04); Assert.IsNotNull(SUT.tb05); Assert.IsNull(SUT.tb06); SUT.TopLevelVisiblity3 = true; Assert.IsNotNull(SUT.tb01); Assert.IsNotNull(SUT.tb02); Assert.IsNotNull(SUT.tb03); Assert.IsNotNull(SUT.panel02); Assert.IsNotNull(SUT.tb04); Assert.IsNotNull(SUT.tb05); Assert.IsNotNull(SUT.tb06); SUT.TopLevelVisiblity3 = false; await Task.Yield(); Assert.IsNotNull(SUT.tb01); Assert.IsNotNull(SUT.tb02); Assert.IsNotNull(SUT.tb03); Assert.IsNotNull(SUT.panel01); await AssertIsNullAsync(() => SUT.panel02); await AssertIsNullAsync(() => SUT.tb04); Assert.IsNotNull(SUT.tb05); await AssertIsNullAsync(() => SUT.tb06); SUT.TopLevelVisiblity2 = false; await Task.Yield(); Assert.IsNotNull(SUT.tb01); Assert.IsNotNull(SUT.tb02); await AssertIsNullAsync(() => SUT.panel01); await AssertIsNullAsync(() => SUT.tb03); await AssertIsNullAsync(() => SUT.panel02); await AssertIsNullAsync(() => SUT.tb04); await AssertIsNullAsync(() => SUT.tb06); await AssertIsNullAsync(() => SUT.panel03); await AssertIsNullAsync(() => SUT.tb05); SUT.TopLevelVisiblity1 = false; await AssertIsNullAsync(() => SUT.tb01); await AssertIsNullAsync(() => SUT.tb02); await AssertIsNullAsync(() => SUT.panel01); await AssertIsNullAsync(() => SUT.tb03); await AssertIsNullAsync(() => SUT.panel02); await AssertIsNullAsync(() => SUT.tb04); await AssertIsNullAsync(() => SUT.panel03); await AssertIsNullAsync(() => SUT.tb05); await AssertIsNullAsync(() => SUT.tb06); }