diff --git a/src/libraries/Common/tests/System/Xml/ModuleCore/ctestexception.cs b/src/libraries/Common/tests/System/Xml/ModuleCore/ctestexception.cs index 60a033f7853f..0467c7b4d574 100644 --- a/src/libraries/Common/tests/System/Xml/ModuleCore/ctestexception.cs +++ b/src/libraries/Common/tests/System/Xml/ModuleCore/ctestexception.cs @@ -58,24 +58,24 @@ public class CTestException : Exception public object Expected; //Constructor - public CTestException(string message) + public CTestException(string message!!) : this(CTestBase.TEST_FAIL, message) { } - public CTestException(int result, string message) + public CTestException(int result, string message!!) : this(result, message, false, true, null) { } - public CTestException(int result, string message, object actual, object expected, Exception inner) + public CTestException(int result, string message!!, object actual, object expected, Exception inner) : base(message, inner) { //Note: iResult is the variation result (i.e.: TEST_PASS, TEST_FAIL, etc...) //Setup the exception Result = result; - Actual = actual; - Expected = expected; + Actual = actual ?? ""; + Expected = expected ?? ""; } public override string Message diff --git a/src/libraries/Common/tests/System/Xml/XmlCoreTest/CustomWriter.cs b/src/libraries/Common/tests/System/Xml/XmlCoreTest/CustomWriter.cs index 7ead330b9f6d..1c06afbda82f 100644 --- a/src/libraries/Common/tests/System/Xml/XmlCoreTest/CustomWriter.cs +++ b/src/libraries/Common/tests/System/Xml/XmlCoreTest/CustomWriter.cs @@ -157,6 +157,11 @@ public override string XmlLang } } + public override void Close() + { + Dispose(disposing:true); + } + protected override void Dispose(bool disposing) { if (disposing) diff --git a/src/libraries/Common/tests/System/Xml/XmlCoreTest/FilePathUtil.cs b/src/libraries/Common/tests/System/Xml/XmlCoreTest/FilePathUtil.cs index 4524d11ceab4..b5a64db4aab0 100644 --- a/src/libraries/Common/tests/System/Xml/XmlCoreTest/FilePathUtil.cs +++ b/src/libraries/Common/tests/System/Xml/XmlCoreTest/FilePathUtil.cs @@ -111,8 +111,7 @@ public static string ExpandVariables(string inputPath) return resultPath.ToString(); } - private static MyDict s_XmlFileInMemoryCache = null; - private static MyDict s_XmlFileInMemoryCacheBackup = null; + private static MyDict s_XmlFileInMemoryCache = null; private static readonly object s_XmlFileMemoryCacheLock = new object(); static void initXmlFileCacheIfNotYet() @@ -121,35 +120,20 @@ static void initXmlFileCacheIfNotYet() { if (s_XmlFileInMemoryCache == null) { - s_XmlFileInMemoryCache = new MyDict(); - s_XmlFileInMemoryCacheBackup = new MyDict(); + s_XmlFileInMemoryCache = new MyDict(); - foreach (var file in GetDataFiles()) + foreach (Tuple file in GetDataFiles()) { - addBytes(file.Item1, file.Item2); + var ms = new MemoryStream(file.Item2); + s_XmlFileInMemoryCache[NormalizeFilePath(file.Item1)] = ms; } } } } - public static void cacheXml(string filename, string content) - { - initXmlFileCacheIfNotYet(); - MemoryStream ms = new MemoryStream(); - StreamWriter sw = new StreamWriter(ms); - sw.Write(content); - sw.Flush(); - s_XmlFileInMemoryCache[NormalizeFilePath(filename)] = ms; - - MemoryStream msbak = new MemoryStream(); - ms.Position = 0; - ms.CopyTo(msbak); - s_XmlFileInMemoryCacheBackup[NormalizeFilePath(filename)] = msbak; - } - public static Stream getStreamDirect(string filename) { - foreach (var file in GetDataFiles()) + foreach (Tuple file in GetDataFiles()) { if (file.Item1 == filename) { @@ -171,51 +155,23 @@ public static Stream getStream(string filename) lock (s_XmlFileMemoryCacheLock) { - Stream s = s_XmlFileInMemoryCache[normalizedFileName]; + MemoryStream ms = s_XmlFileInMemoryCache[normalizedFileName]; - if (s == null) + if (ms == null) { throw new FileNotFoundException("File Not Found: " + filename); } - if (s.CanSeek) - { - s.Position = 0; - return s; - } - else - { - Stream msbak = s_XmlFileInMemoryCacheBackup[normalizedFileName]; - MemoryStream msnew = new MemoryStream(); - msbak.Position = 0; - msbak.CopyTo(msnew); - - s_XmlFileInMemoryCache[normalizedFileName] = msnew; - msnew.Position = 0; - return msnew; - } - } - } - - public static void addBytes(string filename, byte[] bytes) - { - if (null == filename) - return; - - initXmlFileCacheIfNotYet(); - - lock (s_XmlFileMemoryCacheLock) - { - var ms = new MemoryStream(bytes); - s_XmlFileInMemoryCache[NormalizeFilePath(filename)] = ms; - MemoryStream msbak = new MemoryStream(); + // Always give out a new stream, so there's no concern about concurrent use + MemoryStream msnew = new MemoryStream(); ms.Position = 0; - ms.CopyTo(msbak); - s_XmlFileInMemoryCacheBackup[NormalizeFilePath(filename)] = msbak; + ms.CopyTo(msnew); + msnew.Position = 0; + return msnew; } } - public static void addStream(string filename, Stream s) + public static void addStream(string filename, MemoryStream s!!) { if (null == filename) return; @@ -224,12 +180,8 @@ public static void addStream(string filename, Stream s) lock (s_XmlFileMemoryCacheLock) { + // overwrite any existing s_XmlFileInMemoryCache[NormalizeFilePath(filename)] = s; - - MemoryStream msbak = new MemoryStream(); - s.Position = 0; - s.CopyTo(msbak); - s_XmlFileInMemoryCacheBackup[NormalizeFilePath(filename)] = msbak; } } diff --git a/src/libraries/Common/tests/System/Xml/XmlCoreTest/WriterFactory.cs b/src/libraries/Common/tests/System/Xml/XmlCoreTest/WriterFactory.cs index da853e3ed720..dfa238e09b43 100644 --- a/src/libraries/Common/tests/System/Xml/XmlCoreTest/WriterFactory.cs +++ b/src/libraries/Common/tests/System/Xml/XmlCoreTest/WriterFactory.cs @@ -60,7 +60,7 @@ public WriterFactory(WriterType t, bool overrideAsync = false, bool async = fals private XmlWriterSettings _wSettings = null; private XmlWriter _xmlWriter = null; - private Stream _writerStream = null; + private MemoryStream _writerStream = null; XmlWriter CreateWriterImpl() { @@ -90,9 +90,8 @@ XmlWriter CreateWriterImpl() _wSettings.CloseOutput = false; if (_overrideAsync) _wSettings.Async = _async; - + _xmlWriter = new CustomWriter(_writerStream, _wSettings); FilePathUtil.addStream(_fileName, _writerStream); - _xmlWriter = new CustomWriter(_fileName, _wSettings); break; case WriterType.UTF8WriterIndent: _writerStream = new MemoryStream(); diff --git a/src/libraries/System.Private.Xml/tests/Readers/NameTable/TestFiles.cs b/src/libraries/System.Private.Xml/tests/Readers/NameTable/TestFiles.cs index 1000023e72f4..701b48032ed3 100644 --- a/src/libraries/System.Private.Xml/tests/Readers/NameTable/TestFiles.cs +++ b/src/libraries/System.Private.Xml/tests/Readers/NameTable/TestFiles.cs @@ -79,7 +79,7 @@ protected static void DeleteTestFile(string strFileName) public static void CreateGenericTestFile(string strFileName) { MemoryStream ms = new MemoryStream(); - TextWriter tw = new StreamWriter(ms); + using var tw = new StreamWriter(ms, encoding:null, bufferSize:-1, leaveOpen:true); tw.WriteLine(""); tw.WriteLine(""); @@ -170,7 +170,6 @@ public static void CreateGenericTestFile(string strFileName) tw.WriteLine("xxxzzz"); tw.WriteLine("zzz"); tw.WriteLine("xxx"); - tw.Flush(); tw.WriteLine(""); tw.WriteLine(""); tw.WriteLine("true"); @@ -202,7 +201,6 @@ public static void CreateGenericTestFile(string strFileName) tw.WriteLine("twin brothers, and sons to Aegeon and Aemilia."); tw.WriteLine(""); tw.WriteLine(""); - tw.Flush(); tw.WriteLine("What color e1foo is it?"); tw.Write("What color is it?Language TestDROMIO OF EPHESUS"); tw.WriteLine(""); @@ -269,28 +267,26 @@ public static void CreateGenericTestFile(string strFileName) tw.Write(""); - tw.Flush(); + FilePathUtil.addStream(strFileName, ms); } public static void CreateBigElementTestFile(string strFileName) { MemoryStream ms = new MemoryStream(); - TextWriter tw = new StreamWriter(ms); + using var tw = new StreamWriter(ms, encoding:null, bufferSize:-1, leaveOpen:true); string str = new string('Z', (1 << 20) - 1); tw.WriteLine(""); tw.Write("<"); tw.Write(str); tw.WriteLine("X />"); - tw.Flush(); tw.Write("<"); tw.Write(str); tw.WriteLine("Y />"); tw.WriteLine(""); - tw.Flush(); FilePathUtil.addStream(strFileName, ms); } } diff --git a/src/libraries/System.Private.Xml/tests/Writers/XmlWriterApi/TCFullEndElement.cs b/src/libraries/System.Private.Xml/tests/Writers/XmlWriterApi/TCFullEndElement.cs index 0e2e261ea494..d50456ce3746 100644 --- a/src/libraries/System.Private.Xml/tests/Writers/XmlWriterApi/TCFullEndElement.cs +++ b/src/libraries/System.Private.Xml/tests/Writers/XmlWriterApi/TCFullEndElement.cs @@ -6352,12 +6352,12 @@ public partial class TCClose [XmlWriterInlineData] public void var_1(XmlWriterUtils utils) { - using (XmlWriter writer = utils.CreateWriter()) - { - writer.WriteStartElement("Root"); - writer.WriteStartElement("Nesting"); - writer.WriteStartElement("SomeDeep"); - } + XmlWriter writer = utils.CreateWriter(); + writer.WriteStartElement("Root"); + writer.WriteStartElement("Nesting"); + writer.WriteStartElement("SomeDeep"); + writer.Close(); + Assert.True(utils.CompareReader("")); } diff --git a/src/libraries/System.Private.Xml/tests/XmlReaderLib/TestFiles.cs b/src/libraries/System.Private.Xml/tests/XmlReaderLib/TestFiles.cs index 04c08d8247f8..efcc2a2d40d7 100644 --- a/src/libraries/System.Private.Xml/tests/XmlReaderLib/TestFiles.cs +++ b/src/libraries/System.Private.Xml/tests/XmlReaderLib/TestFiles.cs @@ -291,42 +291,42 @@ protected static void DeleteTestFile(string strFileName) public static void CreateByteTestFile(string strFileName) { - Stream s = new MemoryStream(); - TextWriter tw = new StreamWriter(s); + var s = new MemoryStream(); + using var tw = new StreamWriter(s, encoding:null, bufferSize:-1, leaveOpen:true); + tw.WriteLine("x"); - tw.Flush(); + FilePathUtil.addStream(strFileName, s); } public static void CreateUTF8EncodedTestFile(string strFileName, Encoding encode) { - Stream strm = new MemoryStream(); - TextWriter tw = new StreamWriter(strm, encode); + var s = new MemoryStream(); + using var tw = new StreamWriter(s, encode, bufferSize:-1, leaveOpen:true); tw.WriteLine(""); tw.Write("\u00A9"); tw.WriteLine(""); - tw.Flush(); - FilePathUtil.addStream(strFileName, strm); + FilePathUtil.addStream(strFileName, s); } public static void CreateEncodedTestFile(string strFileName, Encoding encode) { - Stream strm = new MemoryStream(); - TextWriter tw = new StreamWriter(strm, encode); + var s = new MemoryStream(); + using var tw = new StreamWriter(s, encode, bufferSize:-1, leaveOpen:true); tw.WriteLine(""); tw.WriteLine(""); - tw.Flush(); - FilePathUtil.addStream(strFileName, strm); + FilePathUtil.addStream(strFileName, s); } public static void CreateWhitespaceHandlingTestFile(string strFileName) { - Stream s = new MemoryStream(); - TextWriter tw = new StreamWriter(s); + var s = new MemoryStream(); + using var tw = new StreamWriter(s, encoding:null, bufferSize:-1, leaveOpen:true); + tw.WriteLine(""); tw.WriteLine(""); @@ -337,7 +337,7 @@ public static void CreateWhitespaceHandlingTestFile(string strFileName) tw.WriteLine(" "); tw.WriteLine("\t\t"); tw.WriteLine(""); - tw.Flush(); + FilePathUtil.addStream(strFileName, s); } @@ -350,8 +350,9 @@ public static void CreateGenericXsltTestFile(string strFileName) } public static void CreateGenericTestFile(string strFileName) { - Stream s = new MemoryStream(); - TextWriter tw = new StreamWriter(s); + var s = new MemoryStream(); + using var tw = new StreamWriter(s, encoding:null, bufferSize:-1, leaveOpen:true); + tw.WriteLine(""); tw.WriteLine(""); tw.WriteLine(""); @@ -425,7 +426,6 @@ public static void CreateGenericTestFile(string strFileName) tw.WriteLine("xxxzzz"); tw.WriteLine("zzz"); tw.WriteLine("xxx"); - tw.Flush(); tw.WriteLine(""); tw.WriteLine(""); tw.WriteLine("true"); @@ -457,7 +457,6 @@ public static void CreateGenericTestFile(string strFileName) tw.WriteLine("twin brothers, and sons to Aegeon and Aemilia."); tw.WriteLine(""); tw.WriteLine(""); - tw.Flush(); tw.WriteLine("What color NO_REFERENCEe1; is it?"); tw.Write("What color is it?Language TestDROMIO OF EPHESUS"); tw.WriteLine(""); @@ -523,7 +522,6 @@ public static void CreateGenericTestFile(string strFileName) tw.WriteLine(""); tw.Write(""); - tw.Flush(); FilePathUtil.addStream(strFileName, s); } @@ -561,17 +559,18 @@ public static void CreateXDRTestFile(string strFileName) public static void CreateInvalidNamespaceTestFile(string strFileName) { - Stream s = new MemoryStream(); - TextWriter tw = new StreamWriter(s); + var s = new MemoryStream(); + using var tw = new StreamWriter(s, encoding:null, bufferSize:-1, leaveOpen:true); + tw.WriteLine("Namespace=1"); - tw.Flush(); + FilePathUtil.addStream(strFileName, s); } public static void CreateNamespaceTestFile(string strFileName) { - Stream s = new MemoryStream(); - TextWriter tw = new StreamWriter(s); + var s = new MemoryStream(); + using var tw = new StreamWriter(s, encoding:null, bufferSize:-1, leaveOpen:true); tw.WriteLine(""); tw.WriteLine("Namespace=1"); @@ -585,14 +584,15 @@ public static void CreateNamespaceTestFile(string strFileName) tw.WriteLine("Namespace=14"); tw.WriteLine("Namespace=\"\""); tw.WriteLine(""); - tw.Flush(); + FilePathUtil.addStream(strFileName, s); } public static void CreateXmlLangTestFile(string strFileName) { - Stream s = new MemoryStream(); - TextWriter tw = new StreamWriter(s); + var s = new MemoryStream(); + using var tw = new StreamWriter(s, encoding:null, bufferSize:-1, leaveOpen:true); + tw.WriteLine(""); tw.WriteLine("DROMIO OF EPHESUS"); tw.WriteLine("DROMIO OF SYRACUSE"); @@ -603,14 +603,14 @@ public static void CreateXmlLangTestFile(string strFileName) tw.WriteLine("What color is it?<!-- this is a comment-->Testing languageWhat color is it?haha hihihi"); tw.WriteLine(""); tw.WriteLine(""); - tw.Flush(); + FilePathUtil.addStream(strFileName, s); } public static void CreateXmlSpaceTestFile(string strFileName) { - Stream s = new MemoryStream(); - TextWriter tw = new StreamWriter(s); + var s = new MemoryStream(); + using var tw = new StreamWriter(s, encoding:null, bufferSize:-1, leaveOpen:true); tw.WriteLine(""); tw.WriteLine("DROMIO OF EPHESUS"); @@ -622,18 +622,18 @@ public static void CreateXmlSpaceTestFile(string strFileName) tw.WriteLine("< < > < > test >"); tw.WriteLine("twin brothers, and attendants on the two Antipholuses."); tw.WriteLine(""); - tw.Flush(); + FilePathUtil.addStream(strFileName, s); } public static void CreateJunkTestFile(string strFileName) { - Stream s = new MemoryStream(); - TextWriter tw = new StreamWriter(s); + var s = new MemoryStream(); + using var tw = new StreamWriter(s, encoding:null, bufferSize:-1, leaveOpen:true); string str = new string('Z', (1 << 20) - 1); tw.Write(str); - tw.Flush(); + FilePathUtil.addStream(strFileName, s); } @@ -661,8 +661,10 @@ public static void CreateBase64TestFile(string strFileName) { WriteToBuffer(ref WTextOnly, ref WTextOnlylen, System.BitConverter.GetBytes(strBase64[i])); } - MemoryStream mems = new MemoryStream(); - XmlWriter w = XmlWriter.Create(mems, null); + + var mems = new MemoryStream(); + using var w = XmlWriter.Create(mems, new XmlWriterSettings { CloseOutput = false }); + w.WriteStartDocument(); w.WriteStartElement("Root"); w.WriteStartElement("ElemAll"); @@ -697,7 +699,7 @@ public static void CreateBase64TestFile(string strFileName) w.WriteRaw("D2BAaAQID"); w.WriteEndElement(); w.WriteEndElement(); - w.Flush(); + FilePathUtil.addStream(strFileName, mems); } @@ -725,14 +727,14 @@ public static void CreateBinHexTestFile(string strFileName) { WriteToBuffer(ref WTextOnly, ref WTextOnlylen, System.BitConverter.GetBytes(strBinHex[i])); } - MemoryStream mems = new MemoryStream(); - XmlWriter w = XmlWriter.Create(mems); + var mems = new MemoryStream(); + using var w = XmlWriter.Create(mems, new XmlWriterSettings { CloseOutput = false }); + w.WriteStartElement("Root"); w.WriteStartElement("ElemAll"); w.WriteBinHex(Wbinhex, 0, (int)Wbinhexlen); w.WriteEndElement(); - w.Flush(); w.WriteStartElement("ElemEmpty"); w.WriteString(string.Empty); @@ -759,68 +761,67 @@ public static void CreateBinHexTestFile(string strFileName) w.WriteElementString("ElemErr", "a&A2A3"); w.WriteEndElement(); - w.Flush(); + FilePathUtil.addStream(strFileName, mems); } public static void CreateBigElementTestFile(string strFileName) { - Stream s = new MemoryStream(); - TextWriter tw = new StreamWriter(s); + var s = new MemoryStream(); + using var tw = new StreamWriter(s, encoding:null, bufferSize:-1, leaveOpen:true); string str = new string('Z', (1 << 20) - 1); tw.WriteLine(""); tw.Write("<"); tw.Write(str); tw.WriteLine("X />"); - tw.Flush(); tw.Write("<"); tw.Write(str); tw.WriteLine("Y />"); tw.WriteLine(""); - tw.Flush(); FilePathUtil.addStream(strFileName, s); } public static void CreateXSLTStyleSheetWCopyTestFile(string strFileName) { - Stream s = new MemoryStream(); - TextWriter tw = new StreamWriter(s); + var s = new MemoryStream(); + using var tw = new StreamWriter(s, encoding:null, bufferSize:-1, leaveOpen:true); + tw.WriteLine(""); tw.WriteLine(""); tw.WriteLine(""); tw.WriteLine(""); tw.WriteLine(""); - tw.Flush(); + FilePathUtil.addStream(strFileName, s); } public static void CreateConstructorTestFile(string strFileName) { - Stream s = new MemoryStream(); - TextWriter tw = new StreamWriter(s); + var s = new MemoryStream(); + using var tw = new StreamWriter(s, encoding:null, bufferSize:-1, leaveOpen:true); tw.WriteLine(""); tw.WriteLine(""); tw.WriteLine(""); tw.Write(""); - tw.Flush(); + FilePathUtil.addStream(strFileName, s); } public static void CreateLineNumberTestFile(string strFileName) { - Stream s = new MemoryStream(); - TextWriter tw = new StreamWriter(s); + var s = new MemoryStream(); + using var tw = new StreamWriter(s, encoding:null, bufferSize:-1, leaveOpen:true); FilePathUtil.addStream(strFileName, s); } public static void CreateLbNormalizationTestFile(string strFileName) { - Stream s = new MemoryStream(); - TextWriter tw = new StreamWriter(s); + var s = new MemoryStream(); + using var tw = new StreamWriter(s, encoding:null, bufferSize:-1, leaveOpen:true); FilePathUtil.addStream(strFileName, s); }