Merge pull request #1304 from slluis/mac-proxy-autoconfig
[mono.git] / mcs / class / WindowsBase / Test / System.IO.Packaging / FakePackageTests.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.IO;\r
30 using System.IO.Packaging;\r
31 using System.Linq;\r
32 using System.Text;\r
33 using NUnit.Framework;\r
34 \r
35 namespace MonoTests.System.IO.Packaging\r
36 {\r
37 \r
38     [TestFixture]\r
39     public class FakePackageTests : TestBase\r
40     {\r
41 \r
42         //static void Main (string [] args)\r
43         //{\r
44         //    FakePackageTests t = new FakePackageTests ();\r
45         //    t.FixtureSetup ();\r
46         //    t.Setup ();\r
47         //    t.RelationshipPartGetStream ();\r
48         //}\r
49 \r
50         private new FakePackage package;\r
51         public override void Setup()\r
52         {\r
53             package = new FakePackage(FileAccess.ReadWrite, true);\r
54         }\r
55 \r
56         [Test]\r
57         public void CheckAutomaticParts()\r
58         {\r
59             package.CreatePart(uris[0], contentType);\r
60             Assert.AreEqual(1, package.CreatedParts.Count(), "#1");\r
61             Assert.AreEqual(uris[0], package.CreatedParts[0], "#2");\r
62             Assert.AreEqual(0, package.DeletedParts.Count(), "#3");\r
63             Assert.AreEqual(1, package.GetParts().Count(), "#4");\r
64         }\r
65 \r
66         [Test]\r
67         public void CheckAutomaticParts2()\r
68         {\r
69             package.CreateRelationship(uris[0], TargetMode.External, "relationship");\r
70             Assert.AreEqual(1, package.CreatedParts.Count(), "#1");\r
71             Assert.AreEqual(relationshipUri, package.CreatedParts[0], "#2");\r
72             Assert.AreEqual(0, package.DeletedParts.Count(), "#3");\r
73             Assert.AreEqual(1, package.GetParts().Count(), "#4");\r
74 \r
75             PackagePart p = package.GetPart(relationshipUri);\r
76             Assert.AreEqual(package, p.Package, "#5");\r
77             Assert.AreEqual(CompressionOption.NotCompressed, p.CompressionOption, "#6");\r
78             Assert.AreEqual("application/vnd.openxmlformats-package.relationships+xml", p.ContentType, "#7");\r
79         }\r
80 \r
81         [Test]\r
82         public void CheckProperties()\r
83         {\r
84             Assert.AreEqual(0, package.GotParts.Count, "#1");\r
85             object o = package.PackageProperties;\r
86             Assert.AreEqual(1, package.GotParts.Count, "#2");\r
87             Assert.AreEqual("/_rels/.rels", package.GotParts[0].ToString(), "#3");\r
88         }\r
89 \r
90         [Test]\r
91         public void RelationshipPartGetRelationships()\r
92         {\r
93             CheckAutomaticParts2();\r
94             PackagePart p = package.GetPart(relationshipUri);\r
95 \r
96             try\r
97             {\r
98                 p.CreateRelationship(uris[0], TargetMode.Internal, "asdas");\r
99                 Assert.Fail("This should fail 1");\r
100             }\r
101             catch (InvalidOperationException)\r
102             {\r
103 \r
104             }\r
105 \r
106             try\r
107             {\r
108                 p.DeleteRelationship("aa");\r
109                 Assert.Fail("This should fail 2");\r
110             }\r
111             catch (InvalidOperationException)\r
112             {\r
113 \r
114             }\r
115 \r
116             try\r
117             {\r
118                 p.GetRelationship("id");\r
119                 Assert.Fail("This should fail 3");\r
120             }\r
121             catch (InvalidOperationException)\r
122             {\r
123 \r
124             }\r
125 \r
126             try\r
127             {\r
128                 p.GetRelationships();\r
129                 Assert.Fail("This should fail 4");\r
130             }\r
131             catch (InvalidOperationException)\r
132             {\r
133 \r
134             }\r
135 \r
136             try\r
137             {\r
138                 p.GetRelationshipsByType("type");\r
139                 Assert.Fail("This should fail 5");\r
140             }\r
141             catch (InvalidOperationException)\r
142             {\r
143 \r
144             }\r
145 \r
146             try\r
147             {\r
148                 p.RelationshipExists("id");\r
149                 Assert.Fail("This should fail 6");\r
150             }\r
151             catch (InvalidOperationException)\r
152             {\r
153 \r
154             }\r
155         }\r
156 \r
157         [Test]\r
158         public void TestProperties()\r
159         {\r
160             Assert.IsNotNull(package.PackageProperties, "#1");\r
161             package.PackageProperties.Title = "Title";\r
162             package.Flush();\r
163 \r
164             // the relationship part and packageproperties part\r
165             Assert.AreEqual(2, package.CreatedParts.Count, "#2");\r
166         }\r
167 \r
168         [Test]\r
169         public void TestWordDoc()\r
170         {\r
171             MemoryStream stream = new MemoryStream();\r
172             Package package = CreateWordDoc(stream);\r
173             Assert.IsTrue(package.PartExists(new Uri("/word/document.xml", UriKind.Relative)), "#1");\r
174             Assert.IsTrue(package.RelationshipExists("rel1"), "#2");\r
175             package.Close();\r
176             package = Package.Open(new MemoryStream(stream.ToArray()), FileMode.Open);\r
177             Assert.AreEqual(10, package.GetParts().Count(), "#3");\r
178             Assert.AreEqual (9, package.GetRelationships ().Count (), "#4");\r
179             Assert.IsTrue(package.PartExists(new Uri("/word/document.xml", UriKind.Relative)), "#5");\r
180             Assert.IsTrue(package.RelationshipExists("rel1"), "#6");\r
181         }\r
182 \r
183         Package CreateWordDoc(Stream stream)\r
184         {\r
185             Package pack = Package.Open(stream, FileMode.Create);\r
186 \r
187             // Create package parts.\r
188             PackagePart wordDocument = pack.CreatePart(new Uri("/word/document.xml", UriKind.Relative), "application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml");\r
189             PackagePart wordNumbering = pack.CreatePart(new Uri("/word/numbering.xml", UriKind.Relative), "application/vnd.openxmlformats-officedocument.wordprocessingml.numbering+xml");\r
190             PackagePart wordStyles = pack.CreatePart(new Uri("/word/styles.xml", UriKind.Relative), "application/vnd.openxmlformats-officedocument.wordprocessingml.styles+xml");\r
191             PackagePart docPropsApp = pack.CreatePart(new Uri("/docProps/app.xml", UriKind.Relative), "application/vnd.openxmlformats-officedocument.extended-properties+xml");\r
192             PackagePart wordSettings = pack.CreatePart(new Uri("/word/settings.xml", UriKind.Relative), "application/vnd.openxmlformats-officedocument.wordprocessingml.settings+xml");\r
193             PackagePart wordTheme1 = pack.CreatePart(new Uri("/word/theme/theme1.xml", UriKind.Relative), "application/vnd.openxmlformats-officedocument.theme+xml");\r
194             PackagePart wordFontTable = pack.CreatePart(new Uri("/word/fontTable.xml", UriKind.Relative), "application/vnd.openxmlformats-officedocument.wordprocessingml.fontTable+xml");\r
195             PackagePart wordWebSettings = pack.CreatePart(new Uri("/word/webSettings.xml", UriKind.Relative), "application/vnd.openxmlformats-officedocument.wordprocessingml.webSettings+xml");\r
196             PackagePart docPropsCore = pack.CreatePart(new Uri("/docProps/core.xml", UriKind.Relative), "application/vnd.openxmlformats-package.core-properties+xml");\r
197 \r
198             // Create relationships for package.\r
199             pack.CreateRelationship(new Uri("docProps/app.xml", UriKind.Relative), TargetMode.Internal, "http://schemas.openxmlformats.org/officeDocument/2006/relationships/extended-properties");\r
200             pack.CreateRelationship(new Uri("docProps/core.xml", UriKind.Relative), TargetMode.Internal, "http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties");\r
201             pack.CreateRelationship(new Uri("word/document.xml", UriKind.Relative), TargetMode.Internal, "http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument");\r
202 \r
203             // Create document relationships.\r
204             pack.CreateRelationship(new Uri("settings.xml", UriKind.Relative), TargetMode.Internal, "http://schemas.openxmlformats.org/officeDocument/2006/relationships/settings", "rel1");\r
205             pack.CreateRelationship(new Uri("styles.xml", UriKind.Relative), TargetMode.Internal, "http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles", "rel2");\r
206             pack.CreateRelationship(new Uri("numbering.xml", UriKind.Relative), TargetMode.Internal, "http://schemas.openxmlformats.org/officeDocument/2006/relationships/numbering", "rel3");\r
207             pack.CreateRelationship(new Uri("theme/theme1.xml", UriKind.Relative), TargetMode.Internal, "http://schemas.openxmlformats.org/officeDocument/2006/relationships/theme", "rel4");\r
208             pack.CreateRelationship(new Uri("fontTable.xml", UriKind.Relative), TargetMode.Internal, "http://schemas.openxmlformats.org/officeDocument/2006/relationships/fontTable", "rel5");\r
209             pack.CreateRelationship(new Uri("webSettings.xml", UriKind.Relative), TargetMode.Internal, "http://schemas.openxmlformats.org/officeDocument/2006/relationships/webSettings", "rel6");\r
210 \r
211             // Load some basic data into the different parts.\r
212             foreach (PackagePart part in package.GetParts())\r
213                 using (Stream s = part.GetStream())\r
214                     s.Write(new byte[10], 0, 10);\r
215             \r
216             return pack;\r
217         }\r
218     }\r
219 }\r