Author: fmantek
Date: Fri Sep 21 04:43:38 2007
New Revision: 264
Modified:
trunk/clients/cs/src/core/atombase.cs
trunk/clients/cs/src/core/atomfeed.cs
trunk/clients/cs/src/core/atomfeedentry.cs
trunk/clients/cs/src/core/atomfeedparser.cs
trunk/clients/cs/src/extensions/extcollections.cs
trunk/clients/cs/src/unittests/caltest.cs
trunk/clients/cs/src/unittests/objectmodelhelper.cs
Log:
changed the collection classes to make subcollections easier...
Modified: trunk/clients/cs/src/core/atombase.cs
==============================================================================
--- trunk/clients/cs/src/core/atombase.cs (original)
+++ trunk/clients/cs/src/core/atombase.cs Fri Sep 21 04:43:38 2007
@@ -502,10 +502,52 @@
/// <param name="parser">the parser is primarily used for nametable
comparisons</param>
/// <returns>AtomBase</returns>
public virtual AtomBase CreateAtomSubElement(XmlReader reader,
AtomFeedParser parser)
-
{
- throw new NotImplementedException("AtomBase CreateChild should
NEVER be called" + reader.LocalName);
- return null;
+ Object localname = reader.LocalName;
+ if (localname.Equals(parser.Nametable.Id))
+ {
+ return new AtomId();
+ }
+ else if (localname.Equals(parser.Nametable.Link))
+ {
+ return new AtomLink();
+ }
+ else if (localname.Equals(parser.Nametable.Icon))
+ {
+ return new AtomIcon();
+ }
+ else if (localname.Equals(parser.Nametable.Logo))
+ {
+ return new AtomLogo();
+ } else if (localname.Equals(parser.Nametable.Author))
+ {
+ return new AtomPerson(AtomPersonType.Author);
+ }
+ else if (localname.Equals(parser.Nametable.Contributor))
+ {
+ return new AtomPerson(AtomPersonType.Contributor);
+ } else if (localname.Equals(parser.Nametable.Title))
+ {
+ return new
AtomTextConstruct(AtomTextConstructElementType.Title);
+ } else if (localname.Equals(parser.Nametable.Subtitle))
+ {
+ return new
AtomTextConstruct(AtomTextConstructElementType.Subtitle);
+ } else if (localname.Equals(parser.Nametable.Rights))
+ {
+ return new
AtomTextConstruct(AtomTextConstructElementType.Rights);
+ } else if (localname.Equals(parser.Nametable.Summary))
+ {
+ return new
AtomTextConstruct(AtomTextConstructElementType.Summary);
+
+ } else if (localname.Equals(parser.Nametable.Generator))
+ {
+ return new AtomGenerator();
+ } else if (localname.Equals(parser.Nametable.Category))
+ {
+ return new AtomCategory();
+ }
+
+ throw new NotImplementedException("AtomBase CreateChild should
NEVER be called for: " + reader.LocalName);
}
Modified: trunk/clients/cs/src/core/atomfeed.cs
==============================================================================
--- trunk/clients/cs/src/core/atomfeed.cs (original)
+++ trunk/clients/cs/src/core/atomfeed.cs Fri Sep 21 04:43:38 2007
@@ -190,25 +190,6 @@
/////////////////////////////////////////////////////////////////////////////
- /// <summary>
- /// this is the subclassing method for AtomBase derived
- /// classes to overload what childelements should be created
- /// needed to create CustomLink type objects, like WebContentLink etc
- /// </summary>
- /// <param name="reader">The XmlReader that tells us what we are
working with</param>
- /// <param name="parser">the parser is primarily used for nametable
comparisons</param>
- /// <returns>AtomBase</returns>
- public override AtomBase CreateAtomSubElement(XmlReader reader,
AtomFeedParser parser)
- {
- Object localname = reader.LocalName;
-
- if ((localname.Equals(parser.Nametable.Link)))
- {
- return new AtomLink();
- }
- return base.CreateAtomSubElement(reader, parser);
- }
-
//////////////////////////////////////////////////////////////////////
/// <summary>tries to determine if the two feeds derive from the same
source</summary>
/// <param name="feedOne">the first feed</param>
Modified: trunk/clients/cs/src/core/atomfeedentry.cs
==============================================================================
--- trunk/clients/cs/src/core/atomfeedentry.cs (original)
+++ trunk/clients/cs/src/core/atomfeedentry.cs Fri Sep 21 04:43:38 2007
@@ -826,12 +826,12 @@
{
Object localname = reader.LocalName;
- if ((localname.Equals(parser.Nametable.Link)))
- {
- return new AtomLink();
- } else if (localname.Equals(parser.Nametable.Source))
+ if (localname.Equals(parser.Nametable.Source))
{
return new AtomSource();
+ } else if (localname.Equals(parser.Nametable.Content))
+ {
+ return new AtomContent();
}
return base.CreateAtomSubElement(reader, parser);
Modified: trunk/clients/cs/src/core/atomfeedparser.cs
==============================================================================
--- trunk/clients/cs/src/core/atomfeedparser.cs (original)
+++ trunk/clients/cs/src/core/atomfeedparser.cs Fri Sep 21 04:43:38 2007
@@ -197,7 +197,7 @@
bool fSkip = true;
if (localname.Equals(this.nameTable.Title))
{
- source.Title = ParseTextConstruct(reader,
AtomTextConstructElementType.Title);
+ source.Title = ParseTextConstruct(reader, source);
}
else if (localname.Equals(this.nameTable.Updated))
{
@@ -211,44 +211,43 @@
}
else if (localname.Equals(this.nameTable.Id))
{
- source.Id = new AtomId();
+ source.Id = source.CreateAtomSubElement(reader, this)
as AtomId;
ParseBaseLink(reader, source.Id);
}
else if (localname.Equals(this.nameTable.Icon))
{
- source.Icon = new AtomIcon();
+ source.Icon = source.CreateAtomSubElement(reader,
this) as AtomIcon;
ParseBaseLink(reader, source.Icon);
}
else if (localname.Equals(this.nameTable.Logo))
{
- source.Logo = new AtomLogo();
+ source.Logo = source.CreateAtomSubElement(reader,
this) as AtomLogo;
ParseBaseLink(reader, source.Logo);
}
-
else if (localname.Equals(this.nameTable.Author))
{
- source.Authors.Add(ParsePerson(reader,
this.nameTable.Author));
+ source.Authors.Add(ParsePerson(reader, source));
}
else if (localname.Equals(this.nameTable.Contributor))
{
- source.Contributors.Add(ParsePerson(reader,
this.nameTable.Contributor));
+ source.Contributors.Add(ParsePerson(reader, source));
}
else if (localname.Equals(this.nameTable.Subtitle))
{
- source.Subtitle = ParseTextConstruct(reader,
AtomTextConstructElementType.Subtitle);
+ source.Subtitle = ParseTextConstruct(reader, source);
}
else if (localname.Equals(this.nameTable.Rights))
{
- source.Rights = ParseTextConstruct(reader,
AtomTextConstructElementType.Rights);
+ source.Rights = ParseTextConstruct(reader, source);
}
else if (localname.Equals(this.nameTable.Generator))
{
- source.Generator = ParseGenerator(reader);
+ source.Generator = ParseGenerator(reader, source);
}
else if (localname.Equals(this.nameTable.Category))
{
// need to make this another colleciton
- source.Categories.Add(ParseCategory(reader));
+ source.Categories.Add(ParseCategory(reader, source));
}
else if (feed != null &&
localname.Equals(this.nameTable.Entry))
{
@@ -460,33 +459,25 @@
//////////////////////////////////////////////////////////////////////
/// <summary>parses an author/person object</summary>
/// <param name="reader"> an XmlReader positioned at the start of the
author</param>
- /// <param name="whoIsIt">indicates the localname to check for</param>
+ /// <param name="owner">the object containing the person</param>
/// <returns> the created author object</returns>
//////////////////////////////////////////////////////////////////////
- protected AtomPerson ParsePerson(XmlReader reader, object whoIsIt)
+ protected AtomPerson ParsePerson(XmlReader reader, AtomBase owner)
{
Tracing.Assert(reader != null, "reader should not be null");
if (reader == null)
{
throw new ArgumentNullException("reader");
}
- Tracing.Assert(whoIsIt != null, "whoIsIt should not be null");
- if (whoIsIt == null)
+ Tracing.Assert(owner != null, "owner should not be null");
+ if (owner == null)
{
- throw new ArgumentNullException("whoIsIt");
+ throw new ArgumentNullException("owner");
}
+
Tracing.TraceCall();
- AtomPerson author = null;
object localname = null;
-
- if (whoIsIt.Equals(this.nameTable.Author))
- {
- author = new AtomPerson(AtomPersonType.Author);
- }
- else
- {
- author = new AtomPerson(AtomPersonType.Contributor);
- }
+ AtomPerson author = owner.CreateAtomSubElement(reader, this) as
AtomPerson;
ParseBasicAttributes(reader, author);
@@ -529,27 +520,28 @@
//////////////////////////////////////////////////////////////////////
/// <summary>parses an xml stream to create an AtomCategory
object</summary>
/// <param name="reader">correctly positioned xmlreader</param>
+ /// <param name="owner">the object containing the person</param>
/// <returns> the created AtomCategory object</returns>
//////////////////////////////////////////////////////////////////////
- protected AtomCategory ParseCategory(XmlReader reader)
+ protected AtomCategory ParseCategory(XmlReader reader, AtomBase owner)
{
Tracing.TraceCall();
- AtomCategory category = null;
Tracing.Assert(reader != null, "reader should not be null");
if (reader == null)
{
throw new ArgumentNullException("reader");
}
- object localname = reader.LocalName;
- if (localname.Equals(this.nameTable.Category))
+ AtomCategory category = owner.CreateAtomSubElement(reader, this)
as AtomCategory;
+
+ if (category != null)
{
category = new AtomCategory();
if (reader.HasAttributes)
{
while (reader.MoveToNextAttribute())
{
- localname = reader.LocalName;
+ object localname = reader.LocalName;
if (localname.Equals(this.nameTable.Term))
{
category.Term =
Utilities.DecodedValue(reader.Value);
@@ -578,9 +570,10 @@
//////////////////////////////////////////////////////////////////////
/// <summary>creates an atomlink object</summary>
/// <param name="reader">correctly positioned xmlreader</param>
- /// <returns> the created AtomLink object</returns>
+ /// <param name="owner">the object containing the person</param>
+ /// <returns> the created AtomLink object</returns>
//////////////////////////////////////////////////////////////////////
- protected AtomLink ParseLink(XmlReader reader, AtomBase parent)
+ protected AtomLink ParseLink(XmlReader reader, AtomBase owner)
{
Tracing.Assert(reader != null, "reader should not be null");
if (reader == null)
@@ -590,7 +583,7 @@
Tracing.TraceCall();
- AtomLink link = parent.CreateAtomSubElement(reader, this) as
AtomLink;
+ AtomLink link = owner.CreateAtomSubElement(reader, this) as
AtomLink;
object localname = null;
if (reader.HasAttributes)
@@ -675,7 +668,7 @@
bool fSkip = true;
if (localname.Equals(this.nameTable.Id))
{
- entry.Id = new AtomId();
+ entry.Id = entry.CreateAtomSubElement(reader, this) as
AtomId;
ParseBaseLink(reader, entry.Id);
}
else if (localname.Equals(this.nameTable.Link))
@@ -693,28 +686,28 @@
}
else if (localname.Equals(this.nameTable.Author))
{
- entry.Authors.Add(ParsePerson(reader, localname));
+ entry.Authors.Add(ParsePerson(reader, entry));
}
else if (localname.Equals(this.nameTable.Contributor))
{
- entry.Contributors.Add(ParsePerson(reader, localname));
+ entry.Contributors.Add(ParsePerson(reader, entry));
}
else if (localname.Equals(this.nameTable.Rights))
{
- entry.Rights = ParseTextConstruct(reader,
AtomTextConstructElementType.Rights);
+ entry.Rights = ParseTextConstruct(reader, entry);
}
else if (localname.Equals(this.nameTable.Category))
{
- AtomCategory category = ParseCategory(reader);
+ AtomCategory category = ParseCategory(reader, entry);
entry.Categories.Add(category);
}
else if (localname.Equals(this.nameTable.Summary))
{
- entry.Summary = ParseTextConstruct(reader,
AtomTextConstructElementType.Summary);
+ entry.Summary = ParseTextConstruct(reader, entry);
}
else if (localname.Equals(this.nameTable.Content))
{
- entry.Content = ParseContent(reader, out fSkip);
+ entry.Content = ParseContent(reader, entry, out fSkip);
}
else if (localname.Equals(this.nameTable.Source))
{
@@ -723,7 +716,7 @@
}
else if (localname.Equals(this.nameTable.Title))
{
- entry.Title = ParseTextConstruct(reader,
AtomTextConstructElementType.Title);
+ entry.Title = ParseTextConstruct(reader, entry);
}
// this will either move the reader to the end of an
element, or,
// if at the end, to the start of a new one.
@@ -1040,10 +1033,10 @@
//////////////////////////////////////////////////////////////////////
/// <summary>parses an AtomTextConstruct</summary>
/// <param name="reader">the xmlreader correctly positioned at the
construct </param>
- /// <param name="elementType">the type of element to create</param>
+ /// <param name="owner">the container element</param>
/// <returns>the new text construct </returns>
//////////////////////////////////////////////////////////////////////
- protected AtomTextConstruct ParseTextConstruct(XmlReader reader,
AtomTextConstructElementType elementType)
+ protected AtomTextConstruct ParseTextConstruct(XmlReader reader,
AtomBase owner)
{
Tracing.Assert(reader != null, "reader should not be null");
if (reader == null)
@@ -1051,12 +1044,8 @@
throw new ArgumentNullException("reader");
}
-
- AtomTextConstruct construct = null;
-
Tracing.TraceCall("Parsing atomTextConstruct");
-
- construct = new AtomTextConstruct(elementType);
+ AtomTextConstruct construct = owner.CreateAtomSubElement(reader,
this) as AtomTextConstruct;
if (reader.NodeType == XmlNodeType.Element)
{
@@ -1069,7 +1058,7 @@
if (attributeName.Equals(this.nameTable.Type))
{
construct.Type = (AtomTextConstructType)Enum.Parse(
-
typeof(AtomTextConstructType), Utilities.DecodedValue(reader.Value), true);
+ typeof(AtomTextConstructType),
Utilities.DecodedValue(reader.Value), true);
}
else
{
@@ -1099,9 +1088,10 @@
//////////////////////////////////////////////////////////////////////
/// <summary>parses an AtomGenerator</summary>
/// <param name="reader">the xmlreader correctly positioned at the
generator </param>
+ /// <param name="owner">the container element</param>
/// <returns> </returns>
//////////////////////////////////////////////////////////////////////
- protected AtomGenerator ParseGenerator(XmlReader reader)
+ protected AtomGenerator ParseGenerator(XmlReader reader, AtomBase
owner)
{
// atomGenerator = element atom:generator {
@@ -1118,13 +1108,9 @@
}
Tracing.TraceCall();
- AtomGenerator generator = null;
- object localname = reader.LocalName;
-
- if (localname.Equals(this.nameTable.Generator))
+ AtomGenerator generator = owner.CreateAtomSubElement(reader, this)
as AtomGenerator;
+ if (generator != null)
{
- generator = new AtomGenerator();
-
generator.Text = Utilities.DecodedValue(reader.ReadString());
if (reader.HasAttributes)
{
@@ -1157,10 +1143,11 @@
//////////////////////////////////////////////////////////////////////
/// <summary>creates an AtomContent object by parsing an xml
stream</summary>
/// <param name="reader">a XMLReader positioned correctly </param>
- /// <param name="skipNode">a boolen indicating if the node needs to be
skipped, or not</param>
+ /// <param name="owner">the container element</param>
+ /// <param name="skipNode">a boolen indicating if the node needs to be
skipped, or not</param>
/// <returns> null or an AtomContent object</returns>
//////////////////////////////////////////////////////////////////////
- protected AtomContent ParseContent(XmlReader reader, out bool skipNode)
+ protected AtomContent ParseContent(XmlReader reader, AtomBase owner,
out bool skipNode)
{
Tracing.Assert(reader != null, "reader should not be null");
if (reader == null)
@@ -1171,18 +1158,15 @@
// by default, skip to the next node after this routine
skipNode = true;
- AtomContent content = null;
- object localname = reader.LocalName;
-
+ AtomContent content = owner.CreateAtomSubElement(reader, this) as
AtomContent;
Tracing.TraceCall();
- if (localname.Equals(this.nameTable.Content))
+ if (content != null)
{
- content = new AtomContent();
if (reader.HasAttributes)
{
while (reader.MoveToNextAttribute())
{
- localname = reader.LocalName;
+ object localname = reader.LocalName;
if (localname.Equals(this.nameTable.Type))
{
content.Type =
Utilities.DecodedValue(reader.Value);
Modified: trunk/clients/cs/src/extensions/extcollections.cs
==============================================================================
--- trunk/clients/cs/src/extensions/extcollections.cs (original)
+++ trunk/clients/cs/src/extensions/extcollections.cs Fri Sep 21 04:43:38 2007
@@ -31,29 +31,99 @@
namespace Google.GData.Extensions
{
- //////////////////////////////////////////////////////////////////////
- /// <summary>Typed collection for When Extensions.</summary>
- //////////////////////////////////////////////////////////////////////
- public class WhenCollection : CollectionBase
+ /// <summary>
+ /// base class to take an object pointer with extension information
+ /// and expose a localname/namespace subset as a collection
+ /// that still works on the original
+ /// </summary>
+ public class ExtensionCollection : CollectionBase
{
- /// <summary>holds the owning feed</summary>
+ /// <summary>holds the owning feed</summary>
private AtomBase atomElement;
- private WhenCollection()
+ protected ExtensionCollection()
{
}
- /// <summary>constructor</summary>
- public WhenCollection(AtomBase atomElement) : base()
+ /// <summary>
+ /// takes the base object, and the localname/ns combo to look for
+ /// will copy objects to an internal array for caching. Note that when
the external
+ /// ExtensionList is modified, this will have no effect on this copy
+ /// </summary>
+ /// <param name="atomElement">the base element holding the extension
list</param>
+ /// <param name="localName">the local name of the extension</param>
+ /// <param name="ns">the namespace</param>
+ public ExtensionCollection(AtomBase atomElement, string localName,
string ns) : base()
{
this.atomElement = atomElement;
- ArrayList arr =
atomElement.FindExtensions(GDataParserNameTable.XmlWhenElement,
BaseNameTable.gNamespace);
+ ArrayList arr = atomElement.FindExtensions(localName, ns);
foreach (object o in arr )
{
List.Add(o);
}
}
+ protected void setItem(int index, object item)
+ {
+ if (List[index] != null)
+ {
+ this.atomElement.ExtensionElements.Remove(List[index]);
+ }
+ List[index] = item;
+ if (item != null)
+ {
+ this.atomElement.ExtensionElements.Add(item);
+ }
+ }
+
+
+ public int Add(object value)
+ {
+ this.atomElement.ExtensionElements.Add(value);
+ return( List.Add( value ) );
+ }
+
+ public void Insert( int index, object value )
+ {
+ if (this.atomElement.ExtensionElements.Contains(value))
+ {
+ this.atomElement.ExtensionElements.Remove(value);
+ }
+ this.atomElement.ExtensionElements.Add(value);
+ List.Insert( index, value );
+ }
+
+ public void Remove( object value )
+ {
+ this.atomElement.ExtensionElements.Remove(value);
+ List.Remove( value );
+ }
+
+ /// <summary>standard override OnClear, to remove the objects from the
extension list</summary>
+ protected override void OnClear()
+ {
+ for (int i=0; i< this.Count;i++)
+ {
+ this.atomElement.ExtensionElements.Remove((When)List[i]);
+ }
+ }
+ }
+
+ //////////////////////////////////////////////////////////////////////
+ /// <summary>Typed collection for When Extensions.</summary>
+ //////////////////////////////////////////////////////////////////////
+ public class WhenCollection : ExtensionCollection
+ {
+ private WhenCollection() : base()
+ {
+ }
+
+ /// <summary>constructor</summary>
+ public WhenCollection(AtomBase atomElement)
+ : base(atomElement, GDataParserNameTable.XmlWhenElement,
BaseNameTable.gNamespace)
+ {
+ }
+
/// <summary>standard typed accessor method </summary>
public When this[ int index ]
{
@@ -63,18 +133,15 @@
}
set
{
- this.atomElement.ExtensionElements.Remove((When)List[index]);
- List[index] = value;
- this.atomElement.ExtensionElements.Add(value);
+ setItem(index, value);
}
}
/// <summary>standard typed add method </summary>
public int Add( When value )
{
- this.atomElement.ExtensionElements.Add(value);
- return( List.Add( value ) );
- }
+ return base.Add(value);
+ }
/// <summary>standard typed indexOf method </summary>
public int IndexOf( When value )
@@ -85,19 +152,13 @@
/// <summary>standard typed insert method </summary>
public void Insert( int index, When value )
{
- if (this.atomElement.ExtensionElements.Contains(value))
- {
- this.atomElement.ExtensionElements.Remove(value);
- }
- this.atomElement.ExtensionElements.Add(value);
- List.Insert( index, value );
+ base.Insert(index, value);
}
/// <summary>standard typed remove method </summary>
public void Remove( When value )
{
- this.atomElement.ExtensionElements.Remove(value);
- List.Remove( value );
+ base.Remove(value);
}
/// <summary>standard typed Contains method </summary>
@@ -114,35 +175,25 @@
throw new ArgumentException( "value must be of type
Google.GData.Extensions.When.", "value" );
}
- /// <summary>standard override OnClear, to remove the objects from the
extension list</summary>
- protected override void OnClear()
- {
- for (int i=0; i< this.Count;i++)
- {
- this.atomElement.ExtensionElements.Remove((When)List[i]);
- }
- }
}
//////////////////////////////////////////////////////////////////////
/// <summary>Typed collection for Where Extensions.</summary>
//////////////////////////////////////////////////////////////////////
- public class WhereCollection : CollectionBase
+ public class WhereCollection : ExtensionCollection
{
- /// <summary>holds the owning feed</summary>
- private AtomBase atomElement;
- private WhereCollection()
+ private WhereCollection() : base()
{
}
/// <summary>constructor</summary>
- public WhereCollection(AtomBase atomElement)
- : base()
+ public WhereCollection(AtomBase atomElement)
+ : base(atomElement, GDataParserNameTable.XmlWhereElement,
BaseNameTable.gNamespace)
{
- this.atomElement = atomElement;
}
+
/// <summary>standard typed accessor method </summary>
public Where this[int index]
{
@@ -152,17 +203,14 @@
}
set
{
- this.atomElement.ExtensionElements.Remove((Where)List[index]);
- List[index] = value;
- this.atomElement.ExtensionElements.Add(value);
+ setItem(index, value);
}
}
/// <summary>standard typed add method </summary>
public int Add(Where value)
{
- this.atomElement.ExtensionElements.Add(value);
- return (List.Add(value));
+ return base.Add(value);
}
/// <summary>standard typed indexOf method </summary>
@@ -174,18 +222,14 @@
/// <summary>standard typed insert method </summary>
public void Insert(int index, Where value)
{
- if (this.atomElement.ExtensionElements.Contains(value)){
- this.atomElement.ExtensionElements.Remove(value);
- }
- this.atomElement.ExtensionElements.Add(value);
- List.Insert(index, value);
+ base.Insert(index, value);
+
}
/// <summary>standard typed remove method </summary>
public void Remove(Where value)
{
- this.atomElement.ExtensionElements.Remove(value);
- List.Remove(value);
+ base.Remove(value);
}
/// <summary>standard typed Contains method </summary>
@@ -201,35 +245,24 @@
if (value as Where == null)
throw new ArgumentException("value must be of type
Google.GData.Extensions.Where.", "value");
}
-
- /// <summary>standard override OnClear, to remove the objects from the
extension list</summary>
- protected override void OnClear()
- {
- for (int i=0; i< this.Count;i++)
- {
- this.atomElement.ExtensionElements.Remove((Where)List[i]);
- }
- }
-
}
//////////////////////////////////////////////////////////////////////
/// <summary>Typed collection for Who Extensions.</summary>
//////////////////////////////////////////////////////////////////////
- public class WhoCollection : CollectionBase
+ public class WhoCollection : ExtensionCollection
{
/// <summary>holds the owning feed</summary>
private AtomBase atomElement;
- private WhoCollection()
+ private WhoCollection() : base()
{
}
- /// <summary>constructor</summary>
- public WhoCollection(AtomBase atomElement)
- : base()
+ /// <summary>constructor</summary>
+ public WhoCollection(AtomBase atomElement)
+ : base(atomElement, GDataParserNameTable.XmlWhoElement,
BaseNameTable.gNamespace)
{
- this.atomElement = atomElement;
}
/// <summary>standard typed accessor method </summary>
@@ -241,17 +274,14 @@
}
set
{
- this.atomElement.ExtensionElements.Remove((Who)List[index]);
- List[index] = value;
- this.atomElement.ExtensionElements.Add(value);
+ setItem(index,value);
}
}
/// <summary>standard typed add method </summary>
public int Add(Who value)
{
- this.atomElement.ExtensionElements.Add(value);
- return (List.Add(value));
+ return base.Add(value);
}
/// <summary>standard typed indexOf method </summary>
@@ -263,19 +293,13 @@
/// <summary>standard typed insert method </summary>
public void Insert(int index, Who value)
{
- if (this.atomElement.ExtensionElements.Contains(value))
- {
- this.atomElement.ExtensionElements.Remove(value);
- }
- this.atomElement.ExtensionElements.Add(value);
- List.Insert(index, value);
+ base.Insert(index, value);
}
/// <summary>standard typed remove method </summary>
public void Remove(Who value)
{
- this.atomElement.ExtensionElements.Remove(value);
- List.Remove(value);
+ base.Remove(value);
}
/// <summary>standard typed Contains method </summary>
@@ -291,16 +315,6 @@
if (value as Who == null)
throw new ArgumentException("value must be of type
Google.GData.Extensions.Who.", "value");
}
-
- /// <summary>standard override OnClear, to remove the objects from the
extension list</summary>
- protected override void OnClear()
- {
- for (int i=0; i< this.Count;i++)
- {
- this.atomElement.ExtensionElements.Remove((Who)List[i]);
- }
- }
-
}
/////////////////////////////////////////////////////////////////////////////
Modified: trunk/clients/cs/src/unittests/caltest.cs
==============================================================================
--- trunk/clients/cs/src/unittests/caltest.cs (original)
+++ trunk/clients/cs/src/unittests/caltest.cs Fri Sep 21 04:43:38 2007
@@ -170,11 +170,8 @@
AtomEntry sameGuy = newFeed.Entries[0];
Assert.IsTrue(sameGuy.Title.Text.Equals(newEntry.Title.Text), "both titles
should be identical");
-
}
-
calFeed = service.Query(query);
-
Assert.AreEqual(iCount, calFeed.Entries.Count, "Feed should
have one more entry, it has: " + calFeed.Entries.Count);
if (calFeed != null && calFeed.Entries.Count > 0)
@@ -329,10 +326,12 @@
entry.Title.Text = strTitle;
EventEntry newEntry = (EventEntry) calFeed.Insert(entry);
- Reminder rNew = null;
- Reminder rOld = null;
+ iCount++;
+ Tracing.TraceMsg("Created calendar entry");
+ Reminder rNew = null;
+ Reminder rOld = null;
if (newEntry.Reminders.Count > 0)
{
rNew = newEntry.Reminders[0] as Reminder;
@@ -344,15 +343,37 @@
Assert.IsTrue(rNew != null, "Reminder should not be
NULL);");
Assert.IsTrue(rOld != null, "Original Reminder should not
be NULL);");
-
-
Assert.AreEqual(rNew.Minutes, rOld.Minutes, "Reminder time
should be identical");
- iCount++;
- Tracing.TraceMsg("Created calendar entry");
+
+ Where wOldOne, wOldTwo;
+ Where wNewOne, wNewTwo;
+
+ Assert.IsTrue(entry.Locations.Count == 2, "entry should
have 2 locations");
+ Assert.IsTrue(newEntry.Locations.Count == 2, "new entry
should have 2 locations");
+
+
+ if (entry.Locations.Count > 1)
+ {
+ wOldOne = entry.Locations[0];
+ wOldTwo = entry.Locations[1];
+
+ if (newEntry.Locations.Count > 1)
+ {
+ wNewOne = newEntry.Locations[0];
+ wNewTwo = newEntry.Locations[1];
+ Assert.IsTrue(wOldOne != null, "Where oldOne
should not be NULL);");
+ Assert.IsTrue(wOldTwo != null, "Where oldTwo
should not be NULL);");
+ Assert.IsTrue(wNewOne != null, "Where newOne
should not be NULL);");
+ Assert.IsTrue(wNewTwo != null, "Where newTwoOne
should not be NULL);");
+ Assert.IsTrue(wOldOne.ValueString ==
wNewOne.ValueString, "location one should be identical");
+ Assert.IsTrue(wOldTwo.ValueString ==
wNewTwo.ValueString, "location one should be identical");
+ }
+ }
+
+
newEntry.Content.Content = "Updated..";
newEntry.Update();
-
// try to get just that guy.....
FeedQuery singleQuery = new FeedQuery();
Modified: trunk/clients/cs/src/unittests/objectmodelhelper.cs
==============================================================================
--- trunk/clients/cs/src/unittests/objectmodelhelper.cs (original)
+++ trunk/clients/cs/src/unittests/objectmodelhelper.cs Fri Sep 21 04:43:38 2007
@@ -141,7 +141,7 @@
entry.Reminder.Minutes = DEFAULT_REMINDER_TIME;
Who someone = new Who();
- someone.ValueString = "[EMAIL PROTECTED]";
+ someone.ValueString = "[EMAIL PROTECTED]";
Who.AttendeeStatus status = new Who.AttendeeStatus();
status.Value = "event.accepted";
someone.Attendee_Status = status;
@@ -153,9 +153,10 @@
Where newPlace = new Where();
newPlace.ValueString = "A really nice place";
entry.Locations.Add(newPlace);
-
-
-
+ newPlace = new Where();
+ newPlace.ValueString = "Another really nice place";
+ newPlace.Rel = Where.RelType.EVENT_ALTERNATE;
+ entry.Locations.Add(newPlace);
return entry;
}
/////////////////////////////////////////////////////////////////////////////
@@ -726,9 +727,5 @@
}
}
/////////////////////////////////////////////////////////////////////////////
-
-
-
}
-
}
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"Google Data API" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at
http://groups.google.com/group/google-help-dataapi?hl=en
-~----------~----~----~----~------~----~------~--~---