PackagePartFileTests.cs 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138
  1. using System;
  2. using System.IO;
  3. using System.IO.Packaging;
  4. using NUnit.Framework;
  5. namespace MonoTests.System.IO.Packaging
  6. {
  7. [TestFixture]
  8. public class PackagePartFileTests
  9. {
  10. string path;
  11. [SetUp]
  12. public void Setup()
  13. {
  14. path = Path.GetTempFileName();
  15. Package.Open(path, FileMode.Create).Close();
  16. }
  17. [TearDown]
  18. public void Teardown()
  19. {
  20. File.Delete(path);
  21. }
  22. [Test]
  23. public void TestFileMode ()
  24. {
  25. Uri uri =new Uri("/somepart.xml", UriKind.Relative);
  26. FileMode[] modes = { FileMode.Open, FileMode.OpenOrCreate, FileMode.Create };
  27. using (Package package = Package.Open(path))
  28. {
  29. PackagePart part;
  30. foreach (FileMode mode in modes)
  31. {
  32. part = package.CreatePart(uri, "application/xml");
  33. part.GetStream(mode, FileAccess.Write);
  34. package.DeletePart(uri);
  35. }
  36. part = package.CreatePart(uri, "application/xml");
  37. foreach (FileMode mode in modes)
  38. part.GetStream(mode, FileAccess.Write);
  39. }
  40. }
  41. [Test]
  42. public void TestFileMode2()
  43. {
  44. Uri uri = new Uri("/somepart.xml", UriKind.Relative);
  45. FileMode[] modes = { FileMode.Create, FileMode.CreateNew, FileMode.Truncate, FileMode.Append };
  46. FileMode[] otherModes = { FileMode.Open, FileMode.OpenOrCreate };
  47. using (Package package = Package.Open(path))
  48. {
  49. PackagePart part = package.CreatePart(uri, "application/xml");
  50. foreach (FileMode mode in modes)
  51. {
  52. try
  53. {
  54. part.GetStream(mode, FileAccess.Read);
  55. throw new Exception (string.Format ("Should not be able to open with: {0}", mode));
  56. }
  57. catch (IOException)
  58. {
  59. // This should be thrown
  60. }
  61. }
  62. foreach (FileMode mode in otherModes)
  63. {
  64. Stream s = part.GetStream(mode, FileAccess.Read);
  65. Assert.IsTrue(s.CanRead);
  66. Assert.IsFalse(s.CanWrite);
  67. }
  68. }
  69. }
  70. [Test]
  71. [ExpectedException(typeof(ArgumentException))]
  72. public void CreateNewPackagePart()
  73. {
  74. using (Package package = Package.Open(path))
  75. {
  76. PackagePart part = package.CreatePart(new Uri("/somepart.xml", UriKind.Relative), "application/xml");
  77. // CreateNew is not supported
  78. part.GetStream(FileMode.CreateNew, FileAccess.Write);
  79. }
  80. }
  81. [Test]
  82. [ExpectedException(typeof(ArgumentException))]
  83. public void TruncatePackagePart()
  84. {
  85. using (Package package = Package.Open(path))
  86. {
  87. PackagePart part = package.CreatePart(new Uri("/somepart.xml", UriKind.Relative), "application/xml");
  88. // CreateNew is not supported
  89. part.GetStream(FileMode.Truncate, FileAccess.Write);
  90. }
  91. }
  92. [Test]
  93. [ExpectedException(typeof(ArgumentException))]
  94. public void AppendPackagePart()
  95. {
  96. using (Package package = Package.Open(path))
  97. {
  98. PackagePart part = package.CreatePart(new Uri("/somepart.xml", UriKind.Relative), "application/xml");
  99. // CreateNew is not supported
  100. part.GetStream(FileMode.Append, FileAccess.Write);
  101. }
  102. }
  103. [Test]
  104. public void TestOverwrite()
  105. {
  106. using (Package package = Package.Open(path))
  107. {
  108. PackagePart part = package.CreatePart(new Uri("/Uri.xml", UriKind.Relative), "content/type");
  109. Stream s = part.GetStream(FileMode.OpenOrCreate, FileAccess.Write);
  110. StreamWriter sw = new StreamWriter(s);
  111. sw.Write("<test>aaaaaaa</test>");
  112. sw.Flush();
  113. Stream s5 = part.GetStream(FileMode.Create, FileAccess.ReadWrite);
  114. StreamWriter sw2 = new StreamWriter(s5);
  115. sw2.Write("<test>bbb</test>");
  116. sw2.Flush();
  117. // Verify that the part got overwritten correctly.
  118. Stream s6 = part.GetStream();
  119. StreamReader sr = new StreamReader(s6);
  120. Assert.AreEqual("<test>bbb</test>", sr.ReadToEnd());
  121. }
  122. }
  123. }
  124. }