summaryrefslogtreecommitdiff
path: root/mcs/class/System.XML/Test/System.Xml.Schema/XmlSchemaCollectionTests.cs
blob: 141f9f3d4785dc8db4d9b102662fcff2ffa7e5ba (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
//
// System.Xml.XmlSchemaCollectionTests.cs
//
// Author:
//   Atsushi Enomoto <ginga@kit.hi-ho.ne.jp>
//
// (C) 2002 Atsushi Enomoto
//

using System;
using System.Globalization;
using System.IO;
using System.Xml;
using System.Xml.Schema;
using NUnit.Framework;

namespace MonoTests.System.Xml
{
	[TestFixture]
	public class XmlSchemaCollectionTests
	{
		private XmlSchema GetSchema (string path)
		{
			return XmlSchema.Read (new XmlTextReader (path), null);
		}

		private XmlQualifiedName QName (string name, string ns)
		{
			return new XmlQualifiedName (name, ns);
		}

		[Test]
		public void TestAdd ()
		{
			XmlSchemaCollection col = new XmlSchemaCollection ();
			XmlSchema schema = new XmlSchema ();
			XmlSchemaElement elem = new XmlSchemaElement ();
			elem.Name = "foo";
			schema.Items.Add (elem);
			schema.TargetNamespace = "urn:foo";
			col.Add (schema);
			col.Add (schema);	// No problem !?

			XmlSchema schema2 = new XmlSchema ();
			schema2.Items.Add (elem);
			schema2.TargetNamespace = "urn:foo";
			col.Add (schema2);	// No problem !!

			schema.Compile (null);
			col.Add (schema);
			col.Add (schema);	// Still no problem !!!

			schema2.Compile (null);
			col.Add (schema2);

			schema = GetSchema ("Test/XmlFiles/xsd/3.xsd");
			schema.Compile (null);
			col.Add (schema);

			schema2 = GetSchema ("Test/XmlFiles/xsd/3.xsd");
			schema2.Compile (null);
			col.Add (schema2);
		}

		[Test]
		public void TestAddDoesCompilation ()
		{
			XmlSchema schema = new XmlSchema ();
			Assert.IsFalse (schema.IsCompiled);
			XmlSchemaCollection col = new XmlSchemaCollection ();
			col.Add (schema);
			Assert.IsTrue (schema.IsCompiled);
		}

		[Test] // bug #75126
		public void TestGetEnumerator ()
		{
			new XmlSchemaCollection().GetEnumerator();
		}

		[Test] // bug #78220
		public void TestCompile ()
		{
			string schemaFragment1 = string.Format (CultureInfo.InvariantCulture,
				"<?xml version=\"1.0\" encoding=\"utf-16\"?>{0}" +
				"<xs:schema xmlns:tns=\"NSDate\" elementFormDefault=\"qualified\" targetNamespace=\"NSDate\" xmlns:xs=\"http://www.w3.org/2001/XMLSchema\">{0}" +
				"  <xs:import namespace=\"NSStatus\" />{0}" +
				"  <xs:element name=\"trans\" type=\"tns:TranslationStatus\" />{0}" +
				"  <xs:complexType name=\"TranslationStatus\">{0}" +
				"    <xs:simpleContent>{0}" +
				"      <xs:extension xmlns:q1=\"NSStatus\" base=\"q1:StatusType\">{0}" +
				"        <xs:attribute name=\"Language\" type=\"xs:int\" use=\"required\" />{0}" +
				"      </xs:extension>{0}" +
				"    </xs:simpleContent>{0}" +
				"  </xs:complexType>{0}" +
				"</xs:schema>", Environment.NewLine);

			string schemaFragment2 = string.Format (CultureInfo.InvariantCulture,
				"<?xml version=\"1.0\" encoding=\"utf-16\"?>{0}" +
				"<xs:schema xmlns:tns=\"NSStatus\" elementFormDefault=\"qualified\" targetNamespace=\"NSStatus\" xmlns:xs=\"http://www.w3.org/2001/XMLSchema\">{0}" +
				"  <xs:simpleType name=\"StatusType\">{0}" +
				"    <xs:restriction base=\"xs:string\">{0}" +
				"      <xs:enumeration value=\"Untouched\" />{0}" +
				"      <xs:enumeration value=\"Touched\" />{0}" +
				"      <xs:enumeration value=\"Complete\" />{0}" +
				"      <xs:enumeration value=\"None\" />{0}" +
				"    </xs:restriction>{0}" +
				"  </xs:simpleType>{0}" +
				"</xs:schema>", Environment.NewLine);

			XmlSchema schema1 = XmlSchema.Read (new StringReader (schemaFragment1), null);
			XmlSchema schema2 = XmlSchema.Read (new StringReader (schemaFragment2), null);

			XmlSchemaCollection schemas = new XmlSchemaCollection ();
			schemas.Add (schema2);
			schemas.Add (schema1);

			Assert.IsTrue (schema1.IsCompiled, "#1");
			Assert.IsTrue (schema2.IsCompiled, "#2");
		}
	}
}