public void Regress322573 ( ) { // The contents of the project file that we'll be testing. string projectFileContents = "<Elem1 StartArguments = \"???action=16&requestid=1000036CA053601F66928BF0550E395A714E72C8D6066??? /HeadTraxStartversion 5.6.0.66 /RunningFromHeadTraxStart yes /HTXMutexName HTXMutex344\"/>"; // Create a temp file on disk with the above contents. string projectFilename; this.CreateTemporaryProjectFile(projectFileContents, out projectFilename); // Instantiate our class with the project file. OldVSProjectFileReader reader = new OldVSProjectFileReader(projectFilename); // Read the whole file into a string. Confirm that the & character within // an attribute value got translated correctly. string wholeFile = reader.ReadToEnd(); Assert.AreEqual("<Elem1 StartArguments = \"???action=16&requestid=1000036&#14CA053601F66928BF0550E395A714E72C8D6066??? /HeadTraxStartversion 5.6.0.66 /RunningFromHeadTraxStart yes /HTXMutexName HTXMutex344\"/>\r\n", wholeFile); // Clean up. reader.Close(); this.DeleteTemporaryProjectFile(projectFilename); }
public void AttributeValueUsingSingleQuotes ( ) { // The contents of the project file that we'll be testing. string projectFileContents = "<Elem1 Attrib1 = '1234<56789 is a \"true\" statement'/>"; // Create a temp file on disk with the above contents. string projectFilename; this.CreateTemporaryProjectFile(projectFileContents, out projectFilename); // Instantiate our class with the project file. OldVSProjectFileReader reader = new OldVSProjectFileReader(projectFilename); // Read the whole file into a string. Confirm that the < and > characters within // an attribute value got translated correctly, but the < and > characters occurring // *outside* an attribute value are not touched. string wholeFile = reader.ReadToEnd(); Assert.AreEqual("<Elem1 Attrib1 = '1234<56789 is a \"true\" statement'/>\r\n", wholeFile); // Clean up. reader.Close(); this.DeleteTemporaryProjectFile(projectFilename); }
public void MultipleElementsOnSameLine ( ) { // The contents of the project file that we'll be testing. Look at the // right side, for a cleaner copy without all the escaping. string projectFileContents = "<Elem1 Attrib1=\"bl>>ah\"/><Elem2 Attrib2=\"bl<<oo\"/>"; // <Elem1 Attrib1="bl>>ah"/><Elem2 Attrib2="bl<<oo"/> // Create a temp file on disk with the above contents. string projectFilename; this.CreateTemporaryProjectFile(projectFileContents, out projectFilename); // Instantiate our class with the project file. OldVSProjectFileReader reader = new OldVSProjectFileReader(projectFilename); // Read the whole file into a string. Confirm that the < and > characters within // an attribute value got translated correctly, but the < and > characters occurring // *outside* an attribute value are not touched. string wholeFile = reader.ReadToEnd(); Assert.AreEqual("<Elem1 Attrib1=\"bl>>ah\"/><Elem2 Attrib2=\"bl<<oo\"/>\r\n", wholeFile); // Clean up. reader.Close(); this.DeleteTemporaryProjectFile(projectFilename); }
public void Regress184573() { // The contents of the project file that we'll be testing. Look at the // right side, for a cleaner copy without all the escaping. char c = '�'; string projectFileContents = new string(c, 1); // Create a temp file on disk with the above contents. string projectFilename; this.CreateTemporaryProjectFile(projectFileContents, out projectFilename); // Instantiate our class with the project file. OldVSProjectFileReader reader = new OldVSProjectFileReader(projectFilename); // Read the whole file into a string. string wholeFile = reader.ReadToEnd(); Assert.IsTrue(wholeFile.Length > 0, "High-bit character was stripped."); // Create two different encodings. Encoding defaultEncoding = Encoding.Default; Encoding unicode = Encoding.Unicode; // Convert the string into a byte array. byte[] unicodeBytes = unicode.GetBytes(projectFileContents); // Perform the conversion from one encoding to the other. byte[] defaultEncodingBytes = Encoding.Convert(unicode, defaultEncoding, unicodeBytes); // Convert the new byte[] into a char[] and then into a string. char[] defaultEncodingChars = new char[defaultEncoding.GetCharCount(defaultEncodingBytes, 0, defaultEncodingBytes.Length)]; defaultEncoding.GetChars(defaultEncodingBytes, 0, defaultEncodingBytes.Length, defaultEncodingChars, 0); Assert.IsTrue(defaultEncodingChars.Length > 0); Assert.IsTrue(wholeFile[0] == defaultEncodingChars[0], String.Format("Expected ANSI encoding of '{0}' to result in '{0}'. Instead it was '{1}'", c, defaultEncodingChars[0], wholeFile[0]) ); // Clean up. reader.Close(); this.DeleteTemporaryProjectFile(projectFilename); }
public void NoSpecialCharacters ( ) { // The contents of the project file that we'll be testing. Look at the // right side, for a cleaner copy without all the escaping. string projectFileContents = "<VisualStudioProject>\r\n" + // <VisualStudioProject> "\r\n" + // " <VisualBasic\r\n" + // <VisualBasic " ProjectType = \"Local\"\r\n" + // ProjectType = "Local" " ProductVersion = \"7.10.3022\"\r\n" + // ProductVersion = "7.10.3022" " >\r\n" + // > " </VisualBasic>\r\n" + // </VisualBasic> "\r\n" + // "</VisualStudioProject>\r\n"; // </VisualStudioProject> // Create a temp file on disk with the above contents. string projectFilename; this.CreateTemporaryProjectFile(projectFileContents, out projectFilename); // Instantiate our class with the project file. OldVSProjectFileReader reader = new OldVSProjectFileReader(projectFilename); // Create a buffer to hold 20 characters. char[] characterBuffer = new char[20]; int exceptionCount = 0; int charactersRead = 0; // Read the first 20 characters into our buffer. charactersRead = reader.Read(characterBuffer, 0, 20); Assert.AreEqual(20, charactersRead); Assert.AreEqual("<VisualStudioProject", new string(characterBuffer)); // Read the next 20 characters into our buffer. charactersRead = reader.Read(characterBuffer, 0, 20); Assert.AreEqual(20, charactersRead); Assert.AreEqual(">\r\n\r\n <VisualBasic\r", new string(characterBuffer)); // Read the next 10 characters into our buffer starting at position 5. charactersRead = reader.Read(characterBuffer, 5, 10); Assert.AreEqual(10, charactersRead); Assert.AreEqual(">\r\n\r\n\n Projeasic\r", new string(characterBuffer)); // Try reading the next 30 characters. Since there's not enough room in our // buffer for 30 characters, this will fail. try { charactersRead = reader.Read(characterBuffer, 5, 30); } catch (ArgumentException) { exceptionCount++; } // Confirm that the proper exception was thrown and that the buffer // was not touched. Assert.AreEqual(1, exceptionCount); Assert.AreEqual(">\r\n\r\n\n Projeasic\r", new string(characterBuffer)); // Read to the end of the current line. string readLine = reader.ReadLine(); Assert.AreEqual("ctType = \"Local\"", readLine); // Read the next line. readLine = reader.ReadLine(); Assert.AreEqual(" ProductVersion = \"7.10.3022\"", readLine); // Read the next character. int character = reader.Read(); Assert.AreEqual(' ', character); // Read the next character. character = reader.Read(); Assert.AreEqual(' ', character); // Peek at the next character, but don't advance the read pointer. character = reader.Peek(); Assert.AreEqual('>', character); // Read the next 20 characters into our buffer. charactersRead = reader.Read(characterBuffer, 0, 20); // Read the next 20 characters into our buffer. charactersRead = reader.Read(characterBuffer, 0, 20); // Read the next 20 characters into our buffer. But actually, since // we're almost at the end of the file, we expect that only 7 characters // will actually be read. charactersRead = reader.Read(characterBuffer, 0, 20); Assert.AreEqual(7, charactersRead); Assert.AreEqual("ject>\r\nsualStudioPro", new string(characterBuffer)); // Read the next 20 characters into our buffer. Now, we're really // at the end of the file already, so it should come back with zero // characters read. charactersRead = reader.Read(characterBuffer, 0, 20); Assert.AreEqual(0, charactersRead); Assert.AreEqual("ject>\r\nsualStudioPro", new string(characterBuffer)); // Clean up. reader.Close(); this.DeleteTemporaryProjectFile(projectFilename); }
public void ReplaceSingleAmpersand() { Assert.AreEqual("&1234", OldVSProjectFileReader.ReplaceAmpersandWithLiteral("&1234", 0)); Assert.AreEqual("12&34", OldVSProjectFileReader.ReplaceAmpersandWithLiteral("12&34", 2)); Assert.AreEqual("1234&", OldVSProjectFileReader.ReplaceAmpersandWithLiteral("1234&", 4)); }
public void AmpersandReplacement ( ) { // Single lonely ampersand. This should get replaced. Assert.AreEqual("blah&doo", OldVSProjectFileReader.ReplaceSpecialCharactersInXmlAttributeString("blah&doo")); // Single lonely ampersand again, but this time with a semicolon at some point afterwards, just // to try and confuse the parser. Assert.AreEqual("blah&doo;doo", OldVSProjectFileReader.ReplaceSpecialCharactersInXmlAttributeString("blah&doo;doo")); // An ampersand used to escape a legitimate special character should NOT be replaced by our function. Assert.AreEqual("blah<doo", OldVSProjectFileReader.ReplaceSpecialCharactersInXmlAttributeString("blah<doo")); // An ampersand used to escape a legitimate special character should NOT be replaced by our function. Assert.AreEqual("blah<doo", OldVSProjectFileReader.ReplaceSpecialCharactersInXmlAttributeString("blah<doo")); // If the code between the "&" and the ";" is not a legitimate number, then we SHOULD replace the "&". Assert.AreEqual("blah&#AB;doo", OldVSProjectFileReader.ReplaceSpecialCharactersInXmlAttributeString("blah&#AB;doo")); // A valid hexadecimal number should NOT be replaced. Assert.AreEqual("blah«doo", OldVSProjectFileReader.ReplaceSpecialCharactersInXmlAttributeString("blah«doo")); // Check to make sure we can handle two replacements. Assert.AreEqual("blah&doo&heehee", OldVSProjectFileReader.ReplaceSpecialCharactersInXmlAttributeString("blah&doo&heehee")); // Check to make sure we can handle a replacement at the end of a string. Assert.AreEqual("blahdoo&", OldVSProjectFileReader.ReplaceSpecialCharactersInXmlAttributeString("blahdoo&")); // Emptiness between the "&" and the ";" is not valid, and therefore the "&" should get replaced. Assert.AreEqual("blah&;doo", OldVSProjectFileReader.ReplaceSpecialCharactersInXmlAttributeString("blah&;doo")); // Emptiness between the "#" and the ";" is not valid, and therefore the "&" should get replaced. Assert.AreEqual("blah&#;doo", OldVSProjectFileReader.ReplaceSpecialCharactersInXmlAttributeString("blah&#;doo")); // Emptiness between the "#x" and the ";" is not valid, and therefore the "&" should get replaced. Assert.AreEqual("blah&#x;doo", OldVSProjectFileReader.ReplaceSpecialCharactersInXmlAttributeString("blah&#x;doo")); // Even characters beyond 256 should be considered valid. Assert.AreEqual("blahĘdoo", OldVSProjectFileReader.ReplaceSpecialCharactersInXmlAttributeString("blahĘdoo")); // The VS.NET 2003 XML writer even persisted things like the copyright symbol as an entity. // So we need to be careful about not touching those. Assert.AreEqual("blah©doo", OldVSProjectFileReader.ReplaceSpecialCharactersInXmlAttributeString("blah©doo")); // The VS.NET 2003 XML writer even persisted things like the copyright symbol as an entity. // So we need to be careful about not touching those. Assert.AreEqual("blah&COPY;doo", OldVSProjectFileReader.ReplaceSpecialCharactersInXmlAttributeString("blah©doo")); }
public void XmlAttributesWithSpecialCharacters ( ) { // The contents of the project file that we'll be testing. Look at the // right side, for a cleaner copy without all the escaping. string projectFileContents = "<VisualStudioProject>\r\n" + // <VisualStudioProject> "\r\n" + // " <VisualBasic\r\n" + // <VisualBasic " ProjectType = \"Lo<cal\"\r\n" + // ProjectType = "Lo<cal" " ProductVersion = \"7<.10.>3022\"\r\n" + // ProductVersion = "7<.10.>3022" " A=\"blah>\" B=\"bloo<\"\r\n" + // A="blah>" B="bloo<" " >\r\n" + // > " </VisualBasic>\r\n" + // </VisualBasic> "\r\n" + // "</VisualStudioProject>\r\n"; // </VisualStudioProject> // Create a temp file on disk with the above contents. string projectFilename; this.CreateTemporaryProjectFile(projectFileContents, out projectFilename); // Instantiate our class with the project file. OldVSProjectFileReader reader = new OldVSProjectFileReader(projectFilename); // Create a buffer to hold 30 characters. char[] characterBuffer = new char[30]; int charactersRead = 0; // Read the first 30 characters into our buffer. charactersRead = reader.Read(characterBuffer, 0, 30); Assert.AreEqual(30, charactersRead); Assert.AreEqual("<VisualStudioProject>\r\n\r\n <Vi", new string(characterBuffer)); // Read the next 30 characters into our buffer. charactersRead = reader.Read(characterBuffer, 0, 30); Assert.AreEqual(30, charactersRead); Assert.AreEqual("sualBasic\r\n ProjectType = \"", new string(characterBuffer)); // Read the next 20 characters into our buffer starting at position 10. // Confirm that the < and > characters within an attribute value got translated correctly. charactersRead = reader.Read(characterBuffer, 10, 20); Assert.AreEqual(20, charactersRead); Assert.AreEqual("sualBasic\rLo<cal\"\r\n Prod", new string(characterBuffer)); // Read the next 20 characters into our buffer. Confirm that the < and > characters within // an attribute value got translated correctly. charactersRead = reader.Read(characterBuffer, 0, 20); Assert.AreEqual(20, charactersRead); Assert.AreEqual("uctVersion = \"7<.\r\n Prod", new string(characterBuffer)); // Read the remainder of the file. Confirm that the < and > characters within // an attribute value got translated correctly. string restOfFile = reader.ReadToEnd(); Assert.AreEqual("10.>3022\"\r\n A=\"blah>\" B=\"bloo<\"\r\n >\r\n </VisualBasic>\r\n\r\n</VisualStudioProject>\r\n", restOfFile); // Clean up. reader.Close(); this.DeleteTemporaryProjectFile(projectFilename); }