2 // ResXResourceReaderTest.cs: Unit Tests for ResXResourceReader.
5 // Gert Driesen <drieseng@users.sourceforge.net>
9 using System.Collections;
10 using System.Globalization;
12 using System.Resources;
16 using NUnit.Framework;
18 namespace MonoTests.System.Resources
21 public class ResXResourceReaderTest
23 private string _tempDirectory;
24 private string _otherTempDirectory;
29 _tempDirectory = Path.Combine (Path.GetTempPath (), "ResXResourceReaderTest");
30 _otherTempDirectory = Path.Combine (_tempDirectory, "in");
31 if (!Directory.Exists (_otherTempDirectory)) {
32 Directory.CreateDirectory (_otherTempDirectory);
37 public void TearDown ()
39 if (Directory.Exists (_tempDirectory))
40 Directory.Delete (_tempDirectory, true);
44 public void Constructor1_Stream_InvalidContent ()
46 MemoryStream ms = new MemoryStream ();
47 ms.WriteByte (byte.MaxValue);
49 ResXResourceReader r = new ResXResourceReader (ms);
53 } catch (ArgumentException ex) {
55 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#2");
56 Assert.IsNotNull (ex.Message, "#3");
57 Assert.IsNull (ex.ParamName, "#4");
58 Assert.IsNotNull (ex.InnerException, "#5");
63 public void Constructor2_FileName_DoesNotExist ()
65 ResXResourceReader r = new ResXResourceReader ((string) "definitelydoesnotexist.zzz");
69 } catch (FileNotFoundException ex) {
70 Assert.AreEqual (typeof (FileNotFoundException), ex.GetType (), "#2");
71 Assert.IsNotNull (ex.FileName, "#3");
72 Assert.IsNotNull (ex.Message, "#4");
73 Assert.IsNull (ex.InnerException, "#5");
78 public void Constructor3_Reader_InvalidContent ()
80 StringReader sr = new StringReader ("</definitelyinvalid<");
81 ResXResourceReader r = new ResXResourceReader (sr);
85 } catch (ArgumentException ex) {
87 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#2");
88 Assert.IsNotNull (ex.Message, "#3");
89 Assert.IsNull (ex.ParamName, "#4");
90 Assert.IsNotNull (ex.InnerException, "#5");
91 Assert.AreEqual (typeof (XmlException), ex.InnerException.GetType (), "#6");
96 public void Close_FileName ()
98 string fileName = Path.Combine (Path.Combine ("Test", "System.Resources"), "compat_1_1.resx");
100 ResXResourceReader r1 = new ResXResourceReader (fileName);
105 ResXResourceReader r2 = new ResXResourceReader (fileName);
112 public void Close_Reader ()
114 string fileName = Path.Combine (Path.Combine ("Test", "System.Resources"), "compat_1_1.resx");
116 using (StreamReader sr = new StreamReader (fileName)) {
117 ResXResourceReader r = new ResXResourceReader (sr);
118 Assert.IsFalse (sr.Peek () == -1, "#A1");
120 Assert.IsTrue (sr.Peek () == -1, "#A2");
125 } catch (ObjectDisposedException) {
130 using (StreamReader sr = new StreamReader (fileName)) {
131 ResXResourceReader r = new ResXResourceReader (sr);
136 } catch (ObjectDisposedException) {
141 } catch (NullReferenceException) { // MS
142 } catch (InvalidOperationException) { // Mono
148 public void Close_Stream ()
150 string fileName = Path.Combine (Path.Combine ("Test", "System.Resources"), "compat_1_1.resx");
152 using (FileStream fs = File.OpenRead (fileName)) {
153 ResXResourceReader r = new ResXResourceReader (fs);
154 Assert.AreEqual (0, fs.Position, "#A1");
156 Assert.IsFalse (fs.Position == 0, "#A2");
157 Assert.IsTrue (fs.CanRead, "#A3");
159 Assert.IsTrue (fs.CanRead, "#A4");
160 r.GetEnumerator ().MoveNext ();
163 using (FileStream fs = File.OpenRead (fileName)) {
164 ResXResourceReader r = new ResXResourceReader (fs);
166 Assert.AreEqual (0, fs.Position, "#B1");
168 Assert.IsFalse (fs.Position == 0, "#B2");
173 public void ExternalFileReference_RelativePath ()
175 string refFile = Path.Combine (_otherTempDirectory, "string.txt");
176 string relRefFile = Path.Combine ("in", "string.txt");
177 using (StreamWriter sw = new StreamWriter (refFile, false, Encoding.UTF8)) {
181 string resxFile = Path.Combine (_tempDirectory, "resources.resx");
182 using (StreamWriter sw = new StreamWriter (resxFile, false, Encoding.UTF8)) {
183 sw.Write (string.Format (CultureInfo.InvariantCulture,
184 _resXFileRefTemplate, ResXResourceWriter.ResMimeType, "1.0",
185 Consts.AssemblySystem_Windows_Forms,
186 "in" + Path.DirectorySeparatorChar + "string.txt",
187 typeof (StreamReader).AssemblyQualifiedName, string.Empty));
190 using (ResXResourceReader r = new ResXResourceReader (resxFile)) {
194 } catch (ArgumentException ex) {
195 // Invalid ResX input
196 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#A2");
197 Assert.IsNotNull (ex.InnerException, "#A3");
198 Assert.IsNotNull (ex.Message, "#A4");
199 Assert.IsNull (ex.ParamName, "#A5");
202 // Could not find a part of the path "<current dir>\in\string.txt".
203 // Line 1, position 821
204 XmlException inner = ex.InnerException as XmlException;
205 Assert.IsNotNull (inner, "#A6");
206 Assert.AreEqual (typeof (XmlException), inner.GetType (), "#A7");
207 Assert.IsNotNull (inner.InnerException, "#A8");
208 Assert.AreEqual (1, inner.LineNumber, "#A9");
209 Assert.AreEqual (821, inner.LinePosition, "#A10");
210 Assert.IsNotNull (inner.Message, "#A11");
211 Assert.IsTrue (inner.Message.IndexOf (Path.Combine (
212 Directory.GetCurrentDirectory (), relRefFile)) != -1, "#A12");
214 // Could not find a part of the path "<current dir>\in\string.txt"
215 Exception inner2 = inner.InnerException;
216 Assert.AreEqual (typeof (DirectoryNotFoundException), inner2.GetType (), "#A13");
217 Assert.IsNull (inner2.InnerException, "#A14");
218 Assert.IsNotNull (inner2.Message, "#A15");
219 Assert.IsTrue (inner2.Message.IndexOf (Path.Combine (
220 Directory.GetCurrentDirectory (), relRefFile)) != -1, "#A16");
222 // Could not find a part of the path "<current dir>\in\string.txt"
223 Exception inner = ex.InnerException;
224 Assert.AreEqual (typeof (DirectoryNotFoundException), inner.GetType (), "#A6");
225 Assert.IsNull (inner.InnerException, "#A7");
226 Assert.IsNotNull (inner.Message, "#A8");
227 Assert.IsTrue (inner.Message.IndexOf (Path.Combine (
228 Directory.GetCurrentDirectory (), relRefFile)) != -1, "#A9");
232 Assert.IsNull (r.BasePath, "#A17");
236 string originalCurrentDir = Directory.GetCurrentDirectory ();
237 Directory.SetCurrentDirectory (_tempDirectory);
239 using (ResXResourceReader r = new ResXResourceReader (resxFile)) {
240 IDictionaryEnumerator enumerator = r.GetEnumerator ();
241 enumerator.MoveNext ();
242 Assert.IsNotNull (enumerator.Current, "#B1");
243 Assert.AreEqual ("foo", enumerator.Key, "#B2");
244 using (StreamReader sr = enumerator.Value as StreamReader) {
245 Assert.IsNotNull (sr, "#B3");
246 Assert.AreEqual ("hello", sr.ReadToEnd (), "#B4");
249 Assert.IsNull (r.BasePath, "#B5");
253 // restore original current directory
254 Directory.SetCurrentDirectory (originalCurrentDir);
258 using (ResXResourceReader r = new ResXResourceReader (resxFile)) {
259 r.BasePath = _tempDirectory;
260 IDictionaryEnumerator enumerator = r.GetEnumerator ();
261 enumerator.MoveNext ();
262 Assert.IsNotNull (enumerator.Current, "#C1");
263 Assert.AreEqual ("foo", enumerator.Key, "#C2");
264 using (StreamReader sr = enumerator.Value as StreamReader) {
265 Assert.IsNotNull (sr, "#C3");
266 Assert.AreEqual ("hello", sr.ReadToEnd (), "#C4");
268 Assert.AreEqual (_tempDirectory, r.BasePath, "#C5");
271 using (ResXResourceReader r = new ResXResourceReader (resxFile)) {
272 r.BasePath = Path.GetTempPath ();
276 } catch (ArgumentException ex) {
277 // Invalid ResX input
278 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#D2");
279 Assert.IsNotNull (ex.InnerException, "#D3");
280 Assert.IsNotNull (ex.Message, "#D4");
281 Assert.IsNull (ex.ParamName, "#D5");
283 // Could not find a part of the path "<temp path>\in\string.txt".
284 // Line 1, position 821
285 XmlException inner = ex.InnerException as XmlException;
286 Assert.IsNotNull (inner, "#D6");
287 Assert.AreEqual (typeof (XmlException), inner.GetType (), "#D7");
288 Assert.IsNotNull (inner.InnerException, "#D8");
289 Assert.AreEqual (1, inner.LineNumber, "#D9");
290 Assert.AreEqual (821, inner.LinePosition, "#D10");
291 Assert.IsNotNull (inner.Message, "#D11");
292 Assert.IsTrue (inner.Message.IndexOf (Path.Combine (
293 Path.GetTempPath (), relRefFile)) != -1, "#D12");
295 // Could not find a part of the path "<temp path>\in\string.txt"
296 Exception inner2 = inner.InnerException as Exception;
297 Assert.AreEqual (typeof (DirectoryNotFoundException), inner2.GetType (), "#D13");
298 Assert.IsNull (inner2.InnerException, "#D14");
299 Assert.IsNotNull (inner2.Message, "#D15");
300 Assert.IsTrue (inner2.Message.IndexOf (Path.Combine (
301 Path.GetTempPath (), relRefFile)) != -1, "#D16");
303 Assert.AreEqual (Path.GetTempPath (), r.BasePath, "#D17");
309 public void FileRef_String_UTF7 ()
311 string refFile = Path.Combine (_otherTempDirectory, "string.txt");
312 using (StreamWriter sw = new StreamWriter (refFile, false, Encoding.UTF7)) {
313 sw.Write ("\u0021\u0026\u002A\u003B");
316 string resxFile = Path.Combine (_tempDirectory, "resources.resx");
317 using (StreamWriter sw = new StreamWriter (resxFile, false, Encoding.UTF8)) {
318 sw.Write (string.Format (CultureInfo.InvariantCulture,
319 _resXFileRefTemplate, ResXResourceWriter.ResMimeType, "1.0",
320 Consts.AssemblySystem_Windows_Forms, refFile,
321 typeof (string).AssemblyQualifiedName, string.Empty));
324 using (ResXResourceReader r = new ResXResourceReader (resxFile)) {
326 IDictionaryEnumerator enumerator = r.GetEnumerator ();
327 enumerator.MoveNext ();
328 Assert.IsNotNull (enumerator.Current, "#A1");
329 Assert.AreEqual ("foo", enumerator.Key, "#A2");
330 Assert.IsFalse ("\u0021\u0026\u002A\u003B" == (string) enumerator.Value, "#A3");
335 } catch (ArgumentException ex) {
336 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#A2");
337 Assert.IsNotNull (ex.InnerException, "#A3");
338 Assert.IsNotNull (ex.Message, "#A4");
339 Assert.IsNull (ex.ParamName, "#A5");
341 Assert.AreEqual (typeof (MissingMethodException), ex.InnerException.GetType (), "#A6");
346 resxFile = Path.Combine (_tempDirectory, "resources.resx");
347 using (StreamWriter sw = new StreamWriter (resxFile, false, Encoding.UTF8)) {
348 sw.Write (string.Format (CultureInfo.InvariantCulture,
349 _resXFileRefTemplate, ResXResourceWriter.ResMimeType, "1.0",
350 Consts.AssemblySystem_Windows_Forms, refFile,
351 typeof (string).AssemblyQualifiedName, ";utf-7"));
354 using (ResXResourceReader r = new ResXResourceReader (resxFile)) {
356 IDictionaryEnumerator enumerator = r.GetEnumerator ();
357 enumerator.MoveNext ();
358 Assert.IsNotNull (enumerator.Current, "#B1");
359 Assert.AreEqual ("foo", enumerator.Key, "#B2");
360 Assert.AreEqual ("\u0021\u0026\u002A\u003B", (string) enumerator.Value, "#B3");
365 } catch (ArgumentException ex) {
366 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#B2");
367 Assert.IsNotNull (ex.InnerException, "#B3");
368 Assert.IsNotNull (ex.Message, "#B4");
369 Assert.IsNull (ex.ParamName, "#B5");
371 Assert.AreEqual (typeof (MissingMethodException), ex.InnerException.GetType (), "#B6");
378 public void FileRef_String_UTF8 ()
380 string refFile = Path.Combine (_otherTempDirectory, "string.txt");
381 using (StreamWriter sw = new StreamWriter (refFile, false, Encoding.UTF8)) {
382 sw.Write ("\u0041\u2262\u0391\u002E");
385 string resxFile = Path.Combine (_tempDirectory, "resources.resx");
386 using (StreamWriter sw = new StreamWriter (resxFile, false, Encoding.UTF8)) {
387 sw.Write (string.Format (CultureInfo.InvariantCulture,
388 _resXFileRefTemplate, ResXResourceWriter.ResMimeType, "1.0",
389 Consts.AssemblySystem_Windows_Forms, refFile,
390 typeof (string).AssemblyQualifiedName, string.Empty));
393 using (ResXResourceReader r = new ResXResourceReader (resxFile)) {
395 IDictionaryEnumerator enumerator = r.GetEnumerator ();
396 enumerator.MoveNext ();
397 Assert.IsNotNull (enumerator.Current, "#A1");
398 Assert.AreEqual ("foo", enumerator.Key, "#A2");
399 Assert.AreEqual ("\u0041\u2262\u0391\u002E", (string) enumerator.Value, "#A3");
404 } catch (ArgumentException ex) {
405 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#A2");
406 Assert.IsNotNull (ex.InnerException, "#A3");
407 Assert.IsNotNull (ex.Message, "#A4");
408 Assert.IsNull (ex.ParamName, "#A5");
410 Assert.AreEqual (typeof (MissingMethodException), ex.InnerException.GetType (), "#A6");
415 resxFile = Path.Combine (_tempDirectory, "resources.resx");
416 using (StreamWriter sw = new StreamWriter (resxFile, false, Encoding.UTF8)) {
417 sw.Write (string.Format (CultureInfo.InvariantCulture,
418 _resXFileRefTemplate, ResXResourceWriter.ResMimeType, "1.0",
419 Consts.AssemblySystem_Windows_Forms, refFile,
420 typeof (string).AssemblyQualifiedName, ";utf-8"));
423 using (ResXResourceReader r = new ResXResourceReader (resxFile)) {
425 IDictionaryEnumerator enumerator = r.GetEnumerator ();
426 enumerator.MoveNext ();
427 Assert.IsNotNull (enumerator.Current, "#B1");
428 Assert.AreEqual ("foo", enumerator.Key, "#B2");
429 Assert.AreEqual ("\u0041\u2262\u0391\u002E", (string) enumerator.Value, "#B3");
434 } catch (ArgumentException ex) {
435 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#B2");
436 Assert.IsNotNull (ex.InnerException, "#B3");
437 Assert.IsNotNull (ex.Message, "#B4");
438 Assert.IsNull (ex.ParamName, "#B5");
440 Assert.AreEqual (typeof (MissingMethodException), ex.InnerException.GetType (), "#B6");
447 public void Namespaces ()
449 const string resXTemplate =
450 "<?xml version=\"1.0\" encoding=\"utf-8\"?>" +
451 "<o:Document xmlns:x=\"http://www.mono-project.com\" xmlns:o=\"http://tempuri.org\">" +
453 " <x:DaTa name=\"name\">" +
454 " <o:value>de Icaza</o:value>" +
456 " <x:data name=\"firstName\">" +
459 " <o:data name=\"Address\" />" +
460 " <o:data name=\"city\">" +
461 " <x:value>Boston </x:value>" +
463 " <o:data name=\"country\">" +
466 " <o:data name=\"\">" +
469 " <o:data name=\"country\">" +
470 " <x:value>Belgium</x:value>" +
472 " <data name=\"zip\">" +
473 " <value><![CDATA[ <3510> ]]></value>" +
477 " <o:resheader name=\"resmimetype\">" +
478 " <o:value>{0}</o:value>" +
480 " <x:resheader name=\"version\">" +
481 " <o:value>{1}</o:value>" +
485 " <o:resheader name=\"reader\">" +
486 " <x:value>System.Resources.ResXResourceReader, {2}</x:value>" +
488 " <x:resheader name=\"writer\">" +
489 " <x:value>System.Resources.ResXResourceWriter, {2}</x:value>" +
494 string resxFile = Path.Combine (_tempDirectory, "resources.resx");
495 using (StreamWriter sw = new StreamWriter (resxFile, false, Encoding.UTF8)) {
496 sw.Write (string.Format (CultureInfo.InvariantCulture,
497 resXTemplate, ResXResourceWriter.ResMimeType, "1.0",
498 Consts.AssemblySystem_Windows_Forms));
502 using (FileStream fs = new FileStream (resxFile, FileMode.Open, FileAccess.Read, FileShare.Read)) {
503 using (ResXResourceReader r = new ResXResourceReader (fs)) {
504 IDictionaryEnumerator enumerator = r.GetEnumerator ();
506 while (enumerator.MoveNext ()) {
508 switch ((string) enumerator.Key) {
510 Assert.IsNotNull (enumerator.Value, "#A1");
511 Assert.AreEqual ("BO", enumerator.Value, "#A2");
514 Assert.IsNotNull (enumerator.Value, "#B1");
516 Assert.AreEqual (string.Empty, enumerator.Value, "#B2");
518 Assert.AreEqual ("Boston ", enumerator.Value, "#B2");
522 Assert.IsNotNull (enumerator.Value, "#C1");
524 Assert.AreEqual (string.Empty, enumerator.Value, "#C2");
526 Assert.AreEqual ("Belgium", enumerator.Value, "#C2");
531 Assert.IsNull (enumerator.Value, "#D");
533 Assert.IsNotNull (enumerator.Value, "#D1");
534 Assert.AreEqual (string.Empty, enumerator.Value, "#D2");
538 Assert.IsNotNull (enumerator.Value, "#E1");
539 Assert.AreEqual (" <3510> ", enumerator.Value, "#E2");
542 Assert.Fail ("#F:" + enumerator.Key);
546 Assert.AreEqual (5, entries, "#G");
552 public void ResHeader_Missing ()
554 const string resXTemplate =
555 "<?xml version=\"1.0\" encoding=\"utf-8\"?>" +
557 " <data name=\"name\">" +
558 " <value>de Icaza</value>" +
560 " <data name=\"firstName\">" +
563 " <data name=\"address\" />" +
566 string resxFile = Path.Combine (_tempDirectory, "resources.resx");
567 using (StreamWriter sw = new StreamWriter (resxFile, false, Encoding.UTF8)) {
568 sw.Write (resXTemplate);
572 using (FileStream fs = new FileStream (resxFile, FileMode.Open, FileAccess.Read, FileShare.Read)) {
573 using (ResXResourceReader r = new ResXResourceReader (fs)) {
577 } catch (ArgumentException ex) {
578 //Invalid ResX input. Could not find valid \"resheader\"
579 // tags for the ResX reader & writer type names
580 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#A2");
581 Assert.IsNull (ex.InnerException, "#A3");
582 Assert.IsNotNull (ex.Message, "#A4");
583 Assert.IsTrue (ex.Message.IndexOf ("\"resheader\"") != -1, "#A5");
584 Assert.IsNull (ex.ParamName, "#A6");
590 using (ResXResourceReader r = new ResXResourceReader (resxFile)) {
594 } catch (ArgumentException ex) {
595 //Invalid ResX input. Could not find valid \"resheader\"
596 // tags for the ResX reader & writer type names
597 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#B2");
598 Assert.IsNull (ex.InnerException, "#B3");
599 Assert.IsNotNull (ex.Message, "#B4");
600 Assert.IsTrue (ex.Message.IndexOf ("\"resheader\"") != -1, "#B5");
601 Assert.IsNull (ex.ParamName, "#B6");
606 using (StreamReader sr = new StreamReader (resxFile, Encoding.UTF8)) {
607 using (ResXResourceReader r = new ResXResourceReader (sr)) {
611 } catch (ArgumentException ex) {
612 //Invalid ResX input. Could not find valid \"resheader\"
613 // tags for the ResX reader & writer type names
614 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#C2");
615 Assert.IsNull (ex.InnerException, "#C3");
616 Assert.IsNotNull (ex.Message, "#C4");
617 Assert.IsTrue (ex.Message.IndexOf ("\"resheader\"") != -1, "#C5");
618 Assert.IsNull (ex.ParamName, "#C6");
625 public void ResHeader_ResMimeType ()
627 const string resXTemplate =
628 "<?xml version=\"1.0\" encoding=\"utf-8\"?>" +
630 " <resheader name=\"resMIMEtype\">" +
633 " <resheader name=\"version\">" +
634 " <value>{1}</value>" +
636 " <resheader name=\"reAder\">" +
637 " <value>System.Resources.ResXResourceReader, {2}</value>" +
639 " <resheader name=\"wriTer\">" +
640 " <value>System.Resources.ResXResourceWriter, {2}</value>" +
644 string resXContent = null;
646 // <value> element, exact case
647 resXContent = string.Format (CultureInfo.InvariantCulture,
648 resXTemplate, ResXResourceWriter.ResMimeType, "1.0",
649 Consts.AssemblySystem_Windows_Forms);
650 using (ResXResourceReader r = new ResXResourceReader (new StringReader (resXContent))) {
654 // <value> element, uppercase
655 resXContent = string.Format (CultureInfo.InvariantCulture,
656 resXTemplate, ResXResourceWriter.ResMimeType.ToUpper (), "1.0",
657 Consts.AssemblySystem_Windows_Forms);
658 using (ResXResourceReader r = new ResXResourceReader (new StringReader (resXContent))) {
662 } catch (ArgumentException ex) {
663 //Invalid ResX input. Could not find valid \"resheader\"
664 // tags for the ResX reader & writer type names
665 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#A2");
666 Assert.IsNull (ex.InnerException, "#A3");
667 Assert.IsNotNull (ex.Message, "#A4");
668 Assert.IsTrue (ex.Message.IndexOf ("\"resheader\"") != -1, "#A5");
669 Assert.IsNull (ex.ParamName, "#A6");
674 resXContent = string.Format (CultureInfo.InvariantCulture,
675 resXTemplate, ResXResourceWriter.ResMimeType, "1.0",
676 Consts.AssemblySystem_Windows_Forms);
677 using (ResXResourceReader r = new ResXResourceReader (new StringReader (resXContent))) {
682 resXContent = string.Format (CultureInfo.InvariantCulture,
683 resXTemplate, ResXResourceWriter.ResMimeType.ToUpper (), "1.0",
684 Consts.AssemblySystem_Windows_Forms);
685 using (ResXResourceReader r = new ResXResourceReader (new StringReader (resXContent))) {
689 } catch (ArgumentException ex) {
690 //Invalid ResX input. Could not find valid \"resheader\"
691 // tags for the ResX reader & writer type names
692 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#B2");
693 Assert.IsNull (ex.InnerException, "#B3");
694 Assert.IsNotNull (ex.Message, "#B4");
695 Assert.IsTrue (ex.Message.IndexOf ("\"resheader\"") != -1, "#B5");
696 Assert.IsNull (ex.ParamName, "#B6");
701 resXContent = string.Format (CultureInfo.InvariantCulture,
702 resXTemplate, "<![CDATA[" +ResXResourceWriter.ResMimeType + "]]>",
703 "1.0", Consts.AssemblySystem_Windows_Forms);
704 using (ResXResourceReader r = new ResXResourceReader (new StringReader (resXContent))) {
709 resXContent = string.Format (CultureInfo.InvariantCulture,
710 resXTemplate, "<![CDATA[" + ResXResourceWriter.ResMimeType.ToUpper () + "]]>",
711 "1.0", Consts.AssemblySystem_Windows_Forms);
712 using (ResXResourceReader r = new ResXResourceReader (new StringReader (resXContent))) {
716 } catch (ArgumentException ex) {
717 //Invalid ResX input. Could not find valid \"resheader\"
718 // tags for the ResX reader & writer type names
719 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#C2");
720 Assert.IsNull (ex.InnerException, "#C3");
721 Assert.IsNotNull (ex.Message, "#C4");
722 Assert.IsTrue (ex.Message.IndexOf ("\"resheader\"") != -1, "#C5");
723 Assert.IsNull (ex.ParamName, "#C6");
727 // <whatever> element, exact case
728 resXContent = string.Format (CultureInfo.InvariantCulture,
729 resXTemplate, "<whatever>" + ResXResourceWriter.ResMimeType + "</whatever>",
730 "1.0", Consts.AssemblySystem_Windows_Forms);
731 using (ResXResourceReader r = new ResXResourceReader (new StringReader (resXContent))) {
735 // <whatever> element, uppercase
736 resXContent = string.Format (CultureInfo.InvariantCulture,
737 resXTemplate, "<whatever>" + ResXResourceWriter.ResMimeType.ToUpper () + "</whatever>",
738 "1.0", Consts.AssemblySystem_Windows_Forms);
739 using (ResXResourceReader r = new ResXResourceReader (new StringReader (resXContent))) {
743 } catch (ArgumentException ex) {
744 //Invalid ResX input. Could not find valid \"resheader\"
745 // tags for the ResX reader & writer type names
746 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#D2");
747 Assert.IsNull (ex.InnerException, "#D3");
748 Assert.IsNotNull (ex.Message, "#D4");
749 Assert.IsTrue (ex.Message.IndexOf ("\"resheader\"") != -1, "#D5");
750 Assert.IsNull (ex.ParamName, "#D6");
756 public void ResHeader_ResMimeType_Empty ()
758 const string resXTemplate =
759 "<?xml version=\"1.0\" encoding=\"utf-8\"?>" +
761 " <resheader name=\"resmimetype\"></resheader>" +
764 using (ResXResourceReader r = new ResXResourceReader (new StringReader (resXTemplate))) {
768 } catch (ArgumentException ex) {
769 //Invalid ResX input. Could not find valid \"resheader\"
770 // tags for the ResX reader & writer type names
771 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#2");
772 Assert.IsNull (ex.InnerException, "#3");
773 Assert.IsNotNull (ex.Message, "#4");
774 Assert.IsTrue (ex.Message.IndexOf ("\"resheader\"") != -1, "#5");
775 Assert.IsNull (ex.ParamName, "#6");
781 public void ResHeader_ResMimeType_Invalid ()
783 const string resXTemplate =
784 "<?xml version=\"1.0\" encoding=\"utf-8\"?>" +
786 " <resheader name=\"resmimetype\">" +
787 " <value>{0}</value>" +
789 " <resheader name=\"version\">" +
790 " <value>{1}</value>" +
792 " <resheader name=\"reader\">" +
793 " <value>System.Resources.ResXResourceReader, {2}</value>" +
795 " <resheader name=\"writer\">" +
796 " <value>System.Resources.ResXResourceWriter, {2}</value>" +
798 " <data name=\"name\">" +
799 " <value>de Icaza</value>" +
801 " <data name=\"firstName\">" +
804 " <data name=\"Address\" />" +
807 string resxFile = Path.Combine (_tempDirectory, "resources.resx");
808 using (StreamWriter sw = new StreamWriter (resxFile, false, Encoding.UTF8)) {
809 sw.Write (string.Format (CultureInfo.InvariantCulture,
810 resXTemplate, "notvalid", "1.0", Consts.AssemblySystem_Windows_Forms
815 using (FileStream fs = new FileStream (resxFile, FileMode.Open, FileAccess.Read, FileShare.Read)) {
816 using (ResXResourceReader r = new ResXResourceReader (fs)) {
820 } catch (ArgumentException ex) {
821 //Invalid ResX input. Could not find valid \"resheader\"
822 // tags for the ResX reader & writer type names
823 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#A2");
824 Assert.IsNull (ex.InnerException, "#A3");
825 Assert.IsNotNull (ex.Message, "#A4");
826 Assert.IsTrue (ex.Message.IndexOf ("\"resheader\"") != -1, "#A5");
827 Assert.IsNull (ex.ParamName, "#A6");
833 using (ResXResourceReader r = new ResXResourceReader (resxFile)) {
837 } catch (ArgumentException ex) {
838 //Invalid ResX input. Could not find valid \"resheader\"
839 // tags for the ResX reader & writer type names
840 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#B2");
841 Assert.IsNull (ex.InnerException, "#B3");
842 Assert.IsNotNull (ex.Message, "#B4");
843 Assert.IsTrue (ex.Message.IndexOf ("\"resheader\"") != -1, "#B5");
844 Assert.IsNull (ex.ParamName, "#B6");
849 using (StreamReader sr = new StreamReader (resxFile, Encoding.UTF8)) {
850 using (ResXResourceReader r = new ResXResourceReader (sr)) {
854 } catch (ArgumentException ex) {
855 //Invalid ResX input. Could not find valid \"resheader\"
856 // tags for the ResX reader & writer type names
857 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#C2");
858 Assert.IsNull (ex.InnerException, "#C3");
859 Assert.IsNotNull (ex.Message, "#C4");
860 Assert.IsTrue (ex.Message.IndexOf ("\"resheader\"") != -1, "#C5");
861 Assert.IsNull (ex.ParamName, "#C6");
868 public void ResHeader_ResMimeType_Null ()
870 const string resXTemplate =
871 "<?xml version=\"1.0\" encoding=\"utf-8\"?>" +
873 " <resheader name=\"resmimetype\" />" +
876 using (ResXResourceReader r = new ResXResourceReader (new StringReader (resXTemplate))) {
880 } catch (ArgumentException ex) {
881 //Invalid ResX input. Could not find valid \"resheader\"
882 // tags for the ResX reader & writer type names
883 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#2");
884 Assert.IsNull (ex.InnerException, "#3");
885 Assert.IsNotNull (ex.Message, "#4");
886 Assert.IsTrue (ex.Message.IndexOf ("\"resheader\"") != -1, "#5");
887 Assert.IsNull (ex.ParamName, "#6");
893 public void ResHeader_Reader_Invalid ()
895 const string resXTemplate =
896 "<?xml version=\"1.0\" encoding=\"utf-8\"?>" +
898 " <resheader name=\"resmimetype\">" +
901 " <resheader name=\"version\">" +
902 " <value>{1}</value>" +
904 " <resheader name=\"reader\">" +
905 " <value>System.Resources.InvalidResXResourceReader, {2}</value>" +
907 " <resheader name=\"writer\">" +
908 " <value>System.Resources.ResXResourceWriter, {2}</value>" +
912 string resXContent = string.Format (CultureInfo.InvariantCulture,
913 resXTemplate, ResXResourceWriter.ResMimeType, "1.0",
914 Consts.AssemblySystem_Windows_Forms);
915 using (ResXResourceReader r = new ResXResourceReader (new StringReader (resXContent))) {
919 } catch (ArgumentException ex) {
920 //Invalid ResX input. Could not find valid \"resheader\"
921 // tags for the ResX reader & writer type names
922 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#2");
923 Assert.IsNull (ex.InnerException, "#3");
924 Assert.IsNotNull (ex.Message, "#4");
925 Assert.IsTrue (ex.Message.IndexOf ("\"resheader\"") != -1, "#5");
926 Assert.IsNull (ex.ParamName, "#6");
932 public void ResHeader_Reader_Missing ()
934 const string resXTemplate =
935 "<?xml version=\"1.0\" encoding=\"utf-8\"?>" +
937 " <resheader name=\"resmimetype\">" +
940 " <resheader name=\"version\">" +
941 " <value>{1}</value>" +
943 " <resheader name=\"writer\">" +
944 " <value>System.Resources.ResXResourceWriter, {2}</value>" +
948 string resXContent = string.Format (CultureInfo.InvariantCulture,
949 resXTemplate, ResXResourceWriter.ResMimeType, "1.0",
950 Consts.AssemblySystem_Windows_Forms);
951 using (ResXResourceReader r = new ResXResourceReader (new StringReader (resXContent))) {
955 } catch (ArgumentException ex) {
956 //Invalid ResX input. Could not find valid \"resheader\"
957 // tags for the ResX reader & writer type names
958 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#2");
959 Assert.IsNull (ex.InnerException, "#3");
960 Assert.IsNotNull (ex.Message, "#4");
961 Assert.IsTrue (ex.Message.IndexOf ("\"resheader\"") != -1, "#5");
962 Assert.IsNull (ex.ParamName, "#6");
968 public void ResHeader_Reader_Null ()
970 const string resXTemplate =
971 "<?xml version=\"1.0\" encoding=\"utf-8\"?>" +
973 " <resheader name=\"resmimetype\">" +
976 " <resheader name=\"version\">" +
977 " <value>{1}</value>" +
979 " <resheader name=\"reader\" />" +
980 " <resheader name=\"writer\">" +
981 " <value>System.Resources.ResXResourceWriter, {2}</value>" +
985 string resXContent = string.Format (CultureInfo.InvariantCulture,
986 resXTemplate, ResXResourceWriter.ResMimeType, "1.0",
987 Consts.AssemblySystem_Windows_Forms);
988 using (ResXResourceReader r = new ResXResourceReader (new StringReader (resXContent))) {
992 } catch (ArgumentException ex) {
993 //Invalid ResX input. Could not find valid \"resheader\"
994 // tags for the ResX reader & writer type names
995 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#2");
996 Assert.IsNull (ex.InnerException, "#3");
997 Assert.IsNotNull (ex.Message, "#4");
998 Assert.IsTrue (ex.Message.IndexOf ("\"resheader\"") != -1, "#5");
999 Assert.IsNull (ex.ParamName, "#6");
1005 public void ResHeader_Writer_Invalid ()
1007 const string resXTemplate =
1008 "<?xml version=\"1.0\" encoding=\"utf-8\"?>" +
1010 " <resheader name=\"resmimetype\">" +
1013 " <resheader name=\"version\">" +
1014 " <value>{1}</value>" +
1016 " <resheader name=\"reader\">" +
1017 " <value>System.Resources.ResXResourceReader, {2}</value>" +
1019 " <resheader name=\"writer\">" +
1020 " <value>System.Resources.InvalidResXResourceWriter, {2}</value>" +
1024 string resXContent = string.Format (CultureInfo.InvariantCulture,
1025 resXTemplate, ResXResourceWriter.ResMimeType, "1.0",
1026 Consts.AssemblySystem_Windows_Forms);
1027 using (ResXResourceReader r = new ResXResourceReader (new StringReader (resXContent))) {
1031 } catch (ArgumentException ex) {
1032 //Invalid ResX input. Could not find valid \"resheader\"
1033 // tags for the ResX reader & writer type names
1034 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#2");
1035 Assert.IsNull (ex.InnerException, "#3");
1036 Assert.IsNotNull (ex.Message, "#4");
1037 Assert.IsTrue (ex.Message.IndexOf ("\"resheader\"") != -1, "#5");
1038 Assert.IsNull (ex.ParamName, "#6");
1044 public void ResHeader_Writer_Missing ()
1046 const string resXTemplate =
1047 "<?xml version=\"1.0\" encoding=\"utf-8\"?>" +
1049 " <resheader name=\"resmimetype\">" +
1052 " <resheader name=\"version\">" +
1053 " <value>{1}</value>" +
1055 " <resheader name=\"reader\">" +
1056 " <value>System.Resources.ResXResourceReader, {2}</value>" +
1060 string resXContent = string.Format (CultureInfo.InvariantCulture,
1061 resXTemplate, ResXResourceWriter.ResMimeType, "1.0",
1062 Consts.AssemblySystem_Windows_Forms);
1063 using (ResXResourceReader r = new ResXResourceReader (new StringReader (resXContent))) {
1067 } catch (ArgumentException ex) {
1068 //Invalid ResX input. Could not find valid \"resheader\"
1069 // tags for the ResX reader & writer type names
1070 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#2");
1071 Assert.IsNull (ex.InnerException, "#3");
1072 Assert.IsNotNull (ex.Message, "#4");
1073 Assert.IsTrue (ex.Message.IndexOf ("\"resheader\"") != -1, "#5");
1074 Assert.IsNull (ex.ParamName, "#6");
1080 public void ResHeader_Writer_Null ()
1082 const string resXTemplate =
1083 "<?xml version=\"1.0\" encoding=\"utf-8\"?>" +
1085 " <resheader name=\"resmimetype\">" +
1088 " <resheader name=\"version\">" +
1089 " <value>{1}</value>" +
1091 " <resheader name=\"reader\">" +
1092 " <value>System.Resources.ResXResourceReader, {2}</value>" +
1094 " <resheader name=\"writer\" />" +
1097 string resXContent = string.Format (CultureInfo.InvariantCulture,
1098 resXTemplate, ResXResourceWriter.ResMimeType, "1.0",
1099 Consts.AssemblySystem_Windows_Forms);
1100 using (ResXResourceReader r = new ResXResourceReader (new StringReader (resXContent))) {
1104 } catch (ArgumentException ex) {
1105 //Invalid ResX input. Could not find valid \"resheader\"
1106 // tags for the ResX reader & writer type names
1107 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#2");
1108 Assert.IsNull (ex.InnerException, "#3");
1109 Assert.IsNotNull (ex.Message, "#4");
1110 Assert.IsTrue (ex.Message.IndexOf ("\"resheader\"") != -1, "#5");
1111 Assert.IsNull (ex.ParamName, "#6");
1117 public void ResHeader_Unknown ()
1119 const string resXTemplate =
1120 "<?xml version=\"1.0\" encoding=\"utf-8\"?>" +
1122 " <resheader name=\"resmimetype\">" +
1125 " <resheader name=\"version\">" +
1126 " <value>{1}</value>" +
1128 " <resheader name=\"reader\">" +
1129 " <value> System.Resources.ResXResourceReader , {2}</value>" +
1131 " <resheader name=\"writer\">" +
1132 " <value> System.Resources.ResXResourceWriter , {2}</value>" +
1134 " <resheader name=\"UNKNOWN\">" +
1135 " <value>whatever</value>" +
1139 string resXContent = string.Format (CultureInfo.InvariantCulture,
1140 resXTemplate, ResXResourceWriter.ResMimeType, "1.0",
1141 Consts.AssemblySystem_Windows_Forms);
1142 using (ResXResourceReader r = new ResXResourceReader (new StringReader (resXContent))) {
1148 public void ResName_Null ()
1150 const string resXContent =
1151 "<?xml version=\"1.0\" encoding=\"utf-8\"?>" +
1153 " <resheader name=\"resmimetype\">" +
1154 " <value>invalid</value>" +
1156 " <data name=\"name\">" +
1157 " <value>de Icaza</value>" +
1160 " <value>whatever</value>" +
1164 using (StringReader sr = new StringReader (resXContent)) {
1165 using (ResXResourceReader r = new ResXResourceReader (sr)) {
1169 } catch (ArgumentException ex) {
1170 // Invalid ResX input.
1171 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#2");
1172 Assert.IsNotNull (ex.InnerException, "#3");
1173 Assert.IsNotNull (ex.Message, "#4");
1174 Assert.IsNull (ex.ParamName, "#5");
1177 // Could not find a name for a resource. The resource
1178 // value was 'whatever'. Line 1, position 200
1179 XmlException inner = ex.InnerException as XmlException;
1180 Assert.IsNotNull (inner, "#6");
1181 Assert.AreEqual (typeof (XmlException), inner.GetType (), "#7");
1182 Assert.IsNotNull (inner.InnerException, "#8");
1183 Assert.AreEqual (1, inner.LineNumber, "#9");
1184 Assert.AreEqual (200, inner.LinePosition, "#10");
1185 Assert.IsNotNull (inner.Message, "#11");
1186 Assert.IsTrue (inner.Message.IndexOf ("'whatever'") != -1, "#12");
1187 Assert.IsTrue (inner.Message.IndexOf (" 1") != -1, "#13");
1188 Assert.IsTrue (inner.Message.IndexOf ("200") != -1, "#14");
1190 // Could not find a name for a resource. The resource
1191 // value was 'whatever'
1192 ArgumentException inner2 = inner.InnerException as ArgumentException;
1193 Assert.IsNotNull (inner2, "#15");
1194 Assert.AreEqual (typeof (ArgumentException), inner2.GetType (), "#16");
1195 Assert.IsNull (inner2.InnerException, "#17");
1196 Assert.IsNotNull (inner2.Message, "#18");
1197 Assert.IsTrue (inner2.Message.IndexOf ("'whatever'") != -1, "#19");
1198 Assert.IsNull (inner2.ParamName, "#20");
1200 // Could not find a name for a resource. The resource
1201 // value was 'whatever'
1202 ArgumentException inner = ex.InnerException as ArgumentException;
1203 Assert.IsNotNull (inner, "#6");
1204 Assert.AreEqual (typeof (ArgumentException), inner.GetType (), "#7");
1205 Assert.IsNull (inner.InnerException, "#8");
1206 Assert.IsNotNull (inner.Message, "#9");
1207 Assert.IsTrue (inner.Message.IndexOf ("'whatever'") != -1, "#10");
1208 Assert.IsNull (inner.ParamName, "#11");
1216 public void ResValue ()
1218 string resXContent = string.Format (CultureInfo.CurrentCulture,
1219 "<?xml version=\"1.0\" encoding=\"utf-8\"?>" +
1221 " <resheader name=\"resmimetype\">" +
1222 " <value>{0}</value>" +
1224 " <resheader name=\"reader\">" +
1225 " <value>System.Resources.ResXResourceReader, {1}</value>" +
1227 " <resheader name=\"writer\">" +
1228 " <value>System.Resources.ResXResourceWriter, {1}</value>" +
1230 " <data name=\"name1\">" +
1231 " <value><![CDATA[ <value1> ]]></value>" +
1233 " <data name=\"name2\">" +
1234 " <value> <![CDATA[<value2>]]> </value>" +
1236 " <data name=\"name3\">" +
1237 " <![CDATA[<value3>]]> " +
1239 " <data name=\"name4\">" +
1240 " <value> value4 </value>" +
1242 " <data name=\"name5\">" +
1243 " test<value>value5</value>" +
1245 " <data name=\"name6\">" +
1246 " test1<value>value6</value>test2" +
1248 " <data name=\"name7\">" +
1249 " <value>value7a</value>" +
1250 " <whatever>value7b</whatever>" +
1252 " <data name=\"name8\">" +
1253 " <whatever>value8</whatever>" +
1255 " <data name=\"name9\">" +
1256 " <whatever>value9a</whatever>" +
1257 " <whatever>value9b</whatever>" +
1259 " <data name=\"name10\">" +
1260 " test<whatever>value10</whatever>" +
1262 " <data name=\"name11\">" +
1263 " test1<whatever>value11</whatever>test2" +
1265 " <data name=\"name12\">" +
1266 " <value> test <![CDATA[<value12>]]> </value>" +
1268 " <data name=\"name13\">" +
1269 " test <![CDATA[<value13>]]> " +
1271 " <data name=\"name14\" />" +
1272 " <data name=\"name15\"></data>" +
1273 " <data name=\"name16\">value16</data>" +
1274 " <data name=\"name17\">value17</data>" +
1275 " <data name=\"name18\">" +
1276 " <value>value18</value>" +
1277 " <data name=\"name19\">" +
1278 " <value>value18</value>" +
1282 ResXResourceWriter.ResMimeType, Consts.AssemblySystem_Windows_Forms);
1284 using (StringReader sr = new StringReader (resXContent)) {
1285 using (ResXResourceReader r = new ResXResourceReader (sr)) {
1287 IDictionaryEnumerator enumerator = r.GetEnumerator ();
1289 while (enumerator.MoveNext ()) {
1291 switch ((string) enumerator.Key) {
1293 Assert.IsNotNull (enumerator.Value, "#A1");
1294 Assert.AreEqual (" <value1> ", enumerator.Value, "#A2");
1297 Assert.IsNotNull (enumerator.Value, "#B1");
1298 Assert.AreEqual ("<value2>", enumerator.Value, "#B2");
1301 Assert.IsNotNull (enumerator.Value, "#C1");
1302 Assert.AreEqual ("<value3>", enumerator.Value, "#C2");
1305 Assert.IsNotNull (enumerator.Value, "#D1");
1306 Assert.AreEqual (" value4 ", enumerator.Value, "#D2");
1309 Assert.IsNotNull (enumerator.Value, "#E1");
1311 Assert.AreEqual ("value5", enumerator.Value, "#E2");
1313 Assert.AreEqual ("test", enumerator.Value, "#E2");
1317 Assert.IsNotNull (enumerator.Value, "#F1");
1319 Assert.AreEqual ("test2", enumerator.Value, "#F2");
1321 Assert.AreEqual ("test1", enumerator.Value, "#F2");
1325 Assert.IsNotNull (enumerator.Value, "#G1");
1327 Assert.AreEqual (string.Empty, enumerator.Value, "#G2");
1329 Assert.AreEqual ("value7a", enumerator.Value, "#G2");
1333 Assert.IsNotNull (enumerator.Value, "#H1");
1335 Assert.AreEqual (string.Empty, enumerator.Value, "#H2");
1337 Assert.AreEqual ("value8", enumerator.Value, "#H2");
1341 Assert.IsNotNull (enumerator.Value, "#I1");
1343 Assert.AreEqual (string.Empty, enumerator.Value, "#I2");
1345 Assert.AreEqual ("value9a", enumerator.Value, "#I2");
1349 Assert.IsNotNull (enumerator.Value, "#J1");
1351 Assert.AreEqual (string.Empty, enumerator.Value, "#J2");
1353 Assert.AreEqual ("test", enumerator.Value, "#J2");
1357 Assert.IsNotNull (enumerator.Value, "#K1");
1359 Assert.AreEqual ("test2", enumerator.Value, "#K2");
1361 Assert.AreEqual ("test1", enumerator.Value, "#K2");
1365 Assert.IsNotNull (enumerator.Value, "#L1");
1366 Assert.AreEqual (" test <value12>", enumerator.Value, "#L2");
1369 Assert.IsNotNull (enumerator.Value, "#M1");
1371 Assert.AreEqual ("<value13>", enumerator.Value, "#M2");
1373 Assert.AreEqual ("test", enumerator.Value, "#M2");
1378 Assert.IsNull (enumerator.Value, "#N1");
1380 Assert.IsNotNull (enumerator.Value, "#N1");
1381 Assert.AreEqual (string.Empty, enumerator.Value, "#N2");
1386 Assert.IsNotNull (enumerator.Value, "#O1");
1387 Assert.AreEqual ("value16", enumerator.Value, "#O2");
1391 Assert.IsNotNull (enumerator.Value, "#P1");
1392 Assert.AreEqual ("value17", enumerator.Value, "#P2");
1395 Assert.IsNotNull (enumerator.Value, "#Q1");
1396 Assert.AreEqual ("value18", enumerator.Value, "#Q2");
1399 Assert.Fail ("#Q:" + enumerator.Key);
1404 Assert.AreEqual (17, entries, "#Q");
1406 Assert.AreEqual (16, entries, "#Q");
1412 private const string _resXFileRefTemplate =
1413 "<?xml version=\"1.0\" encoding=\"utf-8\"?>" +
1415 " <resheader name=\"resmimetype\">" +
1416 " <value>{0}</value>" +
1418 " <resheader name=\"version\">" +
1419 " <value>{1}</value>" +
1421 " <resheader name=\"reader\">" +
1422 " <value>System.Resources.ResXResourceReader, {2}</value>" +
1424 " <resheader name=\"writer\">" +
1425 " <value>System.Resources.ResXResourceWriter, {2}</value>" +
1427 " <data name=\"foo\" type=\"System.Resources.ResXFileRef, {2}\">" +
1428 " <value>{3};{4}{5}</value>" +