**** Merged from MCS ****
[mono-project.git] / mcs / class / Commons.Xml.Relaxng / Test / standalone_tests / relaxngtest.cs
blob5b7f3f50bb5d3d45bd45a8906137ef3f75c3a987
1 using System;
2 using System.IO;
3 using System.Xml;
4 using Commons.Xml.Relaxng;
5 using Commons.Xml.Relaxng.Derivative;
7 public class Test
9 static char SEP = Path.DirectorySeparatorChar;
11 public static void Main ()
13 Console.WriteLine ("Started: " + DateTime.Now.ToString ("yyyy-MM-dd HH:mm:ss.fff"));
14 RunTest ();
15 Console.WriteLine ("Finished: " + DateTime.Now.ToString ("yyyy-MM-dd HH:mm:ss.fff"));
18 static void RunTest ()
20 foreach (DirectoryInfo di in
21 new DirectoryInfo (@"relax-ng").GetDirectories ()) {
24 if (di.Name == "056") // baseURI
25 continue;
26 if (di.Name == "102") // invalid URI fragment
27 continue;
28 if (di.Name == "208") // infinite loop!!
29 continue;
30 if (di.Name == "210") // infinite loop!!
31 continue;
34 XmlTextReader xtr = null;
35 FileInfo fi = new FileInfo (di.FullName + "/i.rng");
36 // Invalid grammar case:
37 if (fi.Exists) {
38 xtr = new XmlTextReader (fi.FullName);
39 try {
40 RelaxngPattern.Read (xtr).Compile ();
41 Console.WriteLine ("Expected error: " + di.Name);
42 } catch (RelaxngException ex) {
43 } catch (XmlException ex) {
44 } catch (ArgumentNullException ex) {
45 } catch (UriFormatException ex) {
46 } catch (Exception ex) {
47 Console.WriteLine ("Unexpected error type : " + di.Name + " : " + ex.Message);
48 } finally {
49 xtr.Close ();
51 continue;
54 // Valid grammar case:
55 xtr = new XmlTextReader (di.FullName + "/c.rng");
56 RelaxngPattern p = null;
57 try {
58 p = RelaxngPattern.Read (xtr);
59 p.Compile ();
60 } catch (Exception ex) {
61 Console.WriteLine ("Invalidated grammar: " + di.Name + " : " + ex.Message);
62 continue;
63 } finally {
64 xtr.Close ();
68 // Instance validation
69 foreach (FileInfo inst in di.GetFiles ("*.xml")) {
70 try {
71 RelaxngValidatingReader vr = new RelaxngValidatingReader (new XmlTextReader (inst.FullName), p);
72 while (!vr.EOF)
73 vr.Read ();
74 if (inst.Name.IndexOf ("i.") >= 0)
75 Console.WriteLine ("Incorrectly validated instance: " + di.Name + "/" + inst.Name);
76 } catch (RelaxngException ex) {
77 if (inst.Name.IndexOf ("i.") >= 0)
78 continue;
79 Console.WriteLine ("Invalidated instance: " + di.Name + "/" + inst.Name + " : " + ex.Message);