4 using System.Collections;
7 namespace MonoTests.W3C_xmlconf {
11 public abstract class BaseTests
15 #region test list fields
16 protected readonly ArrayList ignoredTests = new ArrayList ();
17 protected readonly ArrayList knownFailures = new ArrayList ();
18 protected readonly ArrayList fixmeList = new ArrayList ();
19 protected readonly ArrayList netFailures = new ArrayList ();
22 #region ReadStrings ()
23 static void ReadStrings (ArrayList array, string filename) {
24 if (!File.Exists (filename))
27 using (StreamReader reader = new StreamReader (filename)) {
28 foreach (string s_ in reader.ReadToEnd ().Split ("\n".ToCharArray ())) {
29 string s = s_.Trim ();
38 protected BaseTests (TestSuite suite)
46 ReadStrings (ignoredTests, "ignored.lst");
47 ReadStrings (knownFailures, "knownFailures.lst");
48 ReadStrings (fixmeList, "fixme.lst");
49 ReadStrings (netFailures, "net-failed.lst");
52 protected void BuildSuite ()
54 XmlDocument catalog = new XmlDocument ();
55 catalog.Load ("xmlconf/xmlconf.xml");
57 foreach (XmlElement test in catalog.SelectNodes ("//TEST")) {
58 string testId = test.GetAttribute ("ID");
60 ProcessTest (testId, test);
64 protected virtual bool InverseResult {
68 protected virtual void ProcessTest (string testId, XmlElement test)
70 if (ignoredTests.Contains (testId))
73 if (netFailures.Contains (testId))
76 _suite.Add (new TestFromCatalog (testId, test, InverseResult));
80 public class AllTests: BaseTests
83 static public TestSuite Suite{
85 TestSuite suite = new TestSuite ("W3C_xmlconf.All");
86 AllTests tests = new AllTests (suite);
92 AllTests (TestSuite suite)
98 public class CleanTests : BaseTests
101 static public TestSuite Suite{
103 TestSuite suite = new TestSuite ("W3C_xmlconf.Clean");
104 CleanTests tests = new CleanTests (suite);
110 CleanTests (TestSuite suite)
115 protected override void ProcessTest(string testId, XmlElement test)
117 if (knownFailures.Contains (testId) || fixmeList.Contains (testId))
120 base.ProcessTest (testId, test);
124 public class KnownFailureTests : BaseTests
127 static public TestSuite Suite{
129 TestSuite suite = new TestSuite ("W3C_xmlconf.KnownFailures");
130 KnownFailureTests tests = new KnownFailureTests (suite);
136 KnownFailureTests (TestSuite suite)
141 protected override bool InverseResult {
145 protected override void ProcessTest(string testId, XmlElement test)
147 if (!knownFailures.Contains (testId) && !fixmeList.Contains (testId))
150 base.ProcessTest (testId, test);
154 public class TestFromCatalog : NUnit.Core.TestCase
160 public TestFromCatalog (string testId, XmlElement test, bool inverseResult)
164 _inverseResult = inverseResult;
167 bool TestNonValidating (string uri)
169 XmlTextReader trd = null;
171 trd = new XmlTextReader (uri);
172 new XmlDocument ().Load (trd);
175 catch (Exception e) {
176 _errorString = e.ToString ();
185 bool TestValidating (string uri)
187 XmlTextReader rd = null;
189 rd = new XmlTextReader (uri);
190 XmlValidatingReader vrd = new XmlValidatingReader (rd);
191 new XmlDocument ().Load (vrd);
194 catch (Exception e) {
195 _errorString = e.ToString (); //rewrites existing, possibly, but it's ok
204 public override void Run (TestCaseResult res)
206 string type = _test.GetAttribute ("TYPE");
210 Uri baseUri = new Uri (_test.BaseURI);
211 Uri testUri = new Uri (baseUri, _test.GetAttribute ("URI"));
213 bool nonValidatingPassed = TestNonValidating (testUri.ToString ());
214 bool validatingPassed = TestValidating (testUri.ToString ());
216 bool isok = isOK (type, nonValidatingPassed, validatingPassed);
218 if (_inverseResult) {
220 message = "The following test was FIXED:\n";
226 message += "type:"+type;
227 message += " non-validating passed:"+nonValidatingPassed.ToString();
228 message += " validating passed:"+validatingPassed.ToString();
229 message += " description:"+_test.InnerText;
230 res.Failure (message, _errorString);
234 static bool isOK (string type, bool nonValidatingPassed, bool validatingPassed)
238 return nonValidatingPassed && validatingPassed;
240 return nonValidatingPassed && !validatingPassed;
242 return !nonValidatingPassed && !validatingPassed;
244 return true; //readers can optionally accept or reject errors
246 throw new ArgumentException ("Wrong test type", "type");