Added time format with only offset. Fixes #22558.
[mono.git] / mcs / class / WindowsBase / Test / System.IO.Packaging / PackagePartStreamTests.cs
1 // Permission is hereby granted, free of charge, to any person obtaining\r
2 // a copy of this software and associated documentation files (the\r
3 // "Software"), to deal in the Software without restriction, including\r
4 // without limitation the rights to use, copy, modify, merge, publish,\r
5 // distribute, sublicense, and/or sell copies of the Software, and to\r
6 // permit persons to whom the Software is furnished to do so, subject to\r
7 // the following conditions:\r
8 // \r
9 // The above copyright notice and this permission notice shall be\r
10 // included in all copies or substantial portions of the Software.\r
11 // \r
12 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,\r
13 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\r
14 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\r
15 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\r
16 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r
17 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\r
18 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r
19 //\r
20 // Copyright (c) 2008 Novell, Inc. (http://www.novell.com)\r
21 //\r
22 // Authors:\r
23 // Alan McGovern (amcgovern@novell.com)\r
24 //\r
25 \r
26 \r
27 using System;\r
28 using System.Collections.Generic;\r
29 using System.Linq;\r
30 using System.Text;\r
31 using NUnit.Framework;\r
32 \r
33 namespace System.IO.Packaging.Tests {\r
34     \r
35     [TestFixture]\r
36     public class PackagePartStreamTests : TestBase {\r
37 \r
38         byte [] buffer;\r
39         List<PackagePart> Parts = new List<PackagePart> ();\r
40         static void Main (string [] args)\r
41         {\r
42             PackagePartStreamTests t = new PackagePartStreamTests ();\r
43             t.FixtureSetup ();\r
44             t.Setup ();\r
45             t.CheckFlushTest ();\r
46         }\r
47 \r
48         public override void FixtureSetup ()\r
49         {\r
50             base.FixtureSetup ();\r
51 \r
52             Random r = new Random ();\r
53             buffer = new byte [1000];\r
54             r.NextBytes (buffer);\r
55         }\r
56 \r
57         public override void Setup ()\r
58         {\r
59             base.Setup ();\r
60 \r
61             Parts.Clear ();\r
62             foreach (Uri u in uris)\r
63                 Parts.Add (package.CreatePart (u, "mime/type"));\r
64         }\r
65 \r
66         [Test]\r
67         public void SameStreamTest ()\r
68         {\r
69             Assert.AreEqual (0, stream.Length, "#a");\r
70             package.Flush ();\r
71             Assert.IsTrue (stream.Length > 0, "#b");\r
72 \r
73             Stream s1 = Parts [0].GetStream ();\r
74             Stream s2 = Parts [0].GetStream ();\r
75             Assert.IsFalse (s1 == s2, "#1");\r
76             s1.WriteByte (5);\r
77             Assert.AreEqual (1, s1.Position, "#2");\r
78             Assert.AreEqual (0, s2.Position, "#3");\r
79             Assert.AreEqual (s1.Length, s2.Length, "#4");\r
80             Assert.AreEqual (5, s2.ReadByte (), "#5");\r
81             s2.SetLength (0);\r
82             Assert.AreEqual (0, s1.Length);\r
83         }\r
84 \r
85         [Test]\r
86         public void NoFlushTest ()\r
87         {\r
88             Parts [0].GetStream ().Write (buffer, 0, buffer.Length);\r
89             Assert.AreEqual (0, stream.Length);\r
90         }\r
91 \r
92         [Test]\r
93         public void FlushIndividualTest ()\r
94         {\r
95             Parts [0].GetStream ().Write (buffer, 0, buffer.Length);\r
96             Parts [0].GetStream ().Flush ();\r
97             Assert.AreEqual (buffer.Length, Parts [0].GetStream ().Length, "#1");\r
98             Assert.IsTrue (stream.Length > buffer.Length, "#2");\r
99         }\r
100 \r
101         [Test]\r
102         [Category ("NotWorking")]\r
103         [Ignore ("This test only works on MS.NET. Behaviour probably not easily replicatable")]\r
104         public void FlushPackageTest1 ()\r
105         {\r
106             FlushIndividualTest ();\r
107 \r
108             long count = stream.Length;\r
109             package.Flush ();\r
110             Assert.IsTrue (stream.Length > count, "#1");\r
111         }\r
112 \r
113         [Test]\r
114         [Category ("NotWorking")]\r
115         [Ignore ("This test is useless i believe")]\r
116         public void FlushOnlyPackage ()\r
117         {\r
118             NoFlushTest ();\r
119             package.Flush ();\r
120             long count = stream.Length;\r
121             TearDown ();\r
122             Setup ();\r
123            // FlushPackageTest1 ();\r
124             Assert.AreEqual (count, stream.Length, "#1");\r
125         }\r
126 \r
127         [Test]\r
128         public void GetMultipleStreams ()\r
129         {\r
130             foreach (PackagePart p in Parts) {\r
131                 p.GetStream ().Write (buffer, 0, buffer.Length);\r
132                 p.GetStream ().Flush ();\r
133                 Stream ssss = p.GetStream ();\r
134                 bool equal = p.GetStream () == p.GetStream ();\r
135                 stream.Flush ();\r
136             }\r
137             long position = stream.Length;\r
138         }\r
139 \r
140         [Test]\r
141         public void FlushThenTruncate ()\r
142         {\r
143             Parts [0].GetStream ().Write (buffer, 0, buffer.Length);\r
144             package.Flush ();\r
145             Assert.IsTrue (stream.Length > buffer.Length, "#1");\r
146             \r
147             Parts [0].GetStream ().SetLength (0);\r
148             package.Flush ();\r
149             Assert.IsTrue (stream.Length < buffer.Length, "#2");\r
150 \r
151             long length = stream.Length;\r
152             foreach (PackagePart p in package.GetParts ().ToArray ())\r
153                 package.DeletePart (p.Uri);\r
154             package.Flush ();\r
155 \r
156             Assert.IsTrue (stream.Length < length, "#3");\r
157         }\r
158 \r
159         [Test]\r
160 //        [Category ("NotWorking")]\r
161         public void CheckFlushTest ()\r
162         {\r
163             buffer = new byte [1024 * 1024];\r
164             Assert.AreEqual (0, stream.Length, "#1");\r
165             Parts [0].GetStream ().Write (buffer, 0, buffer.Length);\r
166             Assert.AreEqual (0, stream.Length, "#2");\r
167             Assert.AreEqual (Parts[0].GetStream ().Length, buffer.Length, "#2b");\r
168             Parts [1].GetStream ().Write (buffer, 0, buffer.Length);\r
169             Assert.AreEqual (0, stream.Length, "#3");\r
170             Assert.AreEqual (Parts[1].GetStream ().Length, buffer.Length, "#3b");\r
171             Parts [0].GetStream ().Flush ();\r
172             Assert.IsTrue (stream.Length > buffer.Length * 2, "#4");\r
173             long count = stream.Length;\r
174             package.Flush ();\r
175 \r
176             // FIXME: On MS.NET this works. I don't think it's worth replicating\r
177             //Assert.IsTrue (count < stream.Length, "#5");\r
178         }\r
179 \r
180         [Test]\r
181         public void CheckFlushTest2 ()\r
182         {\r
183             buffer = new byte [1024 * 1024];\r
184             Assert.AreEqual (0, stream.Length, "#1");\r
185             Parts [0].GetStream ().Write (buffer, 0, buffer.Length);\r
186             Assert.AreEqual (0, stream.Length, "#2");\r
187             Parts [1].GetStream ().Write (buffer, 0, buffer.Length);\r
188             Assert.AreEqual (0, stream.Length, "#3");\r
189             package.Flush ();\r
190             Assert.IsTrue (stream.Length > buffer.Length * 2, "#4");\r
191         }\r
192     }\r
193 }