2 // ResXResourceReaderTest.cs: Unit Tests for ResXResourceReader.
5 // Gert Driesen <drieseng@users.sourceforge.net>
6 // Olivier Dufour <olivier.duff@gmail.com>
7 // Gary Barnett <gary.barnett.mono@gmail.com>
10 using System.Collections;
12 using System.Globalization;
14 using System.Resources;
16 using System.Windows.Forms;
18 using System.Runtime.Serialization;
20 using NUnit.Framework;
21 using System.Reflection;
23 namespace MonoTests.System.Resources {
25 public class ResXResourceReaderTest : MonoTests.System.Windows.Forms.TestHelper
27 private string _tempDirectory;
28 private string _otherTempDirectory;
31 protected override void SetUp ()
33 _tempDirectory = Path.Combine (Path.GetTempPath (), "ResXResourceReaderTest");
34 _otherTempDirectory = Path.Combine (_tempDirectory, "in");
35 if (!Directory.Exists (_otherTempDirectory)) {
36 Directory.CreateDirectory (_otherTempDirectory);
42 protected override void TearDown ()
44 if (Directory.Exists (_tempDirectory))
45 Directory.Delete (_tempDirectory, true);
49 [Test] // ctor (Stream)
50 public void Constructor1_Stream_InvalidContent ()
52 MemoryStream ms = new MemoryStream ();
53 ms.WriteByte (byte.MaxValue);
55 ResXResourceReader r = new ResXResourceReader (ms);
59 } catch (ArgumentException ex) {
61 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#2");
62 Assert.IsNotNull (ex.Message, "#3");
63 Assert.IsNull (ex.ParamName, "#4");
64 Assert.IsNotNull (ex.InnerException, "#5");
68 [Test] // ctor (Stream)
69 [Category ("NotDotNet")] // MS throws a NullReferenceException in GetEnumerator ()
70 public void Constructor1_Stream_Null ()
73 new ResXResourceReader ((Stream) null);
75 } catch (ArgumentNullException ex) {
76 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
77 Assert.IsNull (ex.InnerException, "#3");
78 Assert.IsNotNull (ex.Message, "#4");
79 Assert.AreEqual ("stream", ex.ParamName, "#5");
83 [Test] // ctor (String)
84 public void Constructor2_FileName_DoesNotExist ()
86 ResXResourceReader r = new ResXResourceReader ((string) "definitelydoesnotexist.zzz");
90 } catch (FileNotFoundException ex) {
91 Assert.AreEqual (typeof (FileNotFoundException), ex.GetType (), "#2");
92 Assert.IsNotNull (ex.FileName, "#3");
93 Assert.IsNotNull (ex.Message, "#4");
94 Assert.IsNull (ex.InnerException, "#5");
98 [Test] // ctor (TextReader)
99 public void Constructor3_Reader_InvalidContent ()
101 StringReader sr = new StringReader ("</definitelyinvalid<");
102 ResXResourceReader r = new ResXResourceReader (sr);
106 } catch (ArgumentException ex) {
107 // Invalid ResX input
108 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#2");
109 Assert.IsNotNull (ex.Message, "#3");
110 Assert.IsNull (ex.ParamName, "#4");
111 Assert.IsNotNull (ex.InnerException, "#5");
112 Assert.AreEqual (typeof (XmlException), ex.InnerException.GetType (), "#6");
117 public void Close_FileName ()
119 string fileName = Path.Combine (Path.Combine ("Test", "System.Resources"), "compat_1_1.resx");
120 if (!File.Exists (fileName))
121 fileName = String.Format ("..{0}System.Resources{0}compat_1_1.resx", Path.DirectorySeparatorChar);
123 ResXResourceReader r1 = new ResXResourceReader (fileName);
128 ResXResourceReader r2 = new ResXResourceReader (fileName);
135 public void Close_Reader ()
137 string fileName = Path.Combine (Path.Combine ("Test", "System.Resources"), "compat_1_1.resx");
138 if (!File.Exists (fileName))
139 fileName = String.Format ("..{0}System.Resources{0}compat_1_1.resx", Path.DirectorySeparatorChar);
141 using (StreamReader sr = new StreamReader (fileName)) {
142 ResXResourceReader r = new ResXResourceReader (sr);
143 Assert.IsFalse (sr.Peek () == -1, "#A1");
145 Assert.IsTrue (sr.Peek () == -1, "#A2");
150 } catch (ObjectDisposedException) {
155 using (StreamReader sr = new StreamReader (fileName)) {
156 ResXResourceReader r = new ResXResourceReader (sr);
161 } catch (ObjectDisposedException) {
166 } catch (NullReferenceException) { // MS
167 } catch (InvalidOperationException) { // Mono
173 public void Close_Stream ()
175 string fileName = Path.Combine (Path.Combine ("Test", "System.Resources"), "compat_1_1.resx");
176 if (!File.Exists (fileName))
177 fileName = String.Format ("..{0}System.Resources{0}compat_1_1.resx", Path.DirectorySeparatorChar);
179 using (FileStream fs = File.OpenRead (fileName)) {
180 ResXResourceReader r = new ResXResourceReader (fs);
181 Assert.AreEqual (0, fs.Position, "#A1");
183 Assert.IsFalse (fs.Position == 0, "#A2");
184 Assert.IsTrue (fs.CanRead, "#A3");
186 Assert.IsTrue (fs.CanRead, "#A4");
187 r.GetEnumerator ().MoveNext ();
190 using (FileStream fs = File.OpenRead (fileName)) {
191 ResXResourceReader r = new ResXResourceReader (fs);
193 Assert.AreEqual (0, fs.Position, "#B1");
195 Assert.IsFalse (fs.Position == 0, "#B2");
200 public void ExternalFileReference_Icon ()
202 string refFile = Path.Combine (_tempDirectory, "32x32.ico");
203 WriteEmbeddedResource ("32x32.ico", refFile);
205 string resxFile = Path.Combine (_tempDirectory, "resources.resx");
206 using (StreamWriter sw = new StreamWriter (resxFile, false, Encoding.UTF8)) {
207 sw.Write (string.Format (CultureInfo.InvariantCulture,
208 _resXFileRefTemplate, ResXResourceWriter.ResMimeType, "1.0",
209 Consts.AssemblySystem_Windows_Forms, refFile,
210 typeof (Bitmap).AssemblyQualifiedName, string.Empty,
211 Consts.AssemblyCorlib));
214 using (ResXResourceReader r = new ResXResourceReader (resxFile)) {
215 IDictionaryEnumerator enumerator = r.GetEnumerator ();
216 enumerator.MoveNext ();
217 Assert.IsNotNull (enumerator.Current, "#A1");
218 Assert.AreEqual ("foo", enumerator.Key, "#A2");
219 Bitmap bitmap = enumerator.Value as Bitmap;
220 Assert.IsNotNull (bitmap, "#A3");
222 Assert.AreEqual (32, bitmap.Height, "#A4");
223 Assert.AreEqual (32, bitmap.Width, "#A5");
225 Assert.AreEqual (96, bitmap.Height, "#A4");
226 Assert.AreEqual (96, bitmap.Width, "#A5");
230 File.Delete (refFile);
231 File.Delete (resxFile);
233 refFile = Path.Combine (_tempDirectory, "32x32.ICO");
234 WriteEmbeddedResource ("32x32.ico", refFile);
236 using (StreamWriter sw = new StreamWriter (resxFile, false, Encoding.UTF8)) {
237 sw.Write (string.Format (CultureInfo.InvariantCulture,
238 _resXFileRefTemplate, ResXResourceWriter.ResMimeType, "1.0",
239 Consts.AssemblySystem_Windows_Forms, refFile,
240 typeof (Bitmap).AssemblyQualifiedName, string.Empty,
241 Consts.AssemblyCorlib));
244 using (ResXResourceReader r = new ResXResourceReader (resxFile)) {
245 IDictionaryEnumerator enumerator = r.GetEnumerator ();
246 enumerator.MoveNext ();
247 Assert.IsNotNull (enumerator.Current, "#B1");
248 Assert.AreEqual ("foo", enumerator.Key, "#B2");
249 Bitmap bitmap = enumerator.Value as Bitmap;
250 Assert.IsNotNull (bitmap, "#B3");
251 Assert.AreEqual (96, bitmap.Height, "#B4");
252 Assert.AreEqual (96, bitmap.Width, "#B5");
257 public void ExternalFileReference_RelativePath ()
259 string refFile = Path.Combine (_otherTempDirectory, "string.txt");
260 string relRefFile = Path.Combine ("in", "string.txt");
261 using (StreamWriter sw = new StreamWriter (refFile, false, Encoding.UTF8)) {
265 string resxFile = Path.Combine (_tempDirectory, "resources.resx");
266 using (StreamWriter sw = new StreamWriter (resxFile, false, Encoding.UTF8)) {
267 sw.Write (string.Format (CultureInfo.InvariantCulture,
268 _resXFileRefTemplate, ResXResourceWriter.ResMimeType, "1.0",
269 Consts.AssemblySystem_Windows_Forms,
270 "in" + Path.DirectorySeparatorChar + "string.txt",
271 typeof (StreamReader).AssemblyQualifiedName, string.Empty,
272 Consts.AssemblyCorlib));
275 using (ResXResourceReader r = new ResXResourceReader (resxFile)) {
279 } catch (ArgumentException ex) {
280 // Invalid ResX input
281 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#A2");
282 Assert.IsNotNull (ex.InnerException, "#A3");
283 Assert.IsNotNull (ex.Message, "#A4");
284 Assert.IsNull (ex.ParamName, "#A5");
287 // Could not find a part of the path "<current dir>\in\string.txt".
288 // Line 1, position 821
289 XmlException inner = ex.InnerException as XmlException;
290 Assert.IsNotNull (inner, "#A6");
291 Assert.AreEqual (typeof (XmlException), inner.GetType (), "#A7");
292 Assert.IsNotNull (inner.InnerException, "#A8");
293 Assert.AreEqual (1, inner.LineNumber, "#A9");
294 // Assert.AreEqual (821, inner.LinePosition, "#A10");
295 Assert.IsNotNull (inner.Message, "#A11");
296 Assert.IsTrue (inner.Message.IndexOf (Path.Combine (
297 Directory.GetCurrentDirectory (), relRefFile)) != -1, "#A12");
299 // Could not find a part of the path "<current dir>\in\string.txt"
300 Exception inner2 = inner.InnerException;
301 Assert.AreEqual (typeof (DirectoryNotFoundException), inner2.GetType (), "#A13");
302 Assert.IsNull (inner2.InnerException, "#A14");
303 Assert.IsNotNull (inner2.Message, "#A15");
304 Assert.IsTrue (inner2.Message.IndexOf (Path.Combine (
305 Directory.GetCurrentDirectory (), relRefFile)) != -1, "#A16");
307 // Could not find a part of the path "<current dir>\in\string.txt"
308 Exception inner = ex.InnerException;
309 Assert.AreEqual (typeof (DirectoryNotFoundException), inner.GetType (), "#A6");
310 Assert.IsNull (inner.InnerException, "#A7");
311 Assert.IsNotNull (inner.Message, "#A8");
312 Assert.IsTrue (inner.Message.IndexOf (Path.Combine (
313 Directory.GetCurrentDirectory (), relRefFile)) != -1, "#A9");
317 Assert.IsNull (r.BasePath, "#A17");
321 string originalCurrentDir = Directory.GetCurrentDirectory ();
322 Directory.SetCurrentDirectory (_tempDirectory);
324 using (ResXResourceReader r = new ResXResourceReader (resxFile)) {
325 IDictionaryEnumerator enumerator = r.GetEnumerator ();
326 enumerator.MoveNext ();
327 Assert.IsNotNull (enumerator.Current, "#B1");
328 Assert.AreEqual ("foo", enumerator.Key, "#B2");
329 using (StreamReader sr = enumerator.Value as StreamReader) {
330 Assert.IsNotNull (sr, "#B3");
331 Assert.AreEqual ("hello", sr.ReadToEnd (), "#B4");
334 Assert.IsNull (r.BasePath, "#B5");
338 // restore original current directory
339 Directory.SetCurrentDirectory (originalCurrentDir);
343 using (ResXResourceReader r = new ResXResourceReader (resxFile)) {
344 r.BasePath = _tempDirectory;
345 IDictionaryEnumerator enumerator = r.GetEnumerator ();
346 enumerator.MoveNext ();
347 Assert.IsNotNull (enumerator.Current, "#C1");
348 Assert.AreEqual ("foo", enumerator.Key, "#C2");
349 using (StreamReader sr = enumerator.Value as StreamReader) {
350 Assert.IsNotNull (sr, "#C3");
351 Assert.AreEqual ("hello", sr.ReadToEnd (), "#C4");
353 Assert.AreEqual (_tempDirectory, r.BasePath, "#C5");
356 using (ResXResourceReader r = new ResXResourceReader (resxFile)) {
357 r.BasePath = Path.GetTempPath ();
361 } catch (ArgumentException ex) {
362 // Invalid ResX input
363 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#D2");
364 Assert.IsNotNull (ex.InnerException, "#D3");
365 Assert.IsNotNull (ex.Message, "#D4");
366 Assert.IsNull (ex.ParamName, "#D5");
368 // Could not find a part of the path "<temp path>\in\string.txt".
369 // Line 1, position 821
370 XmlException inner = ex.InnerException as XmlException;
371 Assert.IsNotNull (inner, "#D6");
372 Assert.AreEqual (typeof (XmlException), inner.GetType (), "#D7");
373 Assert.IsNotNull (inner.InnerException, "#D8");
374 Assert.AreEqual (1, inner.LineNumber, "#D9");
375 // Assert.AreEqual (821, inner.LinePosition, "#D10");
376 Assert.IsNotNull (inner.Message, "#D11");
377 Assert.IsTrue (inner.Message.IndexOf (Path.Combine (
378 Path.GetTempPath (), relRefFile)) != -1, "#D12");
380 // Could not find a part of the path "<temp path>\in\string.txt"
381 Exception inner2 = inner.InnerException as Exception;
382 Assert.AreEqual (typeof (DirectoryNotFoundException), inner2.GetType (), "#D13");
383 Assert.IsNull (inner2.InnerException, "#D14");
384 Assert.IsNotNull (inner2.Message, "#D15");
385 Assert.IsTrue (inner2.Message.IndexOf (Path.Combine (
386 Path.GetTempPath (), relRefFile)) != -1, "#D16");
388 Assert.AreEqual (Path.GetTempPath (), r.BasePath, "#D17");
394 public void FileRef_String_UTF7 ()
396 string refFile = Path.Combine (_otherTempDirectory, "string.txt");
397 using (StreamWriter sw = new StreamWriter (refFile, false, Encoding.UTF7)) {
398 sw.Write ("\u0021\u0026\u002A\u003B");
401 string resxFile = Path.Combine (_tempDirectory, "resources.resx");
402 using (StreamWriter sw = new StreamWriter (resxFile, false, Encoding.UTF8)) {
403 sw.Write (string.Format (CultureInfo.InvariantCulture,
404 _resXFileRefTemplate, ResXResourceWriter.ResMimeType, "1.0",
405 Consts.AssemblySystem_Windows_Forms, refFile,
406 typeof (string).AssemblyQualifiedName, string.Empty,
407 Consts.AssemblyCorlib));
410 using (ResXResourceReader r = new ResXResourceReader (resxFile)) {
412 IDictionaryEnumerator enumerator = r.GetEnumerator ();
413 enumerator.MoveNext ();
414 Assert.IsNotNull (enumerator.Current, "#A1");
415 Assert.AreEqual ("foo", enumerator.Key, "#A2");
416 Assert.IsFalse ("\u0021\u0026\u002A\u003B" == (string) enumerator.Value, "#A3");
421 } catch (ArgumentException ex) {
422 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#A2");
423 Assert.IsNotNull (ex.InnerException, "#A3");
424 Assert.IsNotNull (ex.Message, "#A4");
425 Assert.IsNull (ex.ParamName, "#A5");
427 Assert.AreEqual (typeof (MissingMethodException), ex.InnerException.GetType (), "#A6");
432 resxFile = Path.Combine (_tempDirectory, "resources.resx");
433 using (StreamWriter sw = new StreamWriter (resxFile, false, Encoding.UTF8)) {
434 sw.Write (string.Format (CultureInfo.InvariantCulture,
435 _resXFileRefTemplate, ResXResourceWriter.ResMimeType, "1.0",
436 Consts.AssemblySystem_Windows_Forms, refFile,
437 typeof (string).AssemblyQualifiedName, ";utf-7",
438 Consts.AssemblyCorlib));
441 using (ResXResourceReader r = new ResXResourceReader (resxFile)) {
443 IDictionaryEnumerator enumerator = r.GetEnumerator ();
444 enumerator.MoveNext ();
445 Assert.IsNotNull (enumerator.Current, "#B1");
446 Assert.AreEqual ("foo", enumerator.Key, "#B2");
447 Assert.AreEqual ("\u0021\u0026\u002A\u003B", (string) enumerator.Value, "#B3");
452 } catch (ArgumentException ex) {
453 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#B2");
454 Assert.IsNotNull (ex.InnerException, "#B3");
455 Assert.IsNotNull (ex.Message, "#B4");
456 Assert.IsNull (ex.ParamName, "#B5");
458 Assert.AreEqual (typeof (MissingMethodException), ex.InnerException.GetType (), "#B6");
465 public void FileRef_String_UTF8 ()
467 string refFile = Path.Combine (_otherTempDirectory, "string.txt");
468 using (StreamWriter sw = new StreamWriter (refFile, false, Encoding.UTF8)) {
469 sw.Write ("\u0041\u2262\u0391\u002E");
472 string resxFile = Path.Combine (_tempDirectory, "resources.resx");
473 using (StreamWriter sw = new StreamWriter (resxFile, false, Encoding.UTF8)) {
474 sw.Write (string.Format (CultureInfo.InvariantCulture,
475 _resXFileRefTemplate, ResXResourceWriter.ResMimeType, "1.0",
476 Consts.AssemblySystem_Windows_Forms, refFile,
477 typeof (string).AssemblyQualifiedName, string.Empty,
478 Consts.AssemblyCorlib));
481 using (ResXResourceReader r = new ResXResourceReader (resxFile)) {
483 IDictionaryEnumerator enumerator = r.GetEnumerator ();
484 enumerator.MoveNext ();
485 Assert.IsNotNull (enumerator.Current, "#A1");
486 Assert.AreEqual ("foo", enumerator.Key, "#A2");
487 Assert.AreEqual ("\u0041\u2262\u0391\u002E", (string) enumerator.Value, "#A3");
492 } catch (ArgumentException ex) {
493 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#A2");
494 Assert.IsNotNull (ex.InnerException, "#A3");
495 Assert.IsNotNull (ex.Message, "#A4");
496 Assert.IsNull (ex.ParamName, "#A5");
498 Assert.AreEqual (typeof (MissingMethodException), ex.InnerException.GetType (), "#A6");
503 resxFile = Path.Combine (_tempDirectory, "resources.resx");
504 using (StreamWriter sw = new StreamWriter (resxFile, false, Encoding.UTF8)) {
505 sw.Write (string.Format (CultureInfo.InvariantCulture,
506 _resXFileRefTemplate, ResXResourceWriter.ResMimeType, "1.0",
507 Consts.AssemblySystem_Windows_Forms, refFile,
508 typeof (string).AssemblyQualifiedName, ";utf-8",
509 Consts.AssemblyCorlib));
512 using (ResXResourceReader r = new ResXResourceReader (resxFile)) {
514 IDictionaryEnumerator enumerator = r.GetEnumerator ();
515 enumerator.MoveNext ();
516 Assert.IsNotNull (enumerator.Current, "#B1");
517 Assert.AreEqual ("foo", enumerator.Key, "#B2");
518 Assert.AreEqual ("\u0041\u2262\u0391\u002E", (string) enumerator.Value, "#B3");
523 } catch (ArgumentException ex) {
524 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#B2");
525 Assert.IsNotNull (ex.InnerException, "#B3");
526 Assert.IsNotNull (ex.Message, "#B4");
527 Assert.IsNull (ex.ParamName, "#B5");
529 Assert.AreEqual (typeof (MissingMethodException), ex.InnerException.GetType (), "#B6");
536 public void Namespaces ()
538 const string resXTemplate =
539 "<?xml version=\"1.0\" encoding=\"utf-8\"?>" +
540 "<o:Document xmlns:x=\"http://www.mono-project.com\" xmlns:o=\"http://tempuri.org\">" +
542 " <x:DaTa name=\"name\">" +
543 " <o:value>de Icaza</o:value>" +
545 " <x:data name=\"firstName\">" +
548 " <o:data name=\"Address\" />" +
549 " <o:data name=\"city\">" +
550 " <x:value>Boston </x:value>" +
552 " <o:data name=\"country\">" +
555 " <o:data name=\"\">" +
558 " <o:data name=\"country\">" +
559 " <x:value>Belgium</x:value>" +
561 " <data name=\"zip\">" +
562 " <value><![CDATA[ <3510> ]]></value>" +
566 " <o:resheader name=\"resmimetype\">" +
567 " <o:value>{0}</o:value>" +
569 " <x:resheader name=\"version\">" +
570 " <o:value>{1}</o:value>" +
574 " <o:resheader name=\"reader\">" +
575 " <x:value>System.Resources.ResXResourceReader, {2}</x:value>" +
577 " <x:resheader name=\"writer\">" +
578 " <x:value>System.Resources.ResXResourceWriter, {2}</x:value>" +
583 string resxFile = Path.Combine (_tempDirectory, "resources.resx");
584 using (StreamWriter sw = new StreamWriter (resxFile, false, Encoding.UTF8)) {
585 sw.Write (string.Format (CultureInfo.InvariantCulture,
586 resXTemplate, ResXResourceWriter.ResMimeType, "1.0",
587 Consts.AssemblySystem_Windows_Forms));
591 using (FileStream fs = new FileStream (resxFile, FileMode.Open, FileAccess.Read, FileShare.Read)) {
592 using (ResXResourceReader r = new ResXResourceReader (fs)) {
593 IDictionaryEnumerator enumerator = r.GetEnumerator ();
595 while (enumerator.MoveNext ()) {
597 switch ((string) enumerator.Key) {
599 Assert.IsNotNull (enumerator.Value, "#A1");
600 Assert.AreEqual ("BO", enumerator.Value, "#A2");
603 Assert.IsNotNull (enumerator.Value, "#B1");
605 Assert.AreEqual (string.Empty, enumerator.Value, "#B2");
607 Assert.AreEqual ("Boston ", enumerator.Value, "#B2");
611 Assert.IsNotNull (enumerator.Value, "#C1");
613 Assert.AreEqual (string.Empty, enumerator.Value, "#C2");
615 Assert.AreEqual ("Belgium", enumerator.Value, "#C2");
620 Assert.IsNull (enumerator.Value, "#D");
622 Assert.IsNotNull (enumerator.Value, "#D1");
623 Assert.AreEqual (string.Empty, enumerator.Value, "#D2");
627 Assert.IsNotNull (enumerator.Value, "#E1");
628 Assert.AreEqual (" <3510> ", enumerator.Value, "#E2");
631 Assert.Fail ("#F:" + enumerator.Key);
635 Assert.AreEqual (5, entries, "#G");
641 public void ResHeader_Missing ()
643 const string resXTemplate =
644 "<?xml version=\"1.0\" encoding=\"utf-8\"?>" +
646 " <data name=\"name\">" +
647 " <value>de Icaza</value>" +
649 " <data name=\"firstName\">" +
652 " <data name=\"address\" />" +
655 string resxFile = Path.Combine (_tempDirectory, "resources.resx");
656 using (StreamWriter sw = new StreamWriter (resxFile, false, Encoding.UTF8)) {
657 sw.Write (resXTemplate);
661 using (FileStream fs = new FileStream (resxFile, FileMode.Open, FileAccess.Read, FileShare.Read)) {
662 using (ResXResourceReader r = new ResXResourceReader (fs)) {
666 } catch (ArgumentException ex) {
667 //Invalid ResX input. Could not find valid \"resheader\"
668 // tags for the ResX reader & writer type names
669 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#A2");
670 Assert.IsNull (ex.InnerException, "#A3");
671 Assert.IsNotNull (ex.Message, "#A4");
672 Assert.IsTrue (ex.Message.IndexOf ("\"resheader\"") != -1, "#A5");
673 Assert.IsNull (ex.ParamName, "#A6");
679 using (ResXResourceReader r = new ResXResourceReader (resxFile)) {
683 } catch (ArgumentException ex) {
684 //Invalid ResX input. Could not find valid \"resheader\"
685 // tags for the ResX reader & writer type names
686 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#B2");
687 Assert.IsNull (ex.InnerException, "#B3");
688 Assert.IsNotNull (ex.Message, "#B4");
689 Assert.IsTrue (ex.Message.IndexOf ("\"resheader\"") != -1, "#B5");
690 Assert.IsNull (ex.ParamName, "#B6");
695 using (StreamReader sr = new StreamReader (resxFile, Encoding.UTF8)) {
696 using (ResXResourceReader r = new ResXResourceReader (sr)) {
700 } catch (ArgumentException ex) {
701 //Invalid ResX input. Could not find valid \"resheader\"
702 // tags for the ResX reader & writer type names
703 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#C2");
704 Assert.IsNull (ex.InnerException, "#C3");
705 Assert.IsNotNull (ex.Message, "#C4");
706 Assert.IsTrue (ex.Message.IndexOf ("\"resheader\"") != -1, "#C5");
707 Assert.IsNull (ex.ParamName, "#C6");
714 public void ResHeader_ResMimeType ()
716 const string resXTemplate =
717 "<?xml version=\"1.0\" encoding=\"utf-8\"?>" +
719 " <resheader name=\"resMIMEtype\">" +
722 " <resheader name=\"version\">" +
723 " <value>{1}</value>" +
725 " <resheader name=\"reAder\">" +
726 " <value>System.Resources.ResXResourceReader, {2}</value>" +
728 " <resheader name=\"wriTer\">" +
729 " <value>System.Resources.ResXResourceWriter, {2}</value>" +
733 string resXContent = null;
735 // <value> element, exact case
736 resXContent = string.Format (CultureInfo.InvariantCulture,
737 resXTemplate, ResXResourceWriter.ResMimeType, "1.0",
738 Consts.AssemblySystem_Windows_Forms);
739 using (ResXResourceReader r = new ResXResourceReader (new StringReader (resXContent))) {
743 // <value> element, uppercase
744 resXContent = string.Format (CultureInfo.InvariantCulture,
745 resXTemplate, ResXResourceWriter.ResMimeType.ToUpper (), "1.0",
746 Consts.AssemblySystem_Windows_Forms);
747 using (ResXResourceReader r = new ResXResourceReader (new StringReader (resXContent))) {
751 } catch (ArgumentException ex) {
752 //Invalid ResX input. Could not find valid \"resheader\"
753 // tags for the ResX reader & writer type names
754 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#A2");
755 Assert.IsNull (ex.InnerException, "#A3");
756 Assert.IsNotNull (ex.Message, "#A4");
757 Assert.IsTrue (ex.Message.IndexOf ("\"resheader\"") != -1, "#A5");
758 Assert.IsNull (ex.ParamName, "#A6");
763 resXContent = string.Format (CultureInfo.InvariantCulture,
764 resXTemplate, ResXResourceWriter.ResMimeType, "1.0",
765 Consts.AssemblySystem_Windows_Forms);
766 using (ResXResourceReader r = new ResXResourceReader (new StringReader (resXContent))) {
771 resXContent = string.Format (CultureInfo.InvariantCulture,
772 resXTemplate, ResXResourceWriter.ResMimeType.ToUpper (), "1.0",
773 Consts.AssemblySystem_Windows_Forms);
774 using (ResXResourceReader r = new ResXResourceReader (new StringReader (resXContent))) {
778 } catch (ArgumentException ex) {
779 //Invalid ResX input. Could not find valid \"resheader\"
780 // tags for the ResX reader & writer type names
781 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#B2");
782 Assert.IsNull (ex.InnerException, "#B3");
783 Assert.IsNotNull (ex.Message, "#B4");
784 Assert.IsTrue (ex.Message.IndexOf ("\"resheader\"") != -1, "#B5");
785 Assert.IsNull (ex.ParamName, "#B6");
790 resXContent = string.Format (CultureInfo.InvariantCulture,
791 resXTemplate, "<![CDATA[" +ResXResourceWriter.ResMimeType + "]]>",
792 "1.0", Consts.AssemblySystem_Windows_Forms);
793 using (ResXResourceReader r = new ResXResourceReader (new StringReader (resXContent))) {
798 resXContent = string.Format (CultureInfo.InvariantCulture,
799 resXTemplate, "<![CDATA[" + ResXResourceWriter.ResMimeType.ToUpper () + "]]>",
800 "1.0", Consts.AssemblySystem_Windows_Forms);
801 using (ResXResourceReader r = new ResXResourceReader (new StringReader (resXContent))) {
805 } catch (ArgumentException ex) {
806 //Invalid ResX input. Could not find valid \"resheader\"
807 // tags for the ResX reader & writer type names
808 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#C2");
809 Assert.IsNull (ex.InnerException, "#C3");
810 Assert.IsNotNull (ex.Message, "#C4");
811 Assert.IsTrue (ex.Message.IndexOf ("\"resheader\"") != -1, "#C5");
812 Assert.IsNull (ex.ParamName, "#C6");
816 // <whatever> element, exact case
817 resXContent = string.Format (CultureInfo.InvariantCulture,
818 resXTemplate, "<whatever>" + ResXResourceWriter.ResMimeType + "</whatever>",
819 "1.0", Consts.AssemblySystem_Windows_Forms);
820 using (ResXResourceReader r = new ResXResourceReader (new StringReader (resXContent))) {
824 // <whatever> element, uppercase
825 resXContent = string.Format (CultureInfo.InvariantCulture,
826 resXTemplate, "<whatever>" + ResXResourceWriter.ResMimeType.ToUpper () + "</whatever>",
827 "1.0", Consts.AssemblySystem_Windows_Forms);
828 using (ResXResourceReader r = new ResXResourceReader (new StringReader (resXContent))) {
832 } catch (ArgumentException ex) {
833 //Invalid ResX input. Could not find valid \"resheader\"
834 // tags for the ResX reader & writer type names
835 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#D2");
836 Assert.IsNull (ex.InnerException, "#D3");
837 Assert.IsNotNull (ex.Message, "#D4");
838 Assert.IsTrue (ex.Message.IndexOf ("\"resheader\"") != -1, "#D5");
839 Assert.IsNull (ex.ParamName, "#D6");
845 public void ResHeader_ResMimeType_Empty ()
847 const string resXTemplate =
848 "<?xml version=\"1.0\" encoding=\"utf-8\"?>" +
850 " <resheader name=\"resmimetype\"></resheader>" +
853 using (ResXResourceReader r = new ResXResourceReader (new StringReader (resXTemplate))) {
857 } catch (ArgumentException ex) {
858 //Invalid ResX input. Could not find valid \"resheader\"
859 // tags for the ResX reader & writer type names
860 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#2");
861 Assert.IsNull (ex.InnerException, "#3");
862 Assert.IsNotNull (ex.Message, "#4");
863 Assert.IsTrue (ex.Message.IndexOf ("\"resheader\"") != -1, "#5");
864 Assert.IsNull (ex.ParamName, "#6");
870 public void ResHeader_ResMimeType_Invalid ()
872 const string resXTemplate =
873 "<?xml version=\"1.0\" encoding=\"utf-8\"?>" +
875 " <resheader name=\"resmimetype\">" +
876 " <value>{0}</value>" +
878 " <resheader name=\"version\">" +
879 " <value>{1}</value>" +
881 " <resheader name=\"reader\">" +
882 " <value>System.Resources.ResXResourceReader, {2}</value>" +
884 " <resheader name=\"writer\">" +
885 " <value>System.Resources.ResXResourceWriter, {2}</value>" +
887 " <data name=\"name\">" +
888 " <value>de Icaza</value>" +
890 " <data name=\"firstName\">" +
893 " <data name=\"Address\" />" +
896 string resxFile = Path.Combine (_tempDirectory, "resources.resx");
897 using (StreamWriter sw = new StreamWriter (resxFile, false, Encoding.UTF8)) {
898 sw.Write (string.Format (CultureInfo.InvariantCulture,
899 resXTemplate, "notvalid", "1.0", Consts.AssemblySystem_Windows_Forms
904 using (FileStream fs = new FileStream (resxFile, FileMode.Open, FileAccess.Read, FileShare.Read)) {
905 using (ResXResourceReader r = new ResXResourceReader (fs)) {
909 } catch (ArgumentException ex) {
910 //Invalid ResX input. Could not find valid \"resheader\"
911 // tags for the ResX reader & writer type names
912 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#A2");
913 Assert.IsNull (ex.InnerException, "#A3");
914 Assert.IsNotNull (ex.Message, "#A4");
915 Assert.IsTrue (ex.Message.IndexOf ("\"resheader\"") != -1, "#A5");
916 Assert.IsNull (ex.ParamName, "#A6");
922 using (ResXResourceReader r = new ResXResourceReader (resxFile)) {
926 } catch (ArgumentException ex) {
927 //Invalid ResX input. Could not find valid \"resheader\"
928 // tags for the ResX reader & writer type names
929 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#B2");
930 Assert.IsNull (ex.InnerException, "#B3");
931 Assert.IsNotNull (ex.Message, "#B4");
932 Assert.IsTrue (ex.Message.IndexOf ("\"resheader\"") != -1, "#B5");
933 Assert.IsNull (ex.ParamName, "#B6");
938 using (StreamReader sr = new StreamReader (resxFile, Encoding.UTF8)) {
939 using (ResXResourceReader r = new ResXResourceReader (sr)) {
943 } catch (ArgumentException ex) {
944 //Invalid ResX input. Could not find valid \"resheader\"
945 // tags for the ResX reader & writer type names
946 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#C2");
947 Assert.IsNull (ex.InnerException, "#C3");
948 Assert.IsNotNull (ex.Message, "#C4");
949 Assert.IsTrue (ex.Message.IndexOf ("\"resheader\"") != -1, "#C5");
950 Assert.IsNull (ex.ParamName, "#C6");
957 public void ResHeader_ResMimeType_Null ()
959 const string resXTemplate =
960 "<?xml version=\"1.0\" encoding=\"utf-8\"?>" +
962 " <resheader name=\"resmimetype\" />" +
965 using (ResXResourceReader r = new ResXResourceReader (new StringReader (resXTemplate))) {
969 } catch (ArgumentException ex) {
970 //Invalid ResX input. Could not find valid \"resheader\"
971 // tags for the ResX reader & writer type names
972 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#2");
973 Assert.IsNull (ex.InnerException, "#3");
974 Assert.IsNotNull (ex.Message, "#4");
975 Assert.IsTrue (ex.Message.IndexOf ("\"resheader\"") != -1, "#5");
976 Assert.IsNull (ex.ParamName, "#6");
982 public void ResHeader_Reader_Invalid ()
984 const string resXTemplate =
985 "<?xml version=\"1.0\" encoding=\"utf-8\"?>" +
987 " <resheader name=\"resmimetype\">" +
990 " <resheader name=\"version\">" +
991 " <value>{1}</value>" +
993 " <resheader name=\"reader\">" +
994 " <value>System.Resources.InvalidResXResourceReader, {2}</value>" +
996 " <resheader name=\"writer\">" +
997 " <value>System.Resources.ResXResourceWriter, {2}</value>" +
1001 string resXContent = string.Format (CultureInfo.InvariantCulture,
1002 resXTemplate, ResXResourceWriter.ResMimeType, "1.0",
1003 Consts.AssemblySystem_Windows_Forms);
1004 using (ResXResourceReader r = new ResXResourceReader (new StringReader (resXContent))) {
1008 } catch (ArgumentException ex) {
1009 //Invalid ResX input. Could not find valid \"resheader\"
1010 // tags for the ResX reader & writer type names
1011 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#2");
1012 Assert.IsNull (ex.InnerException, "#3");
1013 Assert.IsNotNull (ex.Message, "#4");
1014 Assert.IsTrue (ex.Message.IndexOf ("\"resheader\"") != -1, "#5");
1015 Assert.IsNull (ex.ParamName, "#6");
1021 public void ResHeader_Reader_Missing ()
1023 const string resXTemplate =
1024 "<?xml version=\"1.0\" encoding=\"utf-8\"?>" +
1026 " <resheader name=\"resmimetype\">" +
1029 " <resheader name=\"version\">" +
1030 " <value>{1}</value>" +
1032 " <resheader name=\"writer\">" +
1033 " <value>System.Resources.ResXResourceWriter, {2}</value>" +
1037 string resXContent = string.Format (CultureInfo.InvariantCulture,
1038 resXTemplate, ResXResourceWriter.ResMimeType, "1.0",
1039 Consts.AssemblySystem_Windows_Forms);
1040 using (ResXResourceReader r = new ResXResourceReader (new StringReader (resXContent))) {
1044 } catch (ArgumentException ex) {
1045 //Invalid ResX input. Could not find valid \"resheader\"
1046 // tags for the ResX reader & writer type names
1047 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#2");
1048 Assert.IsNull (ex.InnerException, "#3");
1049 Assert.IsNotNull (ex.Message, "#4");
1050 Assert.IsTrue (ex.Message.IndexOf ("\"resheader\"") != -1, "#5");
1051 Assert.IsNull (ex.ParamName, "#6");
1057 public void ResHeader_Reader_Null ()
1059 const string resXTemplate =
1060 "<?xml version=\"1.0\" encoding=\"utf-8\"?>" +
1062 " <resheader name=\"resmimetype\">" +
1065 " <resheader name=\"version\">" +
1066 " <value>{1}</value>" +
1068 " <resheader name=\"reader\" />" +
1069 " <resheader name=\"writer\">" +
1070 " <value>System.Resources.ResXResourceWriter, {2}</value>" +
1074 string resXContent = string.Format (CultureInfo.InvariantCulture,
1075 resXTemplate, ResXResourceWriter.ResMimeType, "1.0",
1076 Consts.AssemblySystem_Windows_Forms);
1077 using (ResXResourceReader r = new ResXResourceReader (new StringReader (resXContent))) {
1081 } catch (ArgumentException ex) {
1082 //Invalid ResX input. Could not find valid \"resheader\"
1083 // tags for the ResX reader & writer type names
1084 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#2");
1085 Assert.IsNull (ex.InnerException, "#3");
1086 Assert.IsNotNull (ex.Message, "#4");
1087 Assert.IsTrue (ex.Message.IndexOf ("\"resheader\"") != -1, "#5");
1088 Assert.IsNull (ex.ParamName, "#6");
1094 public void ResHeader_Writer_Invalid ()
1096 const string resXTemplate =
1097 "<?xml version=\"1.0\" encoding=\"utf-8\"?>" +
1099 " <resheader name=\"resmimetype\">" +
1102 " <resheader name=\"version\">" +
1103 " <value>{1}</value>" +
1105 " <resheader name=\"reader\">" +
1106 " <value>System.Resources.ResXResourceReader, {2}</value>" +
1108 " <resheader name=\"writer\">" +
1109 " <value>System.Resources.InvalidResXResourceWriter, {2}</value>" +
1113 string resXContent = string.Format (CultureInfo.InvariantCulture,
1114 resXTemplate, ResXResourceWriter.ResMimeType, "1.0",
1115 Consts.AssemblySystem_Windows_Forms);
1116 using (ResXResourceReader r = new ResXResourceReader (new StringReader (resXContent))) {
1120 } catch (ArgumentException ex) {
1121 //Invalid ResX input. Could not find valid \"resheader\"
1122 // tags for the ResX reader & writer type names
1123 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#2");
1124 Assert.IsNull (ex.InnerException, "#3");
1125 Assert.IsNotNull (ex.Message, "#4");
1126 Assert.IsTrue (ex.Message.IndexOf ("\"resheader\"") != -1, "#5");
1127 Assert.IsNull (ex.ParamName, "#6");
1133 public void ResHeader_Writer_Missing ()
1135 const string resXTemplate =
1136 "<?xml version=\"1.0\" encoding=\"utf-8\"?>" +
1138 " <resheader name=\"resmimetype\">" +
1141 " <resheader name=\"version\">" +
1142 " <value>{1}</value>" +
1144 " <resheader name=\"reader\">" +
1145 " <value>System.Resources.ResXResourceReader, {2}</value>" +
1149 string resXContent = string.Format (CultureInfo.InvariantCulture,
1150 resXTemplate, ResXResourceWriter.ResMimeType, "1.0",
1151 Consts.AssemblySystem_Windows_Forms);
1152 using (ResXResourceReader r = new ResXResourceReader (new StringReader (resXContent))) {
1156 } catch (ArgumentException ex) {
1157 //Invalid ResX input. Could not find valid \"resheader\"
1158 // tags for the ResX reader & writer type names
1159 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#2");
1160 Assert.IsNull (ex.InnerException, "#3");
1161 Assert.IsNotNull (ex.Message, "#4");
1162 Assert.IsTrue (ex.Message.IndexOf ("\"resheader\"") != -1, "#5");
1163 Assert.IsNull (ex.ParamName, "#6");
1169 public void ResHeader_Writer_Null ()
1171 const string resXTemplate =
1172 "<?xml version=\"1.0\" encoding=\"utf-8\"?>" +
1174 " <resheader name=\"resmimetype\">" +
1177 " <resheader name=\"version\">" +
1178 " <value>{1}</value>" +
1180 " <resheader name=\"reader\">" +
1181 " <value>System.Resources.ResXResourceReader, {2}</value>" +
1183 " <resheader name=\"writer\" />" +
1186 string resXContent = string.Format (CultureInfo.InvariantCulture,
1187 resXTemplate, ResXResourceWriter.ResMimeType, "1.0",
1188 Consts.AssemblySystem_Windows_Forms);
1189 using (ResXResourceReader r = new ResXResourceReader (new StringReader (resXContent))) {
1193 } catch (ArgumentException ex) {
1194 //Invalid ResX input. Could not find valid \"resheader\"
1195 // tags for the ResX reader & writer type names
1196 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#2");
1197 Assert.IsNull (ex.InnerException, "#3");
1198 Assert.IsNotNull (ex.Message, "#4");
1199 Assert.IsTrue (ex.Message.IndexOf ("\"resheader\"") != -1, "#5");
1200 Assert.IsNull (ex.ParamName, "#6");
1206 public void ResHeader_Unknown ()
1208 const string resXTemplate =
1209 "<?xml version=\"1.0\" encoding=\"utf-8\"?>" +
1211 " <resheader name=\"resmimetype\">" +
1214 " <resheader name=\"version\">" +
1215 " <value>{1}</value>" +
1217 " <resheader name=\"reader\">" +
1218 " <value> System.Resources.ResXResourceReader , {2}</value>" +
1220 " <resheader name=\"writer\">" +
1221 " <value> System.Resources.ResXResourceWriter , {2}</value>" +
1223 " <resheader name=\"UNKNOWN\">" +
1224 " <value>whatever</value>" +
1228 string resXContent = string.Format (CultureInfo.InvariantCulture,
1229 resXTemplate, ResXResourceWriter.ResMimeType, "1.0",
1230 Consts.AssemblySystem_Windows_Forms);
1231 using (ResXResourceReader r = new ResXResourceReader (new StringReader (resXContent))) {
1237 public void ResName_Null ()
1239 const string resXContent =
1240 "<?xml version=\"1.0\" encoding=\"utf-8\"?>" +
1242 " <resheader name=\"resmimetype\">" +
1243 " <value>invalid</value>" +
1245 " <data name=\"name\">" +
1246 " <value>de Icaza</value>" +
1249 " <value>whatever</value>" +
1253 using (StringReader sr = new StringReader (resXContent)) {
1254 using (ResXResourceReader r = new ResXResourceReader (sr)) {
1258 } catch (ArgumentException ex) {
1259 // Invalid ResX input.
1260 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#2");
1261 Assert.IsNotNull (ex.InnerException, "#3");
1262 Assert.IsNotNull (ex.Message, "#4");
1263 Assert.IsNull (ex.ParamName, "#5");
1266 // Could not find a name for a resource. The resource
1267 // value was 'whatever'. Line 1, position 200
1268 XmlException inner = ex.InnerException as XmlException;
1269 Assert.IsNotNull (inner, "#6");
1270 Assert.AreEqual (typeof (XmlException), inner.GetType (), "#7");
1271 Assert.IsNotNull (inner.InnerException, "#8");
1272 Assert.AreEqual (1, inner.LineNumber, "#9");
1273 // Assert.AreEqual (200, inner.LinePosition, "#10");
1274 Assert.IsNotNull (inner.Message, "#11");
1275 Assert.IsTrue (inner.Message.IndexOf ("'whatever'") != -1, "#12");
1276 Assert.IsTrue (inner.Message.IndexOf (" 1") != -1, "#13");
1277 //Assert.IsTrue (inner.Message.IndexOf ("200") != -1, "#14");
1279 // Could not find a name for a resource. The resource
1280 // value was 'whatever'
1281 ArgumentException inner2 = inner.InnerException as ArgumentException;
1282 Assert.IsNotNull (inner2, "#15");
1283 Assert.AreEqual (typeof (ArgumentException), inner2.GetType (), "#16");
1284 Assert.IsNull (inner2.InnerException, "#17");
1285 Assert.IsNotNull (inner2.Message, "#18");
1286 Assert.IsTrue (inner2.Message.IndexOf ("'whatever'") != -1, "#19");
1287 Assert.IsNull (inner2.ParamName, "#20");
1289 // Could not find a name for a resource. The resource
1290 // value was 'whatever'
1291 ArgumentException inner = ex.InnerException as ArgumentException;
1292 Assert.IsNotNull (inner, "#6");
1293 Assert.AreEqual (typeof (ArgumentException), inner.GetType (), "#7");
1294 Assert.IsNull (inner.InnerException, "#8");
1295 Assert.IsNotNull (inner.Message, "#9");
1296 Assert.IsTrue (inner.Message.IndexOf ("'whatever'") != -1, "#10");
1297 Assert.IsNull (inner.ParamName, "#11");
1304 static string resXWithEmptyName =
1305 @"<?xml version=""1.0"" encoding=""utf-8""?>
1307 <resheader name=""resmimetype"">
1308 <value>text/microsoft-resx</value>
1310 <resheader name=""version"">
1313 <resheader name=""reader"">
1314 <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
1316 <resheader name=""writer"">
1317 <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
1320 <value>a resource with no name</value>
1324 static string resxWithNullRef =
1325 @"<?xml version=""1.0"" encoding=""utf-8""?>
1327 <resheader name=""resmimetype"">
1328 <value>text/microsoft-resx</value>
1330 <resheader name=""version"">
1333 <resheader name=""reader"">
1334 <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
1336 <resheader name=""writer"">
1337 <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
1339 <data name=""NullRef"" type=""System.Resources.ResXNullRef, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"">
1345 public void ResName_Empty ()
1347 using (StringReader sr = new StringReader (resXWithEmptyName)) {
1348 using (ResXResourceReader r = new ResXResourceReader (sr)) {
1349 IDictionaryEnumerator enumerator = r.GetEnumerator ();
1350 enumerator.MoveNext ();
1351 Assert.AreEqual ("", enumerator.Key, "#A1");
1352 Assert.AreEqual ("a resource with no name", (string) enumerator.Value, "#A2");
1358 public void ResXNullRef ()
1360 using (StringReader sr = new StringReader (resxWithNullRef)) {
1361 using (ResXResourceReader r = new ResXResourceReader (sr)) {
1362 IDictionaryEnumerator enumerator = r.GetEnumerator ();
1363 enumerator.MoveNext ();
1364 Assert.AreEqual ("NullRef", enumerator.Key, "#A1");
1365 Assert.IsNull (enumerator.Value, "#A2");
1371 public void ResValue ()
1373 string resXContent = string.Format (CultureInfo.CurrentCulture,
1374 "<?xml version=\"1.0\" encoding=\"utf-8\"?>" +
1376 " <resheader name=\"resmimetype\">" +
1377 " <value>{0}</value>" +
1379 " <resheader name=\"reader\">" +
1380 " <value>System.Resources.ResXResourceReader, {1}</value>" +
1382 " <resheader name=\"writer\">" +
1383 " <value>System.Resources.ResXResourceWriter, {1}</value>" +
1385 " <data name=\"name1\">" +
1386 " <value><![CDATA[ <value1> ]]></value>" +
1388 " <data name=\"name2\">" +
1389 " <value> <![CDATA[<value2>]]> </value>" +
1391 " <data name=\"name3\">" +
1392 " <![CDATA[<value3>]]> " +
1394 " <data name=\"name4\">" +
1395 " <value> value4 </value>" +
1397 " <data name=\"name5\">" +
1398 " test<value>value5</value>" +
1400 " <data name=\"name6\">" +
1401 " test1<value>value6</value>test2" +
1403 " <data name=\"name7\">" +
1404 " <value>value7a</value>" +
1405 " <whatever>value7b</whatever>" +
1407 " <data name=\"name8\">" +
1408 " <whatever>value8</whatever>" +
1410 " <data name=\"name9\">" +
1411 " <whatever>value9a</whatever>" +
1412 " <whatever>value9b</whatever>" +
1414 " <data name=\"name10\">" +
1415 " test<whatever>value10</whatever>" +
1417 " <data name=\"name11\">" +
1418 " test1<whatever>value11</whatever>test2" +
1420 " <data name=\"name12\">" +
1421 " <value> test <![CDATA[<value12>]]> </value>" +
1423 " <data name=\"name13\">" +
1424 " test <![CDATA[<value13>]]> " +
1426 " <data name=\"name14\" />" +
1427 " <data name=\"name15\"></data>" +
1428 " <data name=\"name16\">value16</data>" +
1429 " <data name=\"name17\">value17</data>" +
1430 " <data name=\"name18\">" +
1431 " <value>value18</value>" +
1432 " <data name=\"name19\">" +
1433 " <value>value18</value>" +
1437 ResXResourceWriter.ResMimeType, Consts.AssemblySystem_Windows_Forms);
1439 using (StringReader sr = new StringReader (resXContent)) {
1440 using (ResXResourceReader r = new ResXResourceReader (sr)) {
1442 IDictionaryEnumerator enumerator = r.GetEnumerator ();
1444 while (enumerator.MoveNext ()) {
1446 switch ((string) enumerator.Key) {
1448 Assert.IsNotNull (enumerator.Value, "#A1");
1449 Assert.AreEqual (" <value1> ", enumerator.Value, "#A2");
1452 Assert.IsNotNull (enumerator.Value, "#B1");
1453 Assert.AreEqual ("<value2>", enumerator.Value, "#B2");
1456 Assert.IsNotNull (enumerator.Value, "#C1");
1457 Assert.AreEqual ("<value3>", enumerator.Value, "#C2");
1460 Assert.IsNotNull (enumerator.Value, "#D1");
1461 Assert.AreEqual (" value4 ", enumerator.Value, "#D2");
1464 Assert.IsNotNull (enumerator.Value, "#E1");
1466 Assert.AreEqual ("value5", enumerator.Value, "#E2");
1468 Assert.AreEqual ("test", enumerator.Value, "#E2");
1472 Assert.IsNotNull (enumerator.Value, "#F1");
1474 Assert.AreEqual ("test2", enumerator.Value, "#F2");
1476 Assert.AreEqual ("test1", enumerator.Value, "#F2");
1480 Assert.IsNotNull (enumerator.Value, "#G1");
1482 Assert.AreEqual (string.Empty, enumerator.Value, "#G2");
1484 Assert.AreEqual ("value7a", enumerator.Value, "#G2");
1488 Assert.IsNotNull (enumerator.Value, "#H1");
1490 Assert.AreEqual (string.Empty, enumerator.Value, "#H2");
1492 Assert.AreEqual ("value8", enumerator.Value, "#H2");
1496 Assert.IsNotNull (enumerator.Value, "#I1");
1498 Assert.AreEqual (string.Empty, enumerator.Value, "#I2");
1500 Assert.AreEqual ("value9a", enumerator.Value, "#I2");
1504 Assert.IsNotNull (enumerator.Value, "#J1");
1506 Assert.AreEqual (string.Empty, enumerator.Value, "#J2");
1508 Assert.AreEqual ("test", enumerator.Value, "#J2");
1512 Assert.IsNotNull (enumerator.Value, "#K1");
1514 Assert.AreEqual ("test2", enumerator.Value, "#K2");
1516 Assert.AreEqual ("test1", enumerator.Value, "#K2");
1520 Assert.IsNotNull (enumerator.Value, "#L1");
1521 Assert.AreEqual (" test <value12>", enumerator.Value, "#L2");
1524 Assert.IsNotNull (enumerator.Value, "#M1");
1526 Assert.AreEqual ("<value13>", enumerator.Value, "#M2");
1528 Assert.AreEqual ("test", enumerator.Value, "#M2");
1533 Assert.IsNull (enumerator.Value, "#N1");
1535 Assert.IsNotNull (enumerator.Value, "#N1");
1536 Assert.AreEqual (string.Empty, enumerator.Value, "#N2");
1541 Assert.IsNotNull (enumerator.Value, "#O1");
1542 Assert.AreEqual ("value16", enumerator.Value, "#O2");
1546 Assert.IsNotNull (enumerator.Value, "#P1");
1547 Assert.AreEqual ("value17", enumerator.Value, "#P2");
1550 Assert.IsNotNull (enumerator.Value, "#Q1");
1551 Assert.AreEqual ("value18", enumerator.Value, "#Q2");
1554 Assert.Fail ("#Q:" + enumerator.Key);
1559 Assert.AreEqual (17, entries, "#Q");
1561 Assert.AreEqual (16, entries, "#Q");
1569 public void UseResXDataNodes ()
1571 string refFile = Path.Combine (_tempDirectory, "32x32.ico");
1572 WriteEmbeddedResource ("32x32.ico", refFile);
1574 string resxFile = Path.Combine (_tempDirectory, "resources.resx");
1575 using (StreamWriter sw = new StreamWriter (resxFile, false, Encoding.UTF8)) {
1576 sw.Write (string.Format (CultureInfo.InvariantCulture,
1577 _resXFileRefTemplate, ResXResourceWriter.ResMimeType, "1.0",
1578 Consts.AssemblySystem_Windows_Forms, refFile,
1579 typeof (Bitmap).AssemblyQualifiedName, string.Empty,
1580 Consts.AssemblyCorlib));
1583 using (ResXResourceReader r = new ResXResourceReader (resxFile)) {
1584 r.UseResXDataNodes = true;
1585 IDictionaryEnumerator enumerator = r.GetEnumerator ();
1588 while (enumerator.MoveNext ()) {
1591 ResXDataNode node = enumerator.Value as ResXDataNode;
1593 switch ((string) enumerator.Key) {
1595 Assert.AreEqual ("foo", node.Name, "#A1");
1596 Bitmap bitmap = node.GetValue (new AssemblyName[] {typeof (Bitmap).Assembly.GetName ()}) as Bitmap;
1597 Assert.IsNotNull (bitmap, "#A2");
1599 case "panel_label.Locked":
1600 Assert.AreEqual ("panel_label.Locked", node.Name, "#B1");
1601 Assert.AreEqual (true, node.GetValue (new AssemblyName[] {typeof (int).Assembly.GetName ()}), "#B2");
1604 Assert.Fail ("#C:" + enumerator.Key);
1608 Assert.AreEqual (2, entries, "#D");
1613 [Category ("NotWorking")]
1614 public void ResXDataNode_GetNodePosition ()
1616 // This test relies on a hashtable's enumerator being ordered,
1617 // when the ordering is not guaranteed.
1618 string refFile = Path.Combine (_tempDirectory, "32x32.ico");
1619 WriteEmbeddedResource ("32x32.ico", refFile);
1621 string resxFile = Path.Combine (_tempDirectory, "resources.resx");
1622 using (StreamWriter sw = new StreamWriter (resxFile, false, Encoding.UTF8)) {
1623 sw.Write (string.Format (CultureInfo.InvariantCulture,
1624 _resXFileRefTemplate, ResXResourceWriter.ResMimeType, "1.0",
1625 Consts.AssemblySystem_Windows_Forms, refFile,
1626 typeof (Bitmap).AssemblyQualifiedName, string.Empty,
1627 Consts.AssemblyCorlib));
1630 using (ResXResourceReader r = new ResXResourceReader (resxFile)) {
1631 r.UseResXDataNodes = true;
1632 IDictionaryEnumerator enumerator = r.GetEnumerator ();
1633 enumerator.MoveNext ();
1634 ResXDataNode node = enumerator.Value as ResXDataNode;
1635 Assert.IsNotNull (node, "#A1");
1636 Assert.AreEqual(new Point(1, 717), node.GetNodePosition (), "#A2");
1641 public void GetMetadataEnumerator ()
1643 string refFile = Path.Combine (_tempDirectory, "32x32.ico");
1644 WriteEmbeddedResource ("32x32.ico", refFile);
1646 string resxFile = Path.Combine (_tempDirectory, "resources.resx");
1647 using (StreamWriter sw = new StreamWriter (resxFile, false, Encoding.UTF8)) {
1648 sw.Write (string.Format (CultureInfo.InvariantCulture,
1649 _resXFileRefTemplate, ResXResourceWriter.ResMimeType, "1.0",
1650 Consts.AssemblySystem_Windows_Forms, refFile,
1651 typeof (Bitmap).AssemblyQualifiedName, string.Empty,
1652 Consts.AssemblyCorlib));
1655 using (ResXResourceReader r = new ResXResourceReader (resxFile)) {
1656 IDictionaryEnumerator enumerator = r.GetMetadataEnumerator ();
1657 Assert.IsTrue (enumerator.MoveNext (), "#A1");
1658 Assert.IsNotNull (enumerator.Current, "#A2");
1659 Assert.AreEqual ("panel_label.Locked", enumerator.Key, "#A3");
1660 Assert.AreEqual(typeof(bool), enumerator.Value.GetType(), "#A4");
1661 Assert.IsTrue ((bool) enumerator.Value, "#A5");
1662 Assert.IsFalse (enumerator.MoveNext (), "#A6");
1665 using (ResXResourceReader r = new ResXResourceReader (resxFile)) {
1666 r.UseResXDataNodes = true;
1667 IDictionaryEnumerator enumerator = r.GetMetadataEnumerator ();
1668 Assert.IsFalse (enumerator.MoveNext (), "#B1");
1674 public void TypeConversion ()
1676 string resXContent = string.Format (CultureInfo.CurrentCulture,
1677 "<?xml version=\"1.0\" encoding=\"utf-8\"?>" +
1679 " <resheader name=\"resmimetype\">" +
1680 " <value>{0}</value>" +
1682 " <resheader name=\"reader\">" +
1683 " <value>System.Resources.ResXResourceReader, {1}</value>" +
1685 " <resheader name=\"writer\">" +
1686 " <value>System.Resources.ResXResourceWriter, {1}</value>" +
1688 " <data name=\"AnchorStyle\" type=\"System.Windows.Forms.AnchorStyles, {1}\">" +
1689 " <value>Bottom, Left</value>" +
1691 " <data name=\"BackgroundImage\" type=\"{2}\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">" +
1693 " Qk12BQAAAAAAADYEAAAoAAAAEgAAABAAAAABAAgAAAAAAAAAAAAgHAAAIBwAAAABAAAAAQAAAAAA/wAA" +
1694 " M/8AAGb/AACZ/wAAzP8AAP//ADMA/wAzM/8AM2b/ADOZ/wAzzP8AM///AGYA/wBmM/8AZmb/AGaZ/wBm" +
1695 " zP8AZv//AJkA/wCZM/8AmWb/AJmZ/wCZzP8Amf//AMwA/wDMM/8AzGb/AMyZ/wDMzP8AzP//AP8A/wD/" +
1696 " M/8A/2b/AP+Z/wD/zP8A////MwAA/zMAM/8zAGb/MwCZ/zMAzP8zAP//MzMA/zMzM/8zM2b/MzOZ/zMz" +
1697 " zP8zM///M2YA/zNmM/8zZmb/M2aZ/zNmzP8zZv//M5kA/zOZM/8zmWb/M5mZ/zOZzP8zmf//M8wA/zPM" +
1698 " M/8zzGb/M8yZ/zPMzP8zzP//M/8A/zP/M/8z/2b/M/+Z/zP/zP8z////ZgAA/2YAM/9mAGb/ZgCZ/2YA" +
1699 " zP9mAP//ZjMA/2YzM/9mM2b/ZjOZ/2YzzP9mM///ZmYA/2ZmM/9mZmb/ZmaZ/2ZmzP9mZv//ZpkA/2aZ" +
1700 " M/9mmWb/ZpmZ/2aZzP9mmf//ZswA/2bMM/9mzGb/ZsyZ/2bMzP9mzP//Zv8A/2b/M/9m/2b/Zv+Z/2b/" +
1701 " zP9m////mQAA/5kAM/+ZAGb/mQCZ/5kAzP+ZAP//mTMA/5kzM/+ZM2b/mTOZ/5kzzP+ZM///mWYA/5lm" +
1702 " M/+ZZmb/mWaZ/5lmzP+ZZv//mZkA/5mZM/+ZmWb/mZmZ/5mZzP+Zmf//mcwA/5nMM/+ZzGb/mcyZ/5nM" +
1703 " zP+ZzP//mf8A/5n/M/+Z/2b/mf+Z/5n/zP+Z////zAAA/8wAM//MAGb/zACZ/8wAzP/MAP//zDMA/8wz" +
1704 " M//MM2b/zDOZ/8wzzP/MM///zGYA/8xmM//MZmb/zGaZ/8xmzP/MZv//zJkA/8yZM//MmWb/zJmZ/8yZ" +
1705 " zP/Mmf//zMwA/8zMM//MzGb/zMyZ/8zMzP/MzP//zP8A/8z/M//M/2b/zP+Z/8z/zP/M/////wAA//8A" +
1706 " M///AGb//wCZ//8AzP//AP///zMA//8zM///M2b//zOZ//8zzP//M////2YA//9mM///Zmb//2aZ//9m" +
1707 " zP//Zv///5kA//+ZM///mWb//5mZ//+ZzP//mf///8wA///MM///zGb//8yZ///MzP//zP////8A////" +
1708 " M////2b///+Z////zP//////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA" +
1709 " AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA" +
1710 " AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA" +
1711 " AAAAAAAAAAwMDAwAAAAAAAAAAAAAAAAAAAAAAAwMDAwAAAAAAAAAAAAAAAAAAAAAAAwMDAAAAAAAAAAA" +
1712 " AAAAAAAAAAAAAAwMDAAAAAAAAAAAAAAAAAAAAAAADAwMAAAAAAAAAAAADAAAAAAAAAAMDA0AAAAAAAAA" +
1713 " AAwMDQAAABMTExMTExMTNwAAAAAMDAwMDQAAABMTExMTExMAAAAANzc3Nzc3NwAAAD4+Pj4+AAAAAD4+" +
1714 " Pj4+Pj4+PgAAAGJiYgAAAAAAAAAAYmJiAAAAAAAAAGIAAAAAAAAAAABiYmIAAAAAAAAAAAAAAAAAAAAA" +
1715 " AGJiYgAAAAAAAAAAAAAAAAAAAAAAAGJiYgAAAAAAAAAAAAAAAAAAAAAAAGJiYgAAAAAAAAAAAAAAAAAA" +
1716 " AAAAAGJiYgAAAAAAAAAAAAAA" +
1719 " <data name=\"Buffer\" type=\"{3}\">" +
1720 " <value>BQIH</value>" +
1722 " <data name=\"Data\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">" +
1723 " <value>Random Thoughts</value>" +
1725 /*s*/" <data name=\"Foo\" type=\"System.Windows.Forms.Application, {1}\">" +
1726 " <value>A B C</value>" +
1728 " <data name=\"Image\" type=\"{2}\">" +
1729 " <value>Summer.jpg</value>" +
1731 /*e*/" <data name=\"Text\">" +
1732 " <value>OK</value>" +
1734 " <data name=\"Unknown\" mimetype=\"application/xxx\">" +
1735 " <value>MIA</value>" +
1737 " <data name=\"Wrong\" typeof=\"{2}\" mimetype=\"application/xxx\">" +
1738 " <value>SuperUnknown</value>" +
1740 /*s*/" <data name=\"Xtra\" type=\"System.Windows.Forms.AnchorStyles, {1}\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">" +
1741 " <value>LeftRight</value>" +
1744 ResXResourceWriter.ResMimeType, Consts.AssemblySystem_Windows_Forms,
1745 typeof (Bitmap).AssemblyQualifiedName, typeof (byte []).AssemblyQualifiedName);
1747 using (StringReader sr = new StringReader (resXContent)) {
1748 using (ResXResourceReader r = new ResXResourceReader (sr)) {
1749 IDictionaryEnumerator enumerator = r.GetEnumerator ();
1751 while (enumerator.MoveNext ()) {
1753 switch ((string) enumerator.Key) {
1755 Assert.IsNotNull (enumerator.Value, "#A1");
1756 Assert.AreEqual (AnchorStyles.Bottom | AnchorStyles.Left, enumerator.Value, "#A2");
1758 case "BackgroundImage":
1759 Assert.IsNotNull (enumerator.Value, "#B1");
1760 Assert.AreEqual (typeof (Bitmap), enumerator.Value.GetType (), "#B2");
1763 Assert.IsNotNull (enumerator.Value, "#C1");
1764 Assert.AreEqual (new byte [] { 5, 2, 7 }, enumerator.Value, "#C2");
1768 Assert.IsNull (enumerator.Value, "#D1");
1770 Assert.IsNotNull (enumerator.Value, "#D1");
1771 Assert.AreEqual ("Random Thoughts", enumerator.Value, "#D2");
1776 Assert.IsNull (enumerator.Value, "#E1");
1778 Assert.IsNotNull (enumerator.Value, "#E1");
1779 Assert.AreEqual ("A B C", enumerator.Value, "#E2");
1784 Assert.IsNull (enumerator.Value, "#F1");
1786 Assert.IsNotNull (enumerator.Value, "#F1");
1787 Assert.AreEqual ("Summer.jpg", enumerator.Value, "#F2");
1791 Assert.IsNotNull (enumerator.Value, "#G1");
1792 Assert.AreEqual ("OK", enumerator.Value, "#G2");
1796 Assert.IsNull (enumerator.Value, "#H1");
1798 Assert.IsNotNull (enumerator.Value, "#H1");
1799 Assert.AreEqual ("MIA", enumerator.Value, "#H2");
1804 Assert.IsNull (enumerator.Value, "#I1");
1806 Assert.IsNotNull (enumerator.Value, "#I1");
1807 Assert.AreEqual ("SuperUnknown", enumerator.Value, "#I2");
1812 Assert.IsNull (enumerator.Value, "#J1");
1814 Assert.IsNotNull (enumerator.Value, "#J1");
1815 Assert.AreEqual ("LeftRight", enumerator.Value, "#J2");
1819 Assert.Fail ("#J:" + enumerator.Key);
1823 Assert.AreEqual (10, entries, "#G");
1828 [Test, ExpectedException (typeof (SerializationException))]
1829 public void DeSerializationErrorBubbles ()
1831 using (StringReader sr = new StringReader (serializedResXCorruped)) {
1832 using (ResXResourceReader r = new ResXResourceReader (sr)) {
1833 IDictionaryEnumerator enumerator = r.GetEnumerator ();
1834 // should throw exception
1839 [Test, ExpectedException (typeof (TargetInvocationException))]
1840 public void FileRef_DeserializationFails ()
1842 string corruptFile = Path.GetTempFileName ();
1843 ResXFileRef fileRef = new ResXFileRef (corruptFile, typeof (serializable).AssemblyQualifiedName);
1845 File.AppendAllText (corruptFile,"corrupt");
1847 StringBuilder sb = new StringBuilder();
1848 using (StringWriter sw = new StringWriter (sb)) {
1849 using (ResXResourceWriter writer = new ResXResourceWriter (sw)) {
1850 writer.AddResource ("test", fileRef);
1854 using (StringReader sr = new StringReader (sb.ToString ())) {
1855 using (ResXResourceReader reader = new ResXResourceReader (sr)) {
1856 reader.GetEnumerator ();
1861 [Test, ExpectedException (typeof (ArgumentException))]
1862 public void FileRef_TypeCantBeResolved ()
1864 string aFile = Path.GetTempFileName ();
1865 ResXFileRef fileRef = new ResXFileRef (aFile, "a.type.doesnt.exist");
1867 StringBuilder sb = new StringBuilder ();
1868 using (StringWriter sw = new StringWriter (sb)) {
1869 using (ResXResourceWriter writer = new ResXResourceWriter (sw)) {
1870 writer.AddResource ("test", fileRef);
1874 using (StringReader sr = new StringReader (sb.ToString ())) {
1875 using (ResXResourceReader reader = new ResXResourceReader (sr)) {
1876 reader.GetEnumerator ();
1882 public void TypeConverter_AssemblyNamesUsed ()
1884 string aName = "DummyAssembly, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null";
1885 AssemblyName [] assemblyNames = new AssemblyName [] { new AssemblyName (aName) };
1887 StringReader sr = new StringReader (convertableResXWithoutAssemblyName);
1889 using (ResXResourceReader rr = new ResXResourceReader (sr, assemblyNames)) {
1890 IDictionaryEnumerator en = rr.GetEnumerator ();
1893 object obj = ((DictionaryEntry) en.Current).Value;
1894 Assert.IsNotNull (obj, "#A1");
1895 Assert.AreEqual ("DummyAssembly.Convertable, " + aName, obj.GetType ().AssemblyQualifiedName, "#A2");
1901 public void TypeConverter_ITRSUsed ()
1903 ResXDataNode dn = new ResXDataNode ("test", 34L);
1905 StringBuilder sb = new StringBuilder ();
1906 using (StringWriter sw = new StringWriter (sb)) {
1907 using (ResXResourceWriter writer = new ResXResourceWriter (sw)) {
1908 writer.AddResource (dn);
1912 using (StringReader sr = new StringReader (sb.ToString ())) {
1913 ResXResourceReader rr = new ResXResourceReader (sr, new ReturnIntITRS ());
1914 IDictionaryEnumerator en = rr.GetEnumerator ();
1917 object o = ((DictionaryEntry) en.Current).Value;
1918 Assert.IsNotNull (o, "#A1");
1919 Assert.IsInstanceOfType (typeof (int), o,"#A2");
1920 Assert.AreEqual (34, o,"#A3");
1926 public void Serializable_ITRSUsed ()
1928 serializable ser = new serializable ("aaaaa", "bbbbb");
1929 ResXDataNode dn = new ResXDataNode ("test", ser);
1931 StringBuilder sb = new StringBuilder ();
1932 using (StringWriter sw = new StringWriter (sb)) {
1933 using (ResXResourceWriter writer = new ResXResourceWriter (sw)) {
1934 writer.AddResource (dn);
1938 using (StringReader sr = new StringReader (sb.ToString ())) {
1939 ResXResourceReader rr = new ResXResourceReader (sr, new ReturnSerializableSubClassITRS ());
1941 IDictionaryEnumerator en = rr.GetEnumerator ();
1944 object o = ((DictionaryEntry) en.Current).Value;
1945 Assert.IsNotNull (o, "#A1");
1946 Assert.IsInstanceOfType (typeof (serializableSubClass), o,"#A2");
1951 static string convertableResXWithoutAssemblyName =
1952 @"<?xml version=""1.0"" encoding=""utf-8""?>
1955 <resheader name=""resmimetype"">
1956 <value>text/microsoft-resx</value>
1958 <resheader name=""version"">
1961 <resheader name=""reader"">
1962 <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
1964 <resheader name=""writer"">
1965 <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
1968 <data name=""test"" type=""DummyAssembly.Convertable"">
1969 <value>im a name im a value</value>
1973 static string serializedResXCorruped =
1974 @"<?xml version=""1.0"" encoding=""utf-8""?>
1977 <resheader name=""resmimetype"">
1978 <value>text/microsoft-resx</value>
1980 <resheader name=""version"">
1983 <resheader name=""reader"">
1984 <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
1986 <resheader name=""writer"">
1987 <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
1989 <data name=""test"" mimetype=""application/x-microsoft.net.object.binary.base64"">
1991 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
1992 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
1993 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
1994 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
1999 private static void WriteEmbeddedResource (string name, string filename)
2001 const int size = 512;
2002 byte [] buffer = new byte [size];
2005 Stream input = typeof (ResXResourceReaderTest).Assembly.
2006 GetManifestResourceStream (name);
2007 Stream output = File.Open (filename, FileMode.Create);
2010 while ((count = input.Read (buffer, 0, size)) > 0) {
2011 output.Write (buffer, 0, count);
2018 private const string _resXFileRefTemplate =
2019 "<?xml version=\"1.0\" encoding=\"utf-8\"?>" +
2021 " <resheader name=\"resmimetype\">" +
2022 " <value>{0}</value>" +
2024 " <resheader name=\"version\">" +
2025 " <value>{1}</value>" +
2027 " <resheader name=\"reader\">" +
2028 " <value>System.Resources.ResXResourceReader, {2}</value>" +
2030 " <resheader name=\"writer\">" +
2031 " <value>System.Resources.ResXResourceWriter, {2}</value>" +
2034 " <metadata name=\"panel_label.Locked\" type=\"System.Boolean, {6}\">" +
2035 " <value>True</value>" +
2038 " <data name=\"foo\" type=\"System.Resources.ResXFileRef, {2}\">" +
2039 " <value>{3};{4}{5}</value>" +