The first story that we are going to implement in the bookmark collection is the following:

  • Bookmark Collection CRUD (Create, Retrieve, Update, Delete)
  • Our collection should inherit from IDictionary and behave accordingly

This implementation and the corresponding tests are going to look and feel like the tests one might do for a hashtable, please bear with me while we get the intial start through the code and then enhance it along the way.

The following is the list of tests that we (Peter, Brian, and myself) came up with for the first story. For each test we need to create a bookmark collection and then do the following:

  • Count == 0
  • Add a Bookmark (label, URL), Count == 1
  • Add a Bookmark, remove a Bookmark, Count == 0
  • Remove a Bookmark, expect InvalidOperationException
  • Add 2 Bookmarks, remove a Bookmark, Count == 1
  • Add a Bookmark, Retrieve using the label
  • Add 2 Bookmarks, Retrieve each by label
  • Add a Bookmark with a null label, expect ArgumentNullException
  • Add a Bookmark with a null URL, expect ArgumentNullException
  • Add a Bookmark, add another with the same label, expect ArgumentException
  • Retrieve a Bookmark that is not in the collection, return null
  • Add a Bookmark, replace the URL with an Item property, verify that the Bookmark has been upadted
  • Add a Bookmark, Contains() returns true
  • Contains() returns false
  • Add 2 Bookmarks, call Clear(), Count == 0
  • Add 3 Bookmarks, call GetEnumerator and verify that the 3 Bookmarks are enumerated
  • Add 3 Bookmarks, Call Keys, verify that all 3 labels are returned
  • Add 3 Bookmarks, Call Values, verify that all 3 URLs are returned

As I mentioned they look and feel like tests for a hashtable. There are some differences and those will play out in the implementation. I look forward to your feedback on this list of tests and the direction. The next post will discuss some of the issues involved with choosing the first test and it's implementation.