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