// // DiagnosticsConfigurationHandlerTest.cs: // NUnit Test Cases for System.Diagnostics.DiagnosticsConfigurationHandler // // Authors: // Jonathan Pryor (jonpryor@vt.edu) // Martin Willemoes Hansen (mwh@sysrq.dk) // // (C) Jonathan Pryor // (C) 2003 Martin Willemoes Hansen // #if !MOBILE using NUnit.Framework; using System; using System.Configuration; using System.Diagnostics; using System.Xml; namespace MonoTests.System.Diagnostics { [TestFixture] public class DiagnosticsConfigurationHandlerTest { private const string XmlFormat = "{0}"; /* "<system.diagnostics>" + "{0}" + "</system.diagnostics>"; */ private DiagnosticsConfigurationHandler handler = new DiagnosticsConfigurationHandler (); [Test] [Category ("NotDotNet")] public void SwitchesTag_Attributes () { string[] attrs = {"invalid=\"yes\""}; ValidateExceptions ("#TST:A", "<switches {0}></switches>", attrs); } void ValidateExceptions (string name, string format, string[] args) { foreach (string arg in args) { string xml = string.Format (XmlFormat, string.Format (format, arg)); try { CreateHandler (xml); Assert.Fail (string.Format ("{0}:{1}: no exception generated", name, arg)); } catch (ConfigurationException) { } catch (AssertionException) { // This is generated by the Assertion.Fail() statement in the try block. throw; } catch (Exception e) { Assert.Fail (string.Format ("{0}:{1}: wrong exception generated: {2} ({3}).", name, arg, e.ToString(), e.InnerException == null ? "" : e.InnerException.ToString())); } } } private void ValidateSuccess (string name, string format, string[] args) { foreach (string arg in args) { string xml = string.Format (XmlFormat, string.Format (format, arg)); try { CreateHandler (xml); } catch (Exception e) { Assert.Fail (string.Format ("{0}:{1}: exception generated: {2} ({3}).", name, arg, e.ToString(), e.InnerException == null ? "" : e.InnerException.ToString())); } } } private object CreateHandler (string xml) { XmlDocument d = new XmlDocument (); d.LoadXml (xml); return handler.Create (null, null, d); } [Test] [Category ("NotDotNet")] public void SwitchesTag_Elements () { string[] badElements = { // not enough arguments "<add />", "<add name=\"a\"/>", "<add value=\"b\"/>", // too many arguments "<add name=\"a\" value=\"b\" extra=\"c\"/>", // wrong casing "<add Name=\"a\" value=\"b\"/>", "<Add Name=\"a\" value=\"b\"/>", // missing args "<remove />", "<remove value=\"b\"/>", // too many args "<remove name=\"a\" value=\"b\"/>", "<clear name=\"a\"/>", // invalid element "<invalid element=\"a\" here=\"b\"/>" }; ValidateExceptions ("#TST:IE:Bad", "<switches>{0}</switches>", badElements); string[] goodElements = { "<add name=\"a\" value=\"4\"/>", "<add name=\"a\" value=\"-2\"/>", "<remove name=\"a\"/>", "<clear/>" }; ValidateSuccess ("#TST:IE:Good", "<switches>{0}</switches>", goodElements); } [Test] [Category ("NotDotNet")] public void AssertTag () { string[] goodAttributes = { "", "assertuienabled=\"true\"", "assertuienabled=\"false\" logfilename=\"some file name\"", "logfilename=\"some file name\"" }; ValidateSuccess ("#TAT:Good", "<assert {0}/>", goodAttributes); string[] badAttributes = { "AssertUiEnabled=\"true\"", "LogFileName=\"foo\"", "assertuienabled=\"\"", "assertuienabled=\"non-boolean-value\"" }; ValidateExceptions ("#TAT:BadAttrs", "<assert {0}/>", badAttributes); string[] badChildren = { "<any element=\"here\"/>" }; ValidateExceptions ("#TAT:BadChildren", "<assert>{0}</assert>", badChildren); } [Test] [Category ("NotDotNet")] public void PerformanceCountersTag () { string[] goodAttributes = { "", "filemappingsize=\"1048576\"", "filemappingsize=\"0\"" }; ValidateSuccess ("#PCT:Good", "<performanceCounters {0}/>", goodAttributes); string[] badAttributes = { "FileMappingSize=\"1048576\"", "filemappingsize=\"\"", "filemappingsize=\"non-int-value\"" }; ValidateExceptions ("#PCT:BadAttrs", "<performanceCounters {0}/>", badAttributes); string[] badChildren = { "<any element=\"here\"/>" }; ValidateExceptions ("#PCT:BadChildren", "<performanceCounters>{0}</performanceCounters>", badChildren); } [Test] [Category ("NotDotNet")] public void TraceTag_Attributes () { string[] good = { "", "autoflush=\"true\"", "indentsize=\"4\"", "autoflush=\"false\" indentsize=\"10\"" }; ValidateSuccess ("#TTT:A:Good", "<trace {0}/>", good); string[] bad = { "AutoFlush=\"true\"", "IndentSize=\"false\"", "autoflush=\"non-boolean-value\"", "autoflush=\"\"", "indentsize=\"non-integral-value\"", "indentsize=\"\"", "extra=\"invalid\"" }; ValidateExceptions ("#TTT:A:Bad", "<trace {0}/>", bad); } [Test] [Category ("NotDotNet")] public void TraceTag_Children () { string[] good = { // more about listeners in a different function... "<listeners />" }; ValidateSuccess ("#TTT:C:Good", "<trace>{0}</trace>", good); string[] bad = { "<listeners with=\"attribute\"/>", "<invalid element=\"here\"/>" }; ValidateExceptions ("#TTT:C:Bad", "<trace>{0}</trace>", bad); } [Test] [Category ("NotDotNet")] public void TraceTag_Listeners () { const string format = "<trace><listeners>{0}</listeners></trace>"; string[] good = { "<clear/>", "<add name=\"foo\" " + "type=\"System.Diagnostics.TextWriterTraceListener, System, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" " + "initializeData=\"argument.txt\"/>", "<remove name=\"foo\"/>", "<add name=\"foo\" " + "type=\"System.Diagnostics.TextWriterTraceListener, System, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" />", "<remove name=\"foo\"/>" }; ValidateSuccess ("#TTT:L:Good", format, good); string[] bad = { "<invalid tag=\"here\"/>", "<clear with=\"args\"/>", "<remove/>", "<add/>", "<remove name=\"foo\" extra=\"arg\"/>", "<add type=\"foo\"/>", "<add name=\"foo\" type=\"invalid-type\"/>", }; ValidateExceptions ("#TTT:L:Bad", format, bad); } } } #endif