Add a more functional (i.e. fewer-stubs) implementation of System.Data.Linq.
[mono.git] / mcs / class / Commons.Xml.Relaxng / Test / RelaxngDatatypeProviderTests.cs
1 //
2 // RelaxngDatatypeProviderTest.cs
3 //
4 // Authors:
5 //      Atsushi Enomoto <atsushi@ximian.com>
6 //
7
8 using System;
9 using System.IO;
10 using System.Xml;
11 using Commons.Xml.Relaxng;
12 using Commons.Xml.Relaxng.XmlSchema;
13 using NUnit.Framework;
14
15 namespace MonoTests.Commons.Xml.Relaxng
16 {
17         [TestFixture]
18         public class RelaxngDatatypeProviderTests
19         {
20                 [Test]
21                 public void CustomTypeProvider ()
22                 {
23                         var datatypeLibrary = SetupMyDataProvider ();
24                         XmlDocument xml = new XmlDocument ();
25                         xml.LoadXml ("<root> <v1>mytype</v1> <v2>1</v2> </root>");
26                         XmlDocument schemaXml = ReadDoc ("Test/XmlFiles/463264.rng");
27                         XmlReader reader = new RelaxngValidatingReader (new XmlNodeReader (xml), new XmlNodeReader (schemaXml), datatypeLibrary);
28                         while (reader.Read ())
29                                 ;
30                 }
31
32                 [Test]
33                 public void Bug463267 ()
34                 {
35                         var datatypeLibrary = SetupMyDataProvider ();
36                         XmlDocument xml = new XmlDocument ();
37                         xml.LoadXml ("<root> <v2>1</v2> <v1>mytype</v1> </root>");
38                         XmlDocument schemaXml = ReadDoc ("Test/XmlFiles/463267.rng");
39                         XmlReader reader = new RelaxngValidatingReader (new XmlNodeReader (xml), new XmlNodeReader (schemaXml), datatypeLibrary);
40                         while (reader.Read ())
41                                 ;
42                 }
43
44                 RelaxngDatatypeProvider SetupMyDataProvider ()
45                 {
46                         var datatypeLibrary = new RelaxngMergedProvider ();
47
48                         datatypeLibrary [MyRngTypeProvider.Namespace] = new MyRngTypeProvider();
49                         datatypeLibrary ["http://www.w3.org/2001/XMLSchema-datatypes"] = XsdDatatypeProvider.Instance;
50                         datatypeLibrary [System.Xml.Schema.XmlSchema.Namespace] = XsdDatatypeProvider.Instance;
51                         datatypeLibrary [String.Empty] = RelaxngMergedProvider.DefaultProvider [string.Empty];
52                         return datatypeLibrary;
53                 }
54
55                 XmlDocument ReadDoc (string s)
56                 {
57                         var d = new XmlDocument ();
58                         d.Load (s);
59                         return d;
60                 }
61         }
62
63         class MyRngTypeProvider : RelaxngDatatypeProvider
64         {
65                 public static readonly string Namespace = "http://tempuri.org/mytypes";
66
67                 public override RelaxngDatatype GetDatatype(string name, string ns, RelaxngParamList parameters)
68                 {
69                         switch (name)
70                         {
71                         case "mytype":
72                             return new MyType();
73                         }
74                         return null;
75                 }
76         }
77
78         class MyType : RelaxngDatatype
79         {
80                 public override string Name {
81                         get { return "mytype"; }
82                 }
83
84                 public override string NamespaceURI {
85                         get { return MyRngTypeProvider.Namespace; }
86                 }
87
88                 public override object Parse (string text, System.Xml.XmlReader reader)
89                 {
90                         return text;
91                 }
92
93                 public override bool IsValid (string text, System.Xml.XmlReader reader)
94                 {
95                         return ((string) Parse (text, reader)) == "mytype";
96                 }
97         }
98 }