Merge pull request #1337 from RyanMelenaNoesis/master
[mono.git] / mcs / class / Commons.Xml.Relaxng / Test / RncTests.cs
1 //
2 // RncTests.cs
3 //
4 // Authors:
5 //      Atsushi Enomoto <atsushi@ximian.com>
6 //
7 // (C) 2004 Novell Inc.
8 //
9
10 using System;
11 using System.IO;
12 using System.Text;
13 using System.Xml;
14 using Commons.Xml.Relaxng;
15 using Commons.Xml.Relaxng.Rnc;
16 using NUnit.Framework;
17
18 namespace MonoTests.Commons.Xml.Relaxng
19 {
20         [TestFixture]
21         public class RncTests
22         {
23                 RelaxngPattern Compile (string file)
24                 {
25                         using (StreamReader sr = new StreamReader (file)) {
26                                 return Compile (sr, file);
27                         }
28                 }
29
30                 RelaxngPattern Compile (TextReader reader)
31                 {
32                         return Compile (reader, null);
33                 }
34
35                 RelaxngPattern Compile (TextReader reader, string baseUri)
36                 {
37                         RncParser parser = new RncParser (new NameTable ());
38                         RelaxngPattern g = parser.Parse (reader, baseUri);
39                         g.Compile ();
40                         return g;
41                 }
42
43                 [Test]
44                 public void TestRelaxngRnc ()
45                 {
46                         Compile ("Test/XmlFiles/relaxng.rnc");
47                 }
48
49                 [Test]
50                 public void TestAtomRnc ()
51                 {
52                         Compile ("Test/XmlFiles/atom.rnc");
53                 }
54
55                 [Test]
56                 public void TestInfocardRnc ()
57                 {
58                         Compile ("Test/XmlFiles/schemas-xmlsoap-or-ws-2005-05-identity.rnc");
59                 }
60
61                 [Test]
62                 // Make sure that it is not rejected by ambiguity between
63                 // foreign attribute and foreign element.
64                 public void Annotations ()
65                 {
66                         string rnc = @"
67 namespace s = ""urn:foo""
68 mine =
69   [
70     s:foo []
71     s:foo = ""value""
72   ]
73   element foo { empty }
74
75 start = mine";
76                         Compile (new StringReader (rnc));
77                 }
78
79                 [Test]
80                 public void SurrogateLiteral ()
81                 {
82                         Compile (new StringReader ("element foo { \"\\x{10FFFF}\" }"));
83                 }
84
85                 [Test]
86                 public void InheritDefaultNamespace ()
87                 {
88                         RelaxngPattern g = Compile ("Test/XmlFiles/include-default-namespace.rnc");
89                         XmlReader xtr = new XmlTextReader ("Test/XmlFiles/include-default-namespace.xml");
90                         RelaxngValidatingReader r = new RelaxngValidatingReader (xtr, g);
91                         try {
92                                 while (!r.EOF)
93                                         r.Read ();
94                         } finally {
95                                 r.Close ();
96                         }
97                 }
98                 
99                 [Test]
100                 public void SimpleDefaultNamespace ()
101                 {
102                         var g = RncParser.ParseRnc (new StringReader ("element e { empty }"));
103                         var x = XmlReader.Create (new StringReader ("<e/>"));
104                         var r = new RelaxngValidatingReader (x, g); 
105                         try {
106                                 while (!r.EOF)
107                                         r.Read ();
108                         } finally {
109                                 r.Close ();
110                         }
111                 }
112         }
113 }