Merge pull request #799 from kebby/master
[mono.git] / mcs / class / System.ServiceModel.Web / Test / System.ServiceModel.Syndication / SyndicationItemTest.cs
1 //
2 // SyndicationItemTest.cs
3 //
4 // Author:
5 //      Atsushi Enomoto  <atsushi@ximian.com>
6 //
7 // Copyright (C) 2007 Novell, Inc (http://www.novell.com)
8 //
9 // Permission is hereby granted, free of charge, to any person obtaining
10 // a copy of this software and associated documentation files (the
11 // "Software"), to deal in the Software without restriction, including
12 // without limitation the rights to use, copy, modify, merge, publish,
13 // distribute, sublicense, and/or sell copies of the Software, and to
14 // permit persons to whom the Software is furnished to do so, subject to
15 // the following conditions:
16 // 
17 // The above copyright notice and this permission notice shall be
18 // included in all copies or substantial portions of the Software.
19 // 
20 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
21 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
22 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
23 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
24 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
25 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
26 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
27 //
28 #if !MOBILE
29 using System;
30 using System.Collections.Generic;
31 using System.Collections.ObjectModel;
32 using System.IO;
33 using System.Runtime.Serialization;
34 using System.Text;
35 using System.Xml;
36 using System.ServiceModel.Syndication;
37 using NUnit.Framework;
38
39 using QName = System.Xml.XmlQualifiedName;
40
41 namespace MonoTests.System.ServiceModel.Syndication
42 {
43         [TestFixture]
44         public class SyndicationItemTest
45         {
46                 [Test]
47                 [ExpectedException (typeof (ArgumentNullException))]
48                 public void AddPermalinkNull ()
49                 {
50                         SyndicationItem item = new SyndicationItem ();
51                         item.AddPermalink (null);
52                 }
53
54                 [Test]
55                 public void SetNullForProperties ()
56                 {
57                         SyndicationItem item = new SyndicationItem ();
58                         item.BaseUri = null;
59                         item.Copyright = null;
60                         item.Content = null;
61                         item.Id = null;
62                         item.SourceFeed = null;
63                         item.Summary = null;
64                         item.Title = null;
65                 }
66
67                 [Test]
68                 public void LastUpdatedTimeBeforePublishDate ()
69                 {
70                         SyndicationItem item = new SyndicationItem ();
71                         item.PublishDate = new DateTimeOffset (new DateTime (2007, 12, 10));
72                         item.LastUpdatedTime = new DateTimeOffset (new DateTime (2007, 12, 9));
73                 }
74
75                 [Test]
76                 public void AddPermalink ()
77                 {
78                         SyndicationItem item = new SyndicationItem ();
79                         Assert.AreEqual (0, item.Links.Count, "#1");
80                         item.AddPermalink (new Uri ("http://mono-project.com/index.rss.20071210"));
81                         Assert.AreEqual (1, item.Links.Count, "#2");
82                         SyndicationLink link = item.Links [0];
83                         Assert.AreEqual ("http://mono-project.com/index.rss.20071210", link.Uri.ToString (), "#3");
84                         Assert.AreEqual ("alternate", link.RelationshipType, "#4");
85                 }
86
87                 [Test]
88                 public void Clone ()
89                 {
90                         SyndicationItem item = new SyndicationItem ();
91                         item.AddPermalink (new Uri ("http://mono-project.com/index.rss.20071210"));
92                         item.Id = Guid.NewGuid ().ToString ();
93                         item.BaseUri = new Uri ("http://mono-project.com");
94                         item.Authors.Add (new SyndicationPerson ("atsushi@ximian.com"));
95                         item.SourceFeed = new SyndicationFeed ();
96                         item.SourceFeed.Items = new SyndicationItem [] {new SyndicationItem ()};
97
98                         SyndicationItem clone = item.Clone ();
99                         Assert.AreEqual (1, clone.Links.Count, "#1");
100                         Assert.AreEqual (item.Id, clone.Id, "#2"); // hmm ...
101                         Assert.AreEqual ("http://mono-project.com/", clone.BaseUri.ToString (), "#3");
102
103                         // LAMESPEC: .NET fails to clone it
104                         // Assert.IsFalse (Object.ReferenceEquals (item.BaseUri, clone.BaseUri), "#4"); // should not be just a shallow copy
105
106                         Assert.IsNull (clone.Title, "#5");
107                         Assert.IsNotNull (clone.SourceFeed, "#6");
108                         Assert.IsFalse (Object.ReferenceEquals (item.SourceFeed, clone.SourceFeed), "#7"); // ... not just a shallow copy??
109                         // items in the SourceFeed are not cloned, but Items property is not null
110                         Assert.IsNotNull (clone.SourceFeed.Items, "#8-1");
111                         Assert.IsFalse (clone.SourceFeed.Items.GetEnumerator ().MoveNext (), "#8-2");
112                         Assert.AreEqual (1, clone.Authors.Count, "#9");
113                         SyndicationPerson person = clone.Authors [0];
114                         Assert.IsFalse (Object.ReferenceEquals (item.Authors [0], person), "#10"); // should not be just a shallow copy
115                         Assert.AreEqual ("atsushi@ximian.com", person.Email, "#11");
116                 }
117
118                 [Test]
119                 public void GetRss20Formatter ()
120                 {
121                         SyndicationItem item = new SyndicationItem ();
122                         Rss20ItemFormatter f = item.GetRss20Formatter ();
123                         Assert.AreEqual (true, f.SerializeExtensionsAsAtom, "#1");
124                 }
125
126                 [Test]
127                 [ExpectedException (typeof (XmlException))]
128                 public void LoadNonAtomRss ()
129                 {
130                         SyndicationItem.Load (XmlReader.Create (new StringReader ("<dummy />")));
131                 }
132
133                 [Test]
134                 [ExpectedException (typeof (XmlException))]
135                 public void LoadFeed ()
136                 {
137                         // feed is not allowed.
138                         SyndicationItem.Load (XmlReader.Create (new StringReader ("<feed xmlns=\"http://www.w3.org/2005/Atom\"></feed>")));
139                 }
140
141                 [Test]
142                 public void LoadEntry ()
143                 {
144                         SyndicationItem.Load (XmlReader.Create (new StringReader ("<entry xmlns=\"http://www.w3.org/2005/Atom\"></entry>")));
145                 }
146         }
147 }
148 #endif