public void Dispose_causes_handler_not_to_be_called() { var doc = new DomDocument(); var attr = doc.AppendElement("hello").AppendAttribute("a"); var evts = new TestActionDispatcher <DomAttributeEvent>(_ => {}); var observer = doc.ObserveAttributes(doc.DocumentElement, evts.Invoke); observer.Dispose(); attr.Value = "changed"; Assert.Equal(0, evts.CallCount); }
public void ObserveAttributes_should_invoke_optimized_registration() { var doc = new DomDocument(); doc.AppendElement("hello").AppendElement("world"); var evts = new TestActionDispatcher <DomAttributeEvent>(_ => {}); var observer = doc.ObserveAttributes(doc.DocumentElement, "l", evts.Invoke, DomScope.TargetAndDescendants); doc.QuerySelectorAll("*").Attribute("l", "k"); Assert.Equal(2, evts.CallCount); Assert.Equal("hello", evts.ArgsForCall(0).Target.LocalName); Assert.Equal("world", evts.ArgsForCall(1).Target.LocalName); Assert.Equal("l", evts.ArgsForCall(1).LocalName); }
public void ObserveAttributes_callback_should_be_invoked_at_time_after_attribute_value_has_changed(Action <DomElement> op) { var doc = new DomDocument(); var element = doc.AppendElement("e"); element.Attribute("attr", "oldValue"); string attributeValueInCallback = null; doc.ObserveAttributes(element, e => { attributeValueInCallback = element.Attribute("attr"); }); op(element); Assert.NotEqual("oldValue", attributeValueInCallback); }
public void ObserveAttributes_callback_should_be_invoked_on_removing_an_attribute(Action <DomElement> callback) { var doc = new DomDocument().LoadXml(@" <root attr='root value' /> ".Replace("'", "\"")); var element = doc.QuerySelector("root"); var evts = new TestActionDispatcher <DomAttributeEvent>(_ => {}); doc.ObserveAttributes(element, evts.Invoke); callback(element); Assert.Equal(1, evts.CallCount); Assert.Equal("root value", evts.ArgsForCall(0).OldValue); Assert.Null(evts.ArgsForCall(0).Value); Assert.Equal("attr", evts.ArgsForCall(0).LocalName); }