4 using System.Collections;
7 namespace MonoTests.W3C_xmlconf {
11 abstract class BaseTests
16 #region test list fields
17 protected readonly ArrayList ignoredTests = new ArrayList ();
18 protected readonly ArrayList knownFailures = new ArrayList ();
19 protected readonly ArrayList fixmeList = new ArrayList ();
20 protected readonly ArrayList netFailures = new ArrayList ();
23 #region ReadStrings ()
24 static void ReadStrings (ArrayList array, string filename) {
25 if (!File.Exists (filename))
28 using (StreamReader reader = new StreamReader (filename)) {
29 foreach (string s_ in reader.ReadToEnd ().Split ("\n".ToCharArray ())) {
30 string s = s_.Trim ();
39 protected BaseTests (TestSuite suite)
47 ReadStrings (ignoredTests, "ignored.lst");
48 ReadStrings (knownFailures, "knownFailures.lst");
49 ReadStrings (fixmeList, "fixme.lst");
50 ReadStrings (netFailures, "net-failed.lst");
53 protected void BuildSuite ()
55 XmlDocument catalog = new XmlDocument ();
56 catalog.Load ("xmlconf/xmlconf.xml");
58 foreach (XmlElement test in catalog.SelectNodes ("//TEST")) {
59 string testId = test.GetAttribute ("ID");
61 ProcessTest (testId, test);
65 protected virtual bool InverseResult {
69 protected virtual void ProcessTest (string testId, XmlElement test)
71 if (ignoredTests.Contains (testId))
74 if (netFailures.Contains (testId))
77 _suite.Add (new TestFromCatalog (testId, test, InverseResult));
81 class AllTests: BaseTests
84 static public TestSuite Suite{
86 TestSuite suite = new TestSuite ("W3C_xmlconf.All");
87 AllTests tests = new AllTests (suite);
93 AllTests (TestSuite suite)
99 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 class KnownFailureTests: BaseTests {
126 static public TestSuite Suite{
128 TestSuite suite = new TestSuite ("W3C_xmlconf.KnownFailures");
129 KnownFailureTests tests = new KnownFailureTests (suite);
135 KnownFailureTests (TestSuite suite)
140 protected override bool InverseResult {
144 protected override void ProcessTest(string testId, XmlElement test)
146 if (!knownFailures.Contains (testId) && !fixmeList.Contains (testId))
149 base.ProcessTest (testId, test);
153 class TestFromCatalog: NUnit.Core.TestCase
159 public TestFromCatalog (string testId, XmlElement test, bool inverseResult)
163 _inverseResult = inverseResult;
166 bool TestNonValidating (string uri)
168 XmlTextReader trd = null;
170 trd = new XmlTextReader (uri);
171 new XmlDocument ().Load (trd);
174 catch (Exception e) {
175 _errorString = e.ToString ();
184 bool TestValidating (string uri)
186 XmlTextReader rd = null;
188 rd = new XmlTextReader (uri);
189 XmlValidatingReader vrd = new XmlValidatingReader (rd);
190 new XmlDocument ().Load (vrd);
193 catch (Exception e) {
194 _errorString = e.ToString (); //rewrites existing, possibly, but it's ok
203 public override void Run (TestCaseResult res)
205 string type = _test.GetAttribute ("TYPE");
209 Uri baseUri = new Uri (_test.BaseURI);
210 Uri testUri = new Uri (baseUri, _test.GetAttribute ("URI"));
212 bool nonValidatingPassed = TestNonValidating (testUri.ToString ());
213 bool validatingPassed = TestValidating (testUri.ToString ());
215 bool isok = isOK (type, nonValidatingPassed, validatingPassed);
217 if (_inverseResult) {
219 message = "The following test was FIXED:\n";
225 message += "type:"+type;
226 message += " non-validating passed:"+nonValidatingPassed.ToString();
227 message += " validating passed:"+validatingPassed.ToString();
228 message += " description:"+_test.InnerText;
229 res.Failure (message, _errorString);
233 static bool isOK (string type, bool nonValidatingPassed, bool validatingPassed)
237 return nonValidatingPassed && validatingPassed;
239 return nonValidatingPassed && !validatingPassed;
241 return !nonValidatingPassed && !validatingPassed;
243 return true; //readers can optionally accept or reject errors
245 throw new ArgumentException ("Wrong test type", "type");