public void ContentIsSameAcrossInstances() { string content = ObjectModelHelpers.CleanupFileContents(@" <Project xmlns='msbuildnamespace' ToolsVersion='msbuilddefaulttoolsversion'> <ItemGroup> Item group content </ItemGroup> </Project> "); string path = FileUtilities.GetTemporaryFile(); try { File.WriteAllText(path, content); ProjectStringCache cache = new ProjectStringCache(); XmlDocumentWithLocation document1 = new XmlDocumentWithLocation(); document1.StringCache = cache; document1.Load(path); XmlDocumentWithLocation document2 = new XmlDocumentWithLocation(); document2.StringCache = cache; document2.Load(path); XmlNodeList nodes1 = document1.GetElementsByTagName("ItemGroup"); XmlNodeList nodes2 = document2.GetElementsByTagName("ItemGroup"); Assert.Equal(1, nodes1.Count); Assert.Equal(1, nodes2.Count); XmlNode node1 = nodes1[0].FirstChild; XmlNode node2 = nodes2[0].FirstChild; Assert.NotNull(node1); Assert.NotNull(node2); Assert.NotSame(node1, node2); Assert.Same(node1.Value, node2.Value); } finally { File.Delete(path); } }
public void ContentCanBeModified() { string content = ObjectModelHelpers.CleanupFileContents(@" <Project xmlns='msbuildnamespace' ToolsVersion='msbuilddefaulttoolsversion'> <ItemGroup attr1='attr1value'> Item group content </ItemGroup> </Project> "); string path = FileUtilities.GetTemporaryFile(); try { File.WriteAllText(path, content); ProjectStringCache cache = new ProjectStringCache(); XmlDocumentWithLocation document1 = new XmlDocumentWithLocation(); document1.StringCache = cache; document1.Load(path); XmlDocumentWithLocation document2 = new XmlDocumentWithLocation(); document2.StringCache = cache; document2.Load(path); string outerXml1 = document1.OuterXml; string outerXml2 = document2.OuterXml; Assert.Equal(outerXml1, outerXml2); XmlNodeList nodes1 = document1.GetElementsByTagName("ItemGroup"); XmlNodeList nodes2 = document2.GetElementsByTagName("ItemGroup"); Assert.Equal(1, nodes1.Count); Assert.Equal(1, nodes2.Count); XmlNode node1 = nodes1[0]; XmlNode node2 = nodes2[0]; Assert.NotNull(node1); Assert.NotNull(node2); Assert.NotSame(node1, node2); Assert.Single(node1.Attributes); Assert.Single(node2.Attributes); Assert.Same(node1.Attributes[0].Value, node2.Attributes[0].Value); node2.Attributes[0].Value = "attr1value"; Assert.Equal(node1.Attributes[0].Value, node2.Attributes[0].Value); Assert.NotSame(node1.Attributes[0].Value, node2.Attributes[0].Value); node1 = nodes1[0].FirstChild; node2 = nodes2[0].FirstChild; Assert.NotSame(node1, node2); Assert.Same(node1.Value, node2.Value); XmlText newText = document2.CreateTextNode("New Value"); XmlNode parent = node2.ParentNode; parent.ReplaceChild(newText, node2); Assert.NotEqual(outerXml1, document2.OuterXml); } finally { File.Delete(path); } }
public void ContentIsSameAcrossInstances() { string content = ObjectModelHelpers.CleanupFileContents(@" <Project xmlns='msbuildnamespace' ToolsVersion='msbuilddefaulttoolsversion'> <ItemGroup> Item group content </ItemGroup> </Project> "); string path = FileUtilities.GetTemporaryFile(); try { File.WriteAllText(path, content); ProjectStringCache cache = new ProjectStringCache(); XmlDocumentWithLocation document1 = new XmlDocumentWithLocation(); document1.StringCache = cache; #if FEATURE_XML_LOADPATH document1.Load(path); #else var xmlReadSettings = new XmlReaderSettings { DtdProcessing = DtdProcessing.Ignore }; using (XmlReader xmlReader = XmlReader.Create(path, xmlReadSettings)) { document1.Load(xmlReader); } #endif XmlDocumentWithLocation document2 = new XmlDocumentWithLocation(); document2.StringCache = cache; #if FEATURE_XML_LOADPATH document2.Load(path); #else using (XmlReader xmlReader = XmlReader.Create(path, xmlReadSettings)) { document2.Load(xmlReader); } #endif XmlNodeList nodes1 = document1.GetElementsByTagName("ItemGroup"); XmlNodeList nodes2 = document2.GetElementsByTagName("ItemGroup"); Assert.Equal(1, nodes1.Count); Assert.Equal(1, nodes2.Count); XmlNode node1 = nodes1[0].FirstChild; XmlNode node2 = nodes2[0].FirstChild; Assert.NotNull(node1); Assert.NotNull(node2); Assert.NotSame(node1, node2); Assert.Same(node1.Value, node2.Value); } finally { File.Delete(path); } }