public void ExecuteXAttributeVariation(XAttribute[] toAdd, XAttribute contextNode) { IEnumerable<XAttribute> allNodes, toAddList = toAdd.OfType<XAttribute>(); XElement xElem = contextNode == null ? new XElement("root") : new XElement("root", contextNode); XElement xElemOriginal = new XElement(xElem); using (UndoManager undo = new UndoManager(xElem)) { undo.Group(); using (EventsHelper elemHelper = new EventsHelper(xElem)) { xElem.Add(toAdd); allNodes = contextNode == null ? xElem.Attributes() : xElem.Attributes().Skip(1); Assert.True(toAddList.SequenceEqual(allNodes, Helpers.MyAttributeComparer), "Attributes not added correctly!"); elemHelper.Verify(XObjectChange.Add, toAdd); } undo.Undo(); Assert.True(xElem.Nodes().SequenceEqual(xElemOriginal.Nodes(), XNode.EqualityComparer), "Undo did not work!"); Assert.True(xElem.Attributes().EqualsAllAttributes(xElemOriginal.Attributes(), Helpers.MyAttributeComparer), "Undo did not work!"); } }