2 // MonoTests.System.Xml.Serialization.XmlSerializationWriterTests
\r
4 // Author: Erik LeBel <eriklebel@yahoo.ca>
\r
6 // (C) Erik LeBel 2003
\r
8 // FIXME add tests for callbacks
\r
9 // FIXME add tests for writes that generate namespaces
\r
10 // FIXME add test that write XmlNode objects
\r
16 using System.Xml.Serialization;
\r
18 using NUnit.Framework;
\r
20 namespace MonoTests.System.XmlSerialization
\r
22 // base, common implementation of XmlSerializationWriter test harness.
\r
23 // the reason for this is that all auto generated namespace prefixes
\r
24 // of the form q# are modified by any Write* that defines a new namespace.
\r
25 // The result of this is that even though we redefine the string results
\r
26 // to exclude previous tests, the q#s will change depending on number of
\r
27 // namespace declarations were made prior to the perticual test. This
\r
28 // means that if the [Test] methods are called out of sequence, they
\r
29 // all start to fail. For this reason, tests that define and verify
\r
30 // temporary namespaces should be stored in a seperate class which protects
\r
31 // itself from accidental pre-definitions.
\r
32 public class XmlSerializarionWriterTester : XmlSerializationWriter
\r
34 // appease the compiler
\r
35 protected override void InitCallbacks ()
\r
40 XmlTextWriter writer;
\r
43 protected void Reset()
\r
45 sw = new StringWriter ();
\r
46 writer = new XmlTextWriter (sw);
\r
47 writer.QuoteChar = '\'';
\r
48 writer.Formatting = Formatting.None;
\r
52 protected string Content
\r
56 string val = sw.GetStringBuilder().ToString();
\r
57 // Console.WriteLine(val);
\r
63 // this class tests the methods of the XmlSerializationWriter that
\r
64 // can be executed out of order.
\r
66 public class XmlSerializationWriterSimpleTests : XmlSerializarionWriterTester
\r
68 const string ANamespace = "some:urn";
\r
70 // These TestFrom* methods indirectly test the functionality of XmlCustomFormatter
\r
73 public void TestFromByteArrayBase64()
\r
76 // This should work according to Mono's API, but .NET's FromByteArrayBase64
\r
77 // returns a byte array.
\r
79 //string val = this.FromByteArrayBase64(new byte [] {143, 144, 1, 0});
\r
80 //Assertion.AssertEquals(FromByteArrayBase64(null), "");
\r
82 //val = FromByteArrayBase64(null);
\r
83 //try/catch or AssertEruals?
\r
87 public void TestFromByteArrayHex()
\r
89 byte [] vals = {143, 144, 1, 0};
\r
90 Assertion.AssertEquals("8F900100", FromByteArrayHex(vals));
\r
91 Assertion.AssertEquals(null, FromByteArrayHex(null));
\r
95 public void TestFromChar()
\r
97 Assertion.AssertEquals("97", FromChar('a'));
\r
98 Assertion.AssertEquals("0", FromChar('\0'));
\r
99 Assertion.AssertEquals("10", FromChar('\n'));
\r
100 Assertion.AssertEquals("65281", FromChar('\uFF01'));
\r
104 public void TestFromDate()
\r
106 DateTime d = new DateTime();
\r
107 Assertion.AssertEquals("0001-01-01", FromDate(d));
\r
111 public void TestFromDateTime()
\r
113 DateTime d = new DateTime();
\r
114 Assertion.AssertEquals("0001-01-01T00:00:00.0000000", FromDateTime(d).Substring (0, 27));
\r
118 public void TestFromEnum()
\r
120 long[] ids = {1, 2, 3, 4};
\r
121 string[] values = {"one", "two", "three"};
\r
123 Assertion.AssertEquals("one", FromEnum(1, values, ids));
\r
124 Assertion.AssertEquals("", FromEnum(0, values, ids));
\r
128 string dummy = FromEnum(4, values, ids);
\r
129 Assertion.Fail("This should fail with an array-out-of-bunds error");
\r
137 public void TestFromTime()
\r
139 DateTime d = new DateTime();
\r
140 // Don't include time zone.
\r
141 Assertion.AssertEquals("00:00:00.0000000", FromTime(d).Substring (0, 16));
\r
145 public void TestFromXmlName()
\r
147 Assertion.AssertEquals("Hello", FromXmlName("Hello"));
\r
148 Assertion.AssertEquals("go_x0020_dogs_x0020_go", FromXmlName("go dogs go"));
\r
149 Assertion.AssertEquals("what_x0027_s_x0020_up", FromXmlName("what's up"));
\r
150 Assertion.AssertEquals("_x0031_23go", FromXmlName("123go"));
\r
151 Assertion.AssertEquals("Hello_x0020_what_x0027_s.up", FromXmlName("Hello what's.up"));
\r
155 public void TestFromXmlNCName()
\r
157 Assertion.AssertEquals("Hello", FromXmlNCName("Hello"));
\r
158 Assertion.AssertEquals("go_x0020_dogs_x0020_go", FromXmlNCName("go dogs go"));
\r
159 Assertion.AssertEquals("what_x0027_s_x0020_up", FromXmlNCName("what's up"));
\r
160 Assertion.AssertEquals("_x0031_23go", FromXmlNCName("123go"));
\r
161 Assertion.AssertEquals("Hello_x0020_what_x0027_s.up", FromXmlNCName("Hello what's.up"));
\r
165 public void TestFromXmlNmToken()
\r
167 Assertion.AssertEquals("Hello", FromXmlNmToken("Hello"));
\r
168 Assertion.AssertEquals("go_x0020_dogs_x0020_go", FromXmlNmToken("go dogs go"));
\r
169 Assertion.AssertEquals("what_x0027_s_x0020_up", FromXmlNmToken("what's up"));
\r
170 Assertion.AssertEquals("123go", FromXmlNmToken("123go"));
\r
171 Assertion.AssertEquals("Hello_x0020_what_x0027_s.up", FromXmlNmToken("Hello what's.up"));
\r
175 public void TestFromXmlNmTokens()
\r
177 Assertion.AssertEquals("Hello go dogs_go 123go what_x0027_s.up", FromXmlNmTokens("Hello go dogs_go 123go what's.up"));
\r
181 public void TestWriteAttribute()
\r
183 WriteStartElement("x");
\r
184 WriteAttribute("a", "b");
\r
186 Assertion.AssertEquals("<x a='b' />", Content);
\r
189 WriteStartElement("x");
\r
190 WriteAttribute("a", new byte[] {1, 2, 3});
\r
192 Assertion.AssertEquals("<x a='AQID' />", Content);
\r
195 WriteStartElement("x");
\r
196 WriteAttribute("a", "<b");
\r
198 Assertion.AssertEquals("<x a='<b' />", Content);
\r
201 WriteStartElement("x");
\r
202 string typedPlaceholder = null;
\r
203 WriteAttribute("a", typedPlaceholder);
\r
205 Assertion.AssertEquals("<x />", Content);
\r
208 WriteStartElement("x");
\r
209 WriteAttribute("a", "\"");
\r
211 Assertion.AssertEquals("<x a='\"' />", Content);
\r
214 WriteStartElement("x");
\r
215 WriteAttribute("a", "b\nc");
\r
217 Assertion.AssertEquals("<x a='b
c' />", Content);
\r
220 WriteStartElement("x");
\r
221 WriteAttribute("a", ANamespace, "b");
\r
223 Assertion.AssertEquals("<x d1p1:a='b' xmlns:d1p1='some:urn' />", Content);
\r
229 public void TestWriteElementEncoded()
\r
236 public void TestWriteElementLiteral()
\r
243 public void TestWriteElementString()
\r
245 WriteElementString("x", "a");
\r
246 Assertion.AssertEquals("<x>a</x>", Content);
\r
249 WriteElementString("x", "<a");
\r
250 Assertion.AssertEquals("<x><a</x>", Content);
\r
254 public void TestWriteElementStringRaw()
\r
256 byte [] placeHolderArray = null;
\r
257 WriteElementStringRaw("x", placeHolderArray);
\r
258 Assertion.AssertEquals("", Content);
\r
261 WriteElementStringRaw("x", new byte[] {0, 2, 4});
\r
262 Assertion.AssertEquals("<x>AAIE</x>", Content);
\r
265 WriteElementStringRaw("x", new byte[] {});
\r
266 Assertion.AssertEquals("<x />", Content);
\r
268 // Note to reader, the output is not valid xml
\r
270 WriteElementStringRaw("x", "a > 13 && a < 19");
\r
271 Assertion.AssertEquals("<x>a > 13 && a < 19</x>", Content);
\r
275 public void TestWriteEmptyTag()
\r
277 WriteEmptyTag("x");
\r
278 Assertion.AssertEquals("<x />", Content);
\r
282 public void TestWriteNamespaceDeclarations()
\r
284 XmlSerializerNamespaces ns = new XmlSerializerNamespaces();
\r
286 WriteStartElement("x");
\r
287 WriteNamespaceDeclarations(ns);
\r
289 Assertion.AssertEquals("<x />", Content);
\r
292 ns.Add("mypref", ANamespace);
\r
293 WriteStartElement("x");
\r
294 WriteNamespaceDeclarations(ns);
\r
296 Assertion.AssertEquals(XmlSerializerTests.Infoset("<x xmlns:mypref='some:urn' />"), XmlSerializerTests.Infoset(Content));
\r
299 ns.Add("ns2", "another:urn");
\r
300 WriteStartElement("x");
\r
301 WriteNamespaceDeclarations(ns);
\r
303 Assertion.AssertEquals(XmlSerializerTests.Infoset("<x xmlns:ns2='another:urn' xmlns:mypref='some:urn' />"), XmlSerializerTests.Infoset(Content));
\r
306 ns.Add("ns3", "ya:urn");
\r
307 WriteStartElement("x");
\r
308 WriteNamespaceDeclarations(ns);
\r
310 Assertion.AssertEquals(XmlSerializerTests.Infoset("<x xmlns:ns3='ya:urn' xmlns:ns2='another:urn' xmlns:mypref='some:urn' />"), XmlSerializerTests.Infoset(Content));
\r
314 public void TestWriteNullableStringLiteral()
\r
316 WriteNullableStringLiteral("x", null, null);
\r
317 Assertion.AssertEquals(XmlSerializerTests.Infoset("<x d1p1:nil='true' xmlns:d1p1='http://www.w3.org/2001/XMLSchema-instance' />"), XmlSerializerTests.Infoset(Content));
\r
320 WriteNullableStringLiteral("x", null, "");
\r
321 Assertion.AssertEquals("<x />", Content);
\r
324 WriteNullableStringLiteral("x", null, "a<b\'c");
\r
325 Assertion.AssertEquals("<x>a<b\'c</x>", Content);
\r
328 WriteNullableStringLiteral("x", ANamespace, "b");
\r
329 Assertion.AssertEquals("<x xmlns='some:urn'>b</x>", Content);
\r
333 public void TestWriteNullableStringLiteralRaw()
\r
335 WriteNullableStringLiteralRaw("x", null, new byte[] {1, 2, 244});
\r
336 Assertion.AssertEquals("<x>AQL0</x>", Content);
\r
340 public void TestWriteNullTagEncoded()
\r
342 WriteNullTagEncoded("x");
\r
343 Assertion.AssertEquals(XmlSerializerTests.Infoset("<x d1p1:nil='true' xmlns:d1p1='http://www.w3.org/2001/XMLSchema-instance' />"), XmlSerializerTests.Infoset(Content));
\r
347 public void TestWriteNullTagLiteral()
\r
349 WriteNullTagLiteral("x");
\r
350 Assertion.AssertEquals(XmlSerializerTests.Infoset("<x d1p1:nil='true' xmlns:d1p1='http://www.w3.org/2001/XMLSchema-instance' />"), XmlSerializerTests.Infoset(Content));
\r
354 public void TestWriteSerializable()
\r
357 //Assertion.AssertEquals(, "");
\r
360 public void TestWriteStartDocument()
\r
362 Assertion.AssertEquals("", Content);
\r
364 WriteStartDocument();
\r
365 Assertion.AssertEquals("<?xml version='1.0' encoding='utf-16'?>", Content);
\r
369 public void TestWriteStartElement()
\r
371 WriteStartElement("x");
\r
373 Assertion.AssertEquals("<x />", Content);
\r
376 WriteStartElement("x");
\r
379 Assertion.AssertEquals("<x>a</x>", Content);
\r
382 WriteStartElement("x");
\r
383 WriteStartElement("y", "z");
\r
386 Assertion.AssertEquals("<x><y xmlns='z' /></x>", Content);
\r
389 WriteStartElement("x");
\r
390 WriteStartElement("y", "z", true);
\r
393 Assertion.AssertEquals("<x><q1:y xmlns:q1='z' /></x>", Content);
\r
396 public void TestWriteTypedPrimitive()
\r
398 // as long as WriteTypePrimitive's last argument is false, this is OK here.
\r
399 WriteTypedPrimitive("x", ANamespace, "hello", false);
\r
400 Assertion.AssertEquals("<x xmlns='some:urn'>hello</x>", Content);
\r
403 WriteTypedPrimitive("x", ANamespace, 10, false);
\r
404 Assertion.AssertEquals("<x xmlns='some:urn'>10</x>", Content);
\r
408 WriteTypedPrimitive("x", ANamespace, null, false);
\r
409 Assertion.Fail("Should not be able to write a null primitive");
\r
416 public void TestWriteValue()
\r
419 Assertion.AssertEquals("", Content);
\r
422 WriteValue("hello");
\r
423 Assertion.AssertEquals("hello", Content);
\r
428 Assertion.AssertEquals("", Content);
\r
431 WriteValue(new byte[] {13, 8, 99});
\r
432 Assertion.AssertEquals("DQhj", Content);
\r
435 public void TestWriteXmlAttribute()
\r
441 public void TestWriteXsiType()
\r
443 WriteStartElement("x");
\r
444 WriteXsiType("pref", null);
\r
446 Assertion.AssertEquals(XmlSerializerTests.Infoset("<x d1p1:type='pref' xmlns:d1p1='http://www.w3.org/2001/XMLSchema-instance' />"), XmlSerializerTests.Infoset(Content));
\r