banshee r3931 - in trunk/banshee: . build src/Core/Banshee.Core src/Core/Banshee.Core/Banshee.Base/Tests src/Core/Banshee.Services src/Core/Banshee.Services/Banshee.Playlists.Formats/Tests src/Core/Banshee.Services/Banshee.SmartPlaylist/Tests src/Core/Banshee.Widgets src/Libraries/Hyena src/Libraries/Hyena.Gui src/Libraries/Hyena/Hyena.Collections/Tests src/Libraries/Hyena/Hyena.Data.Sqlite/Tests src/Libraries/Hyena/Hyena.Query/Tests src/Libraries/Hyena/Hyena/Tests src/Libraries/Migo src/Libraries/Migo/Migo/Migo.Syndication/Tests src/Libraries/Mono.Media src/Libraries/Mono.Media/Media.Playlists.Xspf/Tests tests tests/Banshee.Core tests/Banshee.Services tests/Banshee.Services/Xspf tests/Banshee.ThickClient tests/Hyena tests/Migo tests/Mono.Media tests/Mono.Media/Xspf



Author: abock
Date: Mon May 19 21:34:45 2008
New Revision: 3931
URL: http://svn.gnome.org/viewvc/banshee?rev=3931&view=rev

Log:
2008-05-19  Aaron Bockover  <abock gnome org>

    * build/build.rules.mk: Set ENABLE_TESTS as a define variable; this will
    allow unit tests to be compiled in only if Nunit is available and we are
    not building a release

    * Tons of files: Surgery to move unit tests into the proper assemblies
    instead of one big test assembly hack job thing; some stuff is still
    broken and incomplete



Added:
   trunk/banshee/src/Core/Banshee.Core/Banshee.Base/Tests/
   trunk/banshee/src/Core/Banshee.Core/Banshee.Base/Tests/FileNamePatternTests.cs
      - copied, changed from r3928, /trunk/banshee/tests/Banshee.Core/FileNamePatternTests.cs
   trunk/banshee/src/Core/Banshee.Core/Banshee.Base/Tests/TaglibReadWriteTests.cs
      - copied, changed from r3928, /trunk/banshee/tests/Banshee.Core/TaglibReadWriteTests.cs
   trunk/banshee/src/Core/Banshee.Services/Banshee.Playlists.Formats/Tests/
   trunk/banshee/src/Core/Banshee.Services/Banshee.Playlists.Formats/Tests/PlaylistFormatTests.cs
      - copied unchanged from r3928, /trunk/banshee/tests/Banshee.Services/PlaylistFormatTests.cs
   trunk/banshee/src/Core/Banshee.Services/Banshee.SmartPlaylist/Tests/
   trunk/banshee/src/Core/Banshee.Services/Banshee.SmartPlaylist/Tests/SmartPlaylistTests.cs
      - copied unchanged from r3928, /trunk/banshee/tests/Banshee.Services/SmartPlaylistTests.cs
   trunk/banshee/src/Libraries/Hyena/Hyena.Collections/Tests/
   trunk/banshee/src/Libraries/Hyena/Hyena.Collections/Tests/IntervalHeapTests.cs
      - copied, changed from r3928, /trunk/banshee/tests/Banshee.Core/KernelTests.cs
   trunk/banshee/src/Libraries/Hyena/Hyena.Collections/Tests/RangeCollectionTests.cs
      - copied, changed from r3930, /trunk/banshee/tests/Hyena/RangeCollectionTests.cs
   trunk/banshee/src/Libraries/Hyena/Hyena.Data.Sqlite/Tests/
   trunk/banshee/src/Libraries/Hyena/Hyena.Data.Sqlite/Tests/DbBoundType.cs
      - copied, changed from r3928, /trunk/banshee/tests/Hyena/DbBoundType.cs
   trunk/banshee/src/Libraries/Hyena/Hyena.Data.Sqlite/Tests/SqliteCommandTests.cs
      - copied, changed from r3928, /trunk/banshee/tests/Hyena/SqliteCommandTests.cs
   trunk/banshee/src/Libraries/Hyena/Hyena.Data.Sqlite/Tests/SqliteModelProviderTests.cs
      - copied, changed from r3928, /trunk/banshee/tests/Hyena/SqliteModelProviderTests.cs
   trunk/banshee/src/Libraries/Hyena/Hyena.Query/Tests/
   trunk/banshee/src/Libraries/Hyena/Hyena.Query/Tests/QueryTests.cs
      - copied, changed from r3928, /trunk/banshee/tests/Hyena/QueryTests.cs
   trunk/banshee/src/Libraries/Hyena/Hyena/Tests/
   trunk/banshee/src/Libraries/Hyena/Hyena/Tests/CryptoUtilTests.cs
      - copied, changed from r3928, /trunk/banshee/tests/Hyena/CryptoUtilTests.cs
   trunk/banshee/src/Libraries/Hyena/Hyena/Tests/StringUtilTests.cs
      - copied, changed from r3928, /trunk/banshee/tests/Hyena/StringUtilTests.cs
   trunk/banshee/src/Libraries/Hyena/Hyena/Tests/TestBase.cs
   trunk/banshee/src/Libraries/Migo/Migo/Migo.Syndication/Tests/
   trunk/banshee/src/Libraries/Migo/Migo/Migo.Syndication/Tests/XmlTests.cs
      - copied, changed from r3928, /trunk/banshee/tests/Migo/XmlTests.cs
   trunk/banshee/src/Libraries/Mono.Media/Media.Playlists.Xspf/Tests/
   trunk/banshee/src/Libraries/Mono.Media/Media.Playlists.Xspf/Tests/XspfTests.cs
      - copied, changed from r3928, /trunk/banshee/tests/Banshee.Services/Xspf/Xspf.cs
   trunk/banshee/tests/GuiTests.cs
      - copied unchanged from r3928, /trunk/banshee/tests/Banshee.ThickClient/GuiTests.cs
   trunk/banshee/tests/Mono.Media/
   trunk/banshee/tests/Mono.Media/Xspf/
   trunk/banshee/tests/Mono.Media/Xspf/complete.xml
      - copied unchanged from r3928, /trunk/banshee/tests/Banshee.Services/Xspf/complete.xml
   trunk/banshee/tests/Mono.Media/Xspf/xspf-1.xsd
      - copied unchanged from r3928, /trunk/banshee/tests/Banshee.Services/Xspf/xspf-1.xsd
Removed:
   trunk/banshee/tests/Banshee.Core/FileNamePatternTests.cs
   trunk/banshee/tests/Banshee.Core/KernelTests.cs
   trunk/banshee/tests/Banshee.Core/TaglibReadWriteTests.cs
   trunk/banshee/tests/Banshee.Services/PlaylistFormatTests.cs
   trunk/banshee/tests/Banshee.Services/SmartPlaylistTests.cs
   trunk/banshee/tests/Banshee.Services/Xspf/
   trunk/banshee/tests/Banshee.ThickClient/GuiTests.cs
   trunk/banshee/tests/Hyena/
   trunk/banshee/tests/Migo/
Modified:
   trunk/banshee/Banshee.mds
   trunk/banshee/ChangeLog
   trunk/banshee/build/build.rules.mk
   trunk/banshee/src/Core/Banshee.Core/Banshee.Core.mdp
   trunk/banshee/src/Core/Banshee.Core/Makefile.am
   trunk/banshee/src/Core/Banshee.Services/Banshee.Services.mdp
   trunk/banshee/src/Core/Banshee.Services/Makefile.am
   trunk/banshee/src/Core/Banshee.Widgets/Banshee.Widgets.mdp
   trunk/banshee/src/Libraries/Hyena.Gui/Hyena.Gui.mdp
   trunk/banshee/src/Libraries/Hyena/Hyena.mdp
   trunk/banshee/src/Libraries/Hyena/Makefile.am
   trunk/banshee/src/Libraries/Migo/Makefile.am
   trunk/banshee/src/Libraries/Migo/Migo.mdp
   trunk/banshee/src/Libraries/Mono.Media/Mono.Media.mdp

Modified: trunk/banshee/Banshee.mds
==============================================================================
--- trunk/banshee/Banshee.mds	(original)
+++ trunk/banshee/Banshee.mds	Mon May 19 21:34:45 2008
@@ -4,15 +4,18 @@
       <Entry build="True" name="Banshee" configuration="Debug" />
       <Entry build="True" configuration="Default" />
       <Entry build="True" name="libbanshee" configuration="Debug" />
+      <Entry build="True" name="tests" configuration="Default" />
     </Configuration>
   </Configurations>
   <StartMode startupentry="Banshee" single="True">
     <Execute type="None" entry="Banshee" />
     <Execute type="None" entry="tests" />
     <Execute type="None" entry="libbanshee" />
+    <Execute type="None" entry="tests" />
   </StartMode>
   <Entries>
     <Entry filename="src/Banshee.mds" />
     <Entry filename="libbanshee/libbanshee.mdp" />
+    <Entry filename="tests/tests.md-nunit" />
   </Entries>
 </Combine>
\ No newline at end of file

Modified: trunk/banshee/build/build.rules.mk
==============================================================================
--- trunk/banshee/build/build.rules.mk	(original)
+++ trunk/banshee/build/build.rules.mk	Mon May 19 21:34:45 2008
@@ -17,6 +17,11 @@
 
 INSTALL_DIR_RESOLVED = $(firstword $(subst , $(DEFAULT_INSTALL_DIR), $(INSTALL_DIR)))
 
+if ENABLE_TESTS
+    LINK += " $(MONO_NUNIT_LIBS)"
+    ENABLE_TESTS_FLAG = "-define:ENABLE_TESTS"
+endif
+
 FILTERED_LINK = $(shell echo "$(LINK)" | $(UNIQUE_FILTER_PIPE))
 DEP_LINK = $(shell echo "$(LINK)" | $(UNIQUE_FILTER_PIPE) | sed s,-r:,,g | grep '$(top_builddir)/bin/')
 
@@ -46,7 +51,7 @@
 	test "x$$colors" = "xyes" && \
 		echo -e "\033[1mCompiling $(notdir $@)...\033[0m" || \
 		echo "Compiling $(notdir $@)...";
-	@test "x$(DEVEL_BUILD)" = "xyes" && warn="-warnaserror"; $(BUILD) -target:$(TARGET) -out:$@ $$warn -define:HAVE_GTK_2_10 -define:NET_2_0 $(FILTERED_LINK) $(RESOURCES_BUILD) $(SOURCES_BUILD) 
+	@test "x$(DEVEL_BUILD)" = "xyes" && warn="-warnaserror"; $(BUILD) -target:$(TARGET) -out:$@ $$warn -define:HAVE_GTK_2_10 -define:NET_2_0 $(ENABLE_TESTS_FLAG) $(FILTERED_LINK) $(RESOURCES_BUILD) $(SOURCES_BUILD) 
 	@if [ -e $(notdir $  config) ]; then \
 		cp $(notdir $  config) $(top_builddir)/bin; \
 	fi;

Copied: trunk/banshee/src/Core/Banshee.Core/Banshee.Base/Tests/FileNamePatternTests.cs (from r3928, /trunk/banshee/tests/Banshee.Core/FileNamePatternTests.cs)
==============================================================================
--- /trunk/banshee/tests/Banshee.Core/FileNamePatternTests.cs	(original)
+++ trunk/banshee/src/Core/Banshee.Core/Banshee.Base/Tests/FileNamePatternTests.cs	Mon May 19 21:34:45 2008
@@ -26,42 +26,48 @@
 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 //
 
+#if ENABLE_TESTS
+
 using System;
 using NUnit.Framework;
 
 using Banshee.Base;
 using Banshee.Collection;
 
-[TestFixture]
-public class FileNamePatternTest
+namespace Banshee.Base.Tests
 {
-    private static string ZeroPad(int num)
-    {
-        string str = Convert.ToString(num);
-        return num < 10 ? "0" + str : str;
-    }
-
-    [Test]
-    public void CreateFromTrackInfo()
-    {
-        SampleTrackInfo track = new SampleTrackInfo();
-        string built = FileNamePattern.CreateFromTrackInfo(
-            "%artist%:%album%:%title%:%track_number%:" + 
-            "%track_count%:%track_number_nz%:%track_count_nz%",
-            track);
-
-        Assert.AreEqual(String.Format("{0}:{1}:{2}:{3}:{4}:{5}:{6}",
-            track.ArtistName, track.AlbumTitle, track.TrackTitle, 
-            ZeroPad(track.TrackNumber), ZeroPad(track.TrackCount),
-            track.TrackNumber, track.TrackCount),
-            built);
-    }
-
-    [Test]
-    public void Escape()
+    [TestFixture]
+    public class FileNamePatternTest
     {
-        Assert.AreEqual("_ _ _ _ _ _ _", 
-            FileNamePattern.Escape("/ \\ $ % ? * :"));
+        private static string ZeroPad(int num)
+        {
+            string str = Convert.ToString(num);
+            return num < 10 ? "0" + str : str;
+        }
+    
+        [Test]
+        public void CreateFromTrackInfo()
+        {
+            SampleTrackInfo track = new SampleTrackInfo();
+            string built = FileNamePattern.CreateFromTrackInfo(
+                "%artist%:%album%:%title%:%track_number%:" + 
+                "%track_count%:%track_number_nz%:%track_count_nz%",
+                track);
+    
+            Assert.AreEqual(String.Format("{0}:{1}:{2}:{3}:{4}:{5}:{6}",
+                track.ArtistName, track.AlbumTitle, track.TrackTitle, 
+                ZeroPad(track.TrackNumber), ZeroPad(track.TrackCount),
+                track.TrackNumber, track.TrackCount),
+                built);
+        }
+    
+        [Test]
+        public void Escape()
+        {
+            Assert.AreEqual("_ _ _ _ _ _ _", 
+                FileNamePattern.Escape("/ \\ $ % ? * :"));
+        }
     }
 }
 
+#endif

Copied: trunk/banshee/src/Core/Banshee.Core/Banshee.Base/Tests/TaglibReadWriteTests.cs (from r3928, /trunk/banshee/tests/Banshee.Core/TaglibReadWriteTests.cs)
==============================================================================
--- /trunk/banshee/tests/Banshee.Core/TaglibReadWriteTests.cs	(original)
+++ trunk/banshee/src/Core/Banshee.Core/Banshee.Base/Tests/TaglibReadWriteTests.cs	Mon May 19 21:34:45 2008
@@ -26,7 +26,10 @@
 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 //
 
+#if ENABLE_TESTS
+
 using System;
+using System.Reflection;
 using NUnit.Framework;
 
 using Banshee.Base;
@@ -34,98 +37,116 @@
 using Banshee.Streaming;
 using Banshee.Configuration.Schema;
 
-[TestFixture]
-public class TaglibReadWriteTests : BansheeTests
-{
-    static string [] files;
-
-    static TaglibReadWriteTests () {
-        files = new string [] {
-            Pwd + "/../tests/data/test.mp3",
-        };
-    }
-
-    [Test]
-    public void TestSystemIO ()
-    {
-        Banshee.IO.Provider.SetProvider (new Banshee.IO.SystemIO.Provider ());
-        WriteMetadata (files, "My Genre");
-    }
-
-    [Test]
-    public void TestUnixIO ()
-    {
-        Banshee.IO.Provider.SetProvider (new Banshee.IO.Unix.Provider ());
-        WriteMetadata (files, "My Genre");
-    }
+using Hyena.Tests;
 
-    [Test]
-    public void TestNullGenreBug ()
-    {
-        // Bug in taglib-sharp-2.0.3.0: Crash if you send it a genre of "{ null }" on
-        // a song with both ID3v1 and ID3v2 metadata. It's happy with "{}", though.
-        // (see http://forum.taglib-sharp.com/viewtopic.php?f=5&t=239 )
-        // This tests our workaround.
-        Banshee.IO.Provider.SetProvider (new Banshee.IO.Unix.Provider ());
-        WriteMetadata (files, null);
-    }
-
-    private static void WriteMetadata (string [] files, string genre)
+namespace Banshee.Base.Tests
+{
+    // FIXME: These tests don't really belong here
+    
+    [TestFixture]
+    public class TaglibReadWriteTests : TestBase
     {
-        SafeUri newuri = null;
-        bool write_metadata = LibrarySchema.WriteMetadata.Get();
-        LibrarySchema.WriteMetadata.Set (true);
-        try {
-            AssertForEach<string> (files, delegate (string uri) {
-                string extension = System.IO.Path.GetExtension (uri);
-                newuri = new SafeUri (Pwd + "/../tests/data/test_write." + extension);
-
-                Banshee.IO.File.Copy (new SafeUri (uri), newuri, true);
-
-                ChangeAndVerify (newuri, genre);
-            });
-        } finally {
-            LibrarySchema.WriteMetadata.Set (write_metadata);
-            if (newuri != null)
-                Banshee.IO.File.Delete (newuri);
+        private string [] files;
+        
+        [TestFixtureSetUp]
+        public void Setup ()
+        {
+            files = new string [] {
+                BinDir + "/../tests/data/test.mp3",
+            };
+        }
+    
+        [Test]
+        public void TestSystemIO ()
+        {
+            Banshee.IO.Provider.SetProvider (new Banshee.IO.SystemIO.Provider ());
+            WriteMetadata (files, "My Genre");
+        }
+    
+        [Test]
+        public void TestUnixIO ()
+        {
+            Banshee.IO.Provider.SetProvider (CreateUnixIOProvider ());
+            WriteMetadata (files, "My Genre");
+        }
+    
+        [Test]
+        public void TestNullGenreBug ()
+        {
+            // Bug in taglib-sharp-2.0.3.0: Crash if you send it a genre of "{ null }" on
+            // a song with both ID3v1 and ID3v2 metadata. It's happy with "{}", though.
+            // (see http://forum.taglib-sharp.com/viewtopic.php?f=5&t=239 )
+            // This tests our workaround.
+            Banshee.IO.Provider.SetProvider (CreateUnixIOProvider ());
+            WriteMetadata (files, null);
+        }
+    
+        private void WriteMetadata (string [] files, string genre)
+        {
+            SafeUri newuri = null;
+            bool write_metadata = LibrarySchema.WriteMetadata.Get();
+            LibrarySchema.WriteMetadata.Set (true);
+            try {
+                AssertForEach<string> (files, delegate (string uri) {
+                    string extension = System.IO.Path.GetExtension (uri);
+                    newuri = new SafeUri (BinDir + "/../tests/data/test_write." + extension);
+    
+                    Banshee.IO.File.Copy (new SafeUri (uri), newuri, true);
+    
+                    ChangeAndVerify (newuri, genre);
+                });
+            } finally {
+                LibrarySchema.WriteMetadata.Set (write_metadata);
+                if (newuri != null)
+                    Banshee.IO.File.Delete (newuri);
+            }
+        }
+    
+        private void ChangeAndVerify (SafeUri uri, string genre)
+        {
+            TagLib.File file = StreamTagger.ProcessUri (uri);
+            TrackInfo track = new TrackInfo ();
+            StreamTagger.TrackInfoMerge (track, file);
+    
+            // Make changes
+            track.TrackTitle = "My Title";
+            track.ArtistName = "My Artist";
+            track.AlbumTitle = "My Album";
+            track.Genre = genre;
+            track.TrackNumber = 4;
+            track.Disc = 4;
+            track.Year = 1999;
+    
+            // Save changes
+            new SaveTrackMetadataJob (track).Run ();
+    
+            // Read changes
+            file = StreamTagger.ProcessUri (uri);
+            track = new TrackInfo ();
+            StreamTagger.TrackInfoMerge (track, file);
+    
+            // Verify changes
+            Assert.AreEqual ("My Title", track.TrackTitle);
+            Assert.AreEqual ("My Artist", track.ArtistName);
+            Assert.AreEqual ("My Album", track.AlbumTitle);
+            Assert.AreEqual (genre, track.Genre);
+            Assert.AreEqual (4, track.TrackNumber);
+            Assert.AreEqual (4, track.Disc);
+            Assert.AreEqual (1999, track.Year);
+        }
+        
+        private Type unix_io_type;
+    
+        private Banshee.IO.IProvider CreateUnixIOProvider ()
+        {
+            if (unix_io_type == null) {
+                Assembly asm = Assembly.LoadFrom (BinDir + "/Banshee.Unix.dll");
+                unix_io_type = asm.GetType ("Banshee.IO.Unix.Provider");
+            }
+            
+            return (Banshee.IO.IProvider)Activator.CreateInstance (unix_io_type);
         }
     }
-
-#region Utility methods
-
-    private static void ChangeAndVerify (SafeUri uri, string genre)
-    {
-        TagLib.File file = StreamTagger.ProcessUri (uri);
-        TrackInfo track = new TrackInfo ();
-        StreamTagger.TrackInfoMerge (track, file);
-
-        // Make changes
-        track.TrackTitle = "My Title";
-        track.ArtistName = "My Artist";
-        track.AlbumTitle = "My Album";
-        track.Genre = genre;
-        track.TrackNumber = 4;
-        track.Disc = 4;
-        track.Year = 1999;
-
-        // Save changes
-        new SaveTrackMetadataJob (track).Run ();
-
-        // Read changes
-        file = StreamTagger.ProcessUri (uri);
-        track = new TrackInfo ();
-        StreamTagger.TrackInfoMerge (track, file);
-
-        // Verify changes
-        Assert.AreEqual ("My Title", track.TrackTitle);
-        Assert.AreEqual ("My Artist", track.ArtistName);
-        Assert.AreEqual ("My Album", track.AlbumTitle);
-        Assert.AreEqual (genre, track.Genre);
-        Assert.AreEqual (4, track.TrackNumber);
-        Assert.AreEqual (4, track.Disc);
-        Assert.AreEqual (1999, track.Year);
-    }
-
-#endregion
-
 }
+
+#endif
\ No newline at end of file

Modified: trunk/banshee/src/Core/Banshee.Core/Banshee.Core.mdp
==============================================================================
--- trunk/banshee/src/Core/Banshee.Core/Banshee.Core.mdp	(original)
+++ trunk/banshee/src/Core/Banshee.Core/Banshee.Core.mdp	Mon May 19 21:34:45 2008
@@ -67,6 +67,9 @@
     <File name="Banshee.Core.addin.xml" subtype="Code" buildaction="EmbedAsResource" />
     <File name="Banshee.Collection/TrackMediaAttributes.cs" subtype="Code" buildaction="Compile" />
     <File name="Banshee.Base/XdgBaseDirectorySpec.cs" subtype="Code" buildaction="Compile" />
+    <File name="Banshee.Base/Tests" subtype="Directory" buildaction="Compile" />
+    <File name="Banshee.Base/Tests/FileNamePatternTests.cs" subtype="Code" buildaction="Compile" />
+    <File name="Banshee.Base/Tests/TaglibReadWriteTests.cs" subtype="Code" buildaction="Compile" />
   </Contents>
   <References>
     <ProjectReference type="Project" localcopy="False" refto="Hyena" />

Modified: trunk/banshee/src/Core/Banshee.Core/Makefile.am
==============================================================================
--- trunk/banshee/src/Core/Banshee.Core/Makefile.am	(original)
+++ trunk/banshee/src/Core/Banshee.Core/Makefile.am	Mon May 19 21:34:45 2008
@@ -12,6 +12,8 @@
 	Banshee.Base/ProductInformation.cs \
 	Banshee.Base/Resource.cs \
 	Banshee.Base/SafeUri.cs \
+	Banshee.Base/Tests/FileNamePatternTests.cs \
+	Banshee.Base/Tests/TaglibReadWriteTests.cs \
 	Banshee.Base/UriList.cs \
 	Banshee.Base/XdgBaseDirectorySpec.cs \
 	Banshee.Collection/AlbumInfo.cs \

Modified: trunk/banshee/src/Core/Banshee.Services/Banshee.Services.mdp
==============================================================================
--- trunk/banshee/src/Core/Banshee.Services/Banshee.Services.mdp	(original)
+++ trunk/banshee/src/Core/Banshee.Services/Banshee.Services.mdp	Mon May 19 21:34:45 2008
@@ -169,6 +169,9 @@
     <File name="Banshee.SmartPlaylist/SmartPlaylistDefinition.cs" subtype="Code" buildaction="Compile" />
     <File name="Banshee.Collection.Database/DatabaseBrowsableListModel.cs" subtype="Code" buildaction="Compile" />
     <File name="Banshee.Collection/BrowsableListModel.cs" subtype="Code" buildaction="Compile" />
+    <File name="Banshee.Playlists.Formats/Tests" subtype="Directory" buildaction="Compile" />
+    <File name="Banshee.Playlists.Formats/Tests/PlaylistFormatTests.cs" subtype="Code" buildaction="Compile" />
+    <File name="Banshee.SmartPlaylist/Tests" subtype="Directory" buildaction="Compile" />
   </Contents>
   <References>
     <ProjectReference type="Gac" localcopy="True" refto="System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />

Modified: trunk/banshee/src/Core/Banshee.Services/Makefile.am
==============================================================================
--- trunk/banshee/src/Core/Banshee.Services/Makefile.am	(original)
+++ trunk/banshee/src/Core/Banshee.Services/Makefile.am	Mon May 19 21:34:45 2008
@@ -106,6 +106,7 @@
 	Banshee.Playlists.Formats/PlaylistFormatDescription.cs \
 	Banshee.Playlists.Formats/PlaylistParser.cs \
 	Banshee.Playlists.Formats/PlsPlaylistFormat.cs \
+	Banshee.Playlists.Formats/Tests/PlaylistFormatTests.cs \
 	Banshee.Preferences/Collection.cs \
 	Banshee.Preferences/Page.cs \
 	Banshee.Preferences/Preference.cs \

Modified: trunk/banshee/src/Core/Banshee.Widgets/Banshee.Widgets.mdp
==============================================================================
--- trunk/banshee/src/Core/Banshee.Widgets/Banshee.Widgets.mdp	(original)
+++ trunk/banshee/src/Core/Banshee.Widgets/Banshee.Widgets.mdp	Mon May 19 21:34:45 2008
@@ -27,7 +27,6 @@
     <File name="Banshee.Widgets/CustomActionProxy.cs" subtype="Code" buildaction="Compile" />
     <File name="Banshee.Widgets/RatingActionProxy.cs" subtype="Code" buildaction="Compile" />
     <File name="Banshee.Widgets/MenuTile.cs" subtype="Code" buildaction="Compile" />
-    <File name="Resources" subtype="Directory" buildaction="Compile" />
   </Contents>
   <References>
     <ProjectReference type="Gac" localcopy="True" refto="gtk-sharp, Version=2.8.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f" />

Modified: trunk/banshee/src/Libraries/Hyena.Gui/Hyena.Gui.mdp
==============================================================================
--- trunk/banshee/src/Libraries/Hyena.Gui/Hyena.Gui.mdp	(original)
+++ trunk/banshee/src/Libraries/Hyena.Gui/Hyena.Gui.mdp	Mon May 19 21:34:45 2008
@@ -82,7 +82,6 @@
     <File name="Hyena.Widgets/RatingMenuItem.cs" subtype="Code" buildaction="Compile" />
     <File name="Hyena.Widgets/ComplexMenuItem.cs" subtype="Code" buildaction="Compile" />
     <File name="Hyena.Gui/RatingRenderer.cs" subtype="Code" buildaction="Compile" />
-    <File name="Resources" subtype="Directory" buildaction="Compile" />
   </Contents>
   <References>
     <ProjectReference type="Gac" localcopy="True" refto="System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />

Copied: trunk/banshee/src/Libraries/Hyena/Hyena.Collections/Tests/IntervalHeapTests.cs (from r3928, /trunk/banshee/tests/Banshee.Core/KernelTests.cs)
==============================================================================
--- /trunk/banshee/tests/Banshee.Core/KernelTests.cs	(original)
+++ trunk/banshee/src/Libraries/Hyena/Hyena.Collections/Tests/IntervalHeapTests.cs	Mon May 19 21:34:45 2008
@@ -1,5 +1,5 @@
 //
-// KernelTests.cs
+// IntervalHeapTests.cs
 //
 // Author:
 //   Aaron Bockover <abockover novell com>
@@ -26,98 +26,101 @@
 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 //
 
+#if ENABLE_TESTS
+
 using System;
 using NUnit.Framework;
 
-using Banshee.Kernel;
+using Hyena.Collections;
 
-namespace Banshee.Kernel.Tests
+namespace Hyena.Collections.Tests
 {
-	[TestFixture]
-	public class IntervalHeapTest
-	{
-		private IntervalHeap<int> heap;
-		private static int [] heap_data = new int[2048];
-		
-		[TestFixtureSetUp]
-		public void Init()
-		{
-			heap = new IntervalHeap<int>();
-			for(int i = 0; i < heap_data.Length; i++) {
-				heap_data[i] = i;
-			}
-		}
-
-		private void PopulateHeap()
-		{
-			heap.Clear();
-			
-			foreach(int i in heap_data) {
-				heap.Push(i, 0);
-			}
-			
-			Assert.AreEqual(heap.Count, heap_data.Length);
-		}
-
-		[Test]
-		public void PopHeap()
-		{
-			PopulateHeap();
-			
-			int i = 0;
-			while(heap.Count > 0) {
-				heap.Pop();
-				i++;
-			}
-
-			Assert.AreEqual(i, heap_data.Length);
-		}
-
-		[Test]
-		public void IterateHeap()
-		{
-			PopulateHeap();
-
-			int i = 0;
-			foreach(int x in heap) {
-				Assert.AreEqual(x, heap_data[i++]);
-			}
-
-			Assert.AreEqual(i, heap.Count);
-		}
-
-		[Test]
-		public void RemoveItemsFromHeap()
-		{
-			IntervalHeap<int> h = new IntervalHeap<int>();
-			for(int i = 0; i < 20; i++) {
-				h.Push(i, i);
-			}
-
-			h.Remove(10);
-			h.Remove(2);
-			h.Remove(11);
-			h.Remove(9);
-			h.Remove(19);
-			h.Remove(0);
-
-			Assert.AreEqual(h.Pop(), 18);
-			Assert.AreEqual(h.Pop(), 17);
-			Assert.AreEqual(h.Pop(), 16);
-			Assert.AreEqual(h.Pop(), 15);
-			Assert.AreEqual(h.Pop(), 14);
-			Assert.AreEqual(h.Pop(), 13);
-			Assert.AreEqual(h.Pop(), 12);
-			Assert.AreEqual(h.Pop(), 8);
-			Assert.AreEqual(h.Pop(), 7);
-			Assert.AreEqual(h.Pop(), 6);
-			Assert.AreEqual(h.Pop(), 5);
-			Assert.AreEqual(h.Pop(), 4);
-			Assert.AreEqual(h.Pop(), 3);
-			Assert.AreEqual(h.Pop(), 1);
-
-			Assert.AreEqual(h.Count, 0);		
-		}
-	}
+    [TestFixture]
+    public class IntervalHeapTests
+    {
+        private IntervalHeap<int> heap;
+        private static int [] heap_data = new int[2048];
+        
+        [TestFixtureSetUp]
+        public void Init()
+        {
+            heap = new IntervalHeap<int>();
+            for(int i = 0; i < heap_data.Length; i++) {
+                heap_data[i] = i;
+            }
+        }
+
+        private void PopulateHeap()
+        {
+            heap.Clear();
+            
+            foreach(int i in heap_data) {
+                heap.Push(i, 0);
+            }
+            
+            Assert.AreEqual(heap.Count, heap_data.Length);
+        }
+
+        [Test]
+        public void PopHeap()
+        {
+            PopulateHeap();
+            
+            int i = 0;
+            while(heap.Count > 0) {
+                heap.Pop();
+                i++;
+            }
+
+            Assert.AreEqual(i, heap_data.Length);
+        }
+
+        [Test]
+        public void IterateHeap()
+        {
+            PopulateHeap();
+
+            int i = 0;
+            foreach(int x in heap) {
+                Assert.AreEqual(x, heap_data[i++]);
+            }
+
+            Assert.AreEqual(i, heap.Count);
+        }
+
+        [Test]
+        public void RemoveItemsFromHeap()
+        {
+            IntervalHeap<int> h = new IntervalHeap<int>();
+            for(int i = 0; i < 20; i++) {
+                h.Push(i, i);
+            }
+
+            h.Remove(10);
+            h.Remove(2);
+            h.Remove(11);
+            h.Remove(9);
+            h.Remove(19);
+            h.Remove(0);
+
+            Assert.AreEqual(h.Pop(), 18);
+            Assert.AreEqual(h.Pop(), 17);
+            Assert.AreEqual(h.Pop(), 16);
+            Assert.AreEqual(h.Pop(), 15);
+            Assert.AreEqual(h.Pop(), 14);
+            Assert.AreEqual(h.Pop(), 13);
+            Assert.AreEqual(h.Pop(), 12);
+            Assert.AreEqual(h.Pop(), 8);
+            Assert.AreEqual(h.Pop(), 7);
+            Assert.AreEqual(h.Pop(), 6);
+            Assert.AreEqual(h.Pop(), 5);
+            Assert.AreEqual(h.Pop(), 4);
+            Assert.AreEqual(h.Pop(), 3);
+            Assert.AreEqual(h.Pop(), 1);
+
+            Assert.AreEqual(h.Count, 0);        
+        }
+    }
 }
 
+#endif

Copied: trunk/banshee/src/Libraries/Hyena/Hyena.Collections/Tests/RangeCollectionTests.cs (from r3930, /trunk/banshee/tests/Hyena/RangeCollectionTests.cs)
==============================================================================
--- /trunk/banshee/tests/Hyena/RangeCollectionTests.cs	(original)
+++ trunk/banshee/src/Libraries/Hyena/Hyena.Collections/Tests/RangeCollectionTests.cs	Mon May 19 21:34:45 2008
@@ -26,414 +26,421 @@
 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 //
 
+#if ENABLE_TESTS
+
 using System;
 using System.Collections.Generic;
 using NUnit.Framework;
 using Hyena.Collections;
 
-[TestFixture]
-public class RangeCollectionTests
+namespace Hyena.Collections.Tests
 {
-    [Test]
-    public void TestSingleRanges ()
-    {
-        _TestRanges (new RangeCollection (), new int [] { 1, 11, 5, 7, 15, 32, 3, 9, 34 });
-    }
-    
-    [Test]
-    public void TestMergedRanges ()
+    [TestFixture]
+    public class RangeCollectionTests
     {
-        RangeCollection range = new RangeCollection ();
-        int [] indexes = new int [] { 0, 7, 5, 9, 1, 6, 8, 2, 10, 12 };
-        
-        _TestRanges (range, indexes);
-        Assert.AreEqual (3, range.RangeCount);
-        
-        int i= 0;
-        foreach (RangeCollection.Range r in range.Ranges) {
-            switch (i++) {
-                case 0:
-                    Assert.AreEqual (0, r.Start);
-                    Assert.AreEqual (2, r.End);
-                    break;
-                case 1:
-                    Assert.AreEqual (5, r.Start);
-                    Assert.AreEqual (10, r.End);
-                    break;
-                case 2:
-                    Assert.AreEqual (12, r.Start);
-                    Assert.AreEqual (12, r.End);
-                    break;
-                default:
-                    Assert.Fail ("This should not be reached!");
-                    break;
+        [Test]
+        public void SingleRanges ()
+        {
+            _TestRanges (new RangeCollection (), new int [] { 1, 11, 5, 7, 15, 32, 3, 9, 34 });
+        }
+        
+        [Test]
+        public void MergedRanges ()
+        {
+            RangeCollection range = new RangeCollection ();
+            int [] indexes = new int [] { 0, 7, 5, 9, 1, 6, 8, 2, 10, 12 };
+            
+            _TestRanges (range, indexes);
+            Assert.AreEqual (3, range.RangeCount);
+            
+            int i= 0;
+            foreach (RangeCollection.Range r in range.Ranges) {
+                switch (i++) {
+                    case 0:
+                        Assert.AreEqual (0, r.Start);
+                        Assert.AreEqual (2, r.End);
+                        break;
+                    case 1:
+                        Assert.AreEqual (5, r.Start);
+                        Assert.AreEqual (10, r.End);
+                        break;
+                    case 2:
+                        Assert.AreEqual (12, r.Start);
+                        Assert.AreEqual (12, r.End);
+                        break;
+                    default:
+                        Assert.Fail ("This should not be reached!");
+                        break;
+                }
             }
         }
-    }
-    
-    [Test]
-    public void TestLargeSequential ()
-    { 
-        RangeCollection range = new RangeCollection ();
-        int i, n = 1000000;
-        
-        for (i = 0; i < n; i++) {
-            range.Add (i);
-            Assert.AreEqual (1, range.RangeCount);
-        }
-        
-        Assert.AreEqual (n, range.Count);
-        
-        i = 0;
-        foreach (int j in range) {
-            Assert.AreEqual (i++, j);
-        }
-        
-        Assert.AreEqual (n, i);
-    }
-
-    [Test]
-    public void TestLargeNonAdjacent ()
-    { 
-        RangeCollection range = new RangeCollection ();
-        int i, n = 1000000;
-        
-        for (i = 0; i < n; i += 2) {
-            range.Add (i);
-        }
-        
-        Assert.AreEqual (n / 2, range.Count);
-        
-        i = 0;
-        foreach (int j in range) {
-            Assert.AreEqual (i, j);
-            i += 2;
-        }
-        
-        Assert.AreEqual (n, i);
-    }
-
-    private static void _TestRanges (RangeCollection range, int [] indexes)
-    {
-        foreach (int index in indexes) {
-            range.Add (index);
-        }
         
-        Assert.AreEqual (indexes.Length, range.Count);
-        
-        Array.Sort (indexes);
-        
-        int i = 0;
-        foreach (int index in range) {
-            Assert.AreEqual (indexes[i++], index);
-        }
-        
-#pragma warning disable 0618
-
-        i = 0;
-        foreach (int index in range.Indexes) {
-            Assert.AreEqual (indexes[i++], index);
-        }
-        
-        for (i = 0; i < range.Indexes.Length; i++) {
-            Assert.AreEqual (indexes[i], range.Indexes[i]);
+        [Test]
+        public void LargeSequential ()
+        { 
+            RangeCollection range = new RangeCollection ();
+            int i, n = 1000000;
+            
+            for (i = 0; i < n; i++) {
+                range.Add (i);
+                Assert.AreEqual (1, range.RangeCount);
+            }
+            
+            Assert.AreEqual (n, range.Count);
+            
+            i = 0;
+            foreach (int j in range) {
+                Assert.AreEqual (i++, j);
+            }
+            
+            Assert.AreEqual (n, i);
         }
-
-#pragma warning restore 0618
-
-    }
     
-    [Test]
-    public void TestRemoveSingles ()
-    {
-        RangeCollection range = new RangeCollection ();
-        int [] indexes = new int [] { 0, 2, 4, 6, 8, 10, 12, 14 };
-        foreach (int index in indexes) {
-            range.Add (index);
-        }
-        
-        foreach (int index in indexes) {
-            Assert.AreEqual (true, range.Remove (index));
+        [Test]
+        public void LargeNonAdjacent ()
+        { 
+            RangeCollection range = new RangeCollection ();
+            int i, n = 1000000;
+            
+            for (i = 0; i < n; i += 2) {
+                range.Add (i);
+            }
+            
+            Assert.AreEqual (n / 2, range.Count);
+            
+            i = 0;
+            foreach (int j in range) {
+                Assert.AreEqual (i, j);
+                i += 2;
+            }
+            
+            Assert.AreEqual (n, i);
         }
-    }
-    
-    [Test]
-    public void TestRemoveStarts ()
-    {
-        RangeCollection range = _SetupTestRemoveMerges ();
-        
-        Assert.AreEqual (true, range.Contains (0));
-        range.Remove (0);
-        Assert.AreEqual (false, range.Contains (0));
-        Assert.AreEqual (4, range.RangeCount);
-        
-        Assert.AreEqual (true, range.Contains (2));
-        range.Remove (2);
-        Assert.AreEqual (false, range.Contains (2));
-        Assert.AreEqual (4, range.RangeCount);
-        Assert.AreEqual (3, range.Ranges[0].Start);
-        Assert.AreEqual (5, range.Ranges[0].End);
-        
-        Assert.AreEqual (true, range.Contains (14));
-        range.Remove (14);
-        Assert.AreEqual (false, range.Contains (14));
-        Assert.AreEqual (4, range.RangeCount);
-        Assert.AreEqual (15, range.Ranges[2].Start);
-        Assert.AreEqual (15, range.Ranges[2].End);
-    }
-     
-    [Test]
-    public void TestRemoveEnds ()
-    {
-        RangeCollection range = _SetupTestRemoveMerges ();
-        
-        Assert.AreEqual (true, range.Contains (5));
-        range.Remove (5);
-        Assert.AreEqual (false, range.Contains (5));
-        Assert.AreEqual (5, range.RangeCount);
-        Assert.AreEqual (2, range.Ranges[1].Start);
-        Assert.AreEqual (4, range.Ranges[1].End);
-        
-        Assert.AreEqual (true, range.Contains (15));
-        range.Remove (15);
-        Assert.AreEqual (false, range.Contains (15));
-        Assert.AreEqual (5, range.RangeCount);
-        Assert.AreEqual (14, range.Ranges[3].Start);
-        Assert.AreEqual (14, range.Ranges[3].End);
-    }
     
-    [Test]
-    public void TestRemoveMids ()
-    {
-        RangeCollection range = _SetupTestRemoveMerges ();
-        
-        Assert.AreEqual (5, range.RangeCount);
-        Assert.AreEqual (14, range.Ranges[3].Start);
-        Assert.AreEqual (15, range.Ranges[3].End);
-        Assert.AreEqual (true, range.Contains (9));
-        range.Remove (9);
-        Assert.AreEqual (false, range.Contains (9));
-        Assert.AreEqual (6, range.RangeCount);
-        Assert.AreEqual (7, range.Ranges[2].Start);
-        Assert.AreEqual (8, range.Ranges[2].End);
-        Assert.AreEqual (10, range.Ranges[3].Start);
-        Assert.AreEqual (11, range.Ranges[3].End);
-        Assert.AreEqual (14, range.Ranges[4].Start);
-        Assert.AreEqual (15, range.Ranges[4].End);
-    }
+        private static void _TestRanges (RangeCollection range, int [] indexes)
+        {
+            foreach (int index in indexes) {
+                range.Add (index);
+            }
+            
+            Assert.AreEqual (indexes.Length, range.Count);
+            
+            Array.Sort (indexes);
+            
+            int i = 0;
+            foreach (int index in range) {
+                Assert.AreEqual (indexes[i++], index);
+            }
+            
+            #pragma warning disable 0618
     
-    private static RangeCollection _SetupTestRemoveMerges ()
-    {
-        RangeCollection range = new RangeCollection ();
-        int [] indexes = new int [] { 
-            0, 
-            2, 3, 4, 5,
-            7, 8, 9, 10, 11,
-            14, 15,
-            17, 18, 19
-        };
-        
-        foreach (int index in indexes) {
-            range.Add (index);
-        }
-        
-        int i = 0;
-        foreach (RangeCollection.Range r in range.Ranges) {
-            switch (i++) {
-                case 0:
-                    Assert.AreEqual (0, r.Start);
-                    Assert.AreEqual (0, r.End);
-                    break;
-                case 1:
-                    Assert.AreEqual (2, r.Start);
-                    Assert.AreEqual (5, r.End);
-                    break;
-                case 2:
-                    Assert.AreEqual (7, r.Start);
-                    Assert.AreEqual (11, r.End);
-                    break;
-                case 3:
-                    Assert.AreEqual (14, r.Start);
-                    Assert.AreEqual (15, r.End);
-                    break;
-                case 4:
-                    Assert.AreEqual (17, r.Start);
-                    Assert.AreEqual (19, r.End);
-                    break;
-                default:
-                    Assert.Fail ("Should never reach here");
-                    break;
+            i = 0;
+            foreach (int index in range.Indexes) {
+                Assert.AreEqual (indexes[i++], index);
+            }
+            
+            for (i = 0; i < range.Indexes.Length; i++) {
+                Assert.AreEqual (indexes[i], range.Indexes[i]);
             }
-        }
-        
-        return range;
-    }
     
-#pragma warning disable 0618
+            #pragma warning restore 0618
     
-    [Test]
-    public void TestIndexesCacheGeneration ()
-    {
-        RangeCollection range = new RangeCollection ();
-        int [] index_cache = range.Indexes;
-        
-        Assert.AreSame (index_cache, range.Indexes);
-        
-        range.Add (0);
-        range.Add (5);
+        }
         
-        if (index_cache == range.Indexes) {
-            Assert.Fail ("Indexes Cache not regenerated after change");
+        [Test]
+        public void RemoveSingles ()
+        {
+            RangeCollection range = new RangeCollection ();
+            int [] indexes = new int [] { 0, 2, 4, 6, 8, 10, 12, 14 };
+            foreach (int index in indexes) {
+                range.Add (index);
+            }
+            
+            foreach (int index in indexes) {
+                Assert.AreEqual (true, range.Remove (index));
+            }
         }
         
-        index_cache = range.Indexes;
-        range.Remove (0);
-        range.Add (3);
-
-        if (index_cache == range.Indexes) {
-            Assert.Fail ("Indexes Cache not regenerated after change");
+        [Test]
+        public void RemoveStarts ()
+        {
+            RangeCollection range = _SetupTestRemoveMerges ();
+            
+            Assert.AreEqual (true, range.Contains (0));
+            range.Remove (0);
+            Assert.AreEqual (false, range.Contains (0));
+            Assert.AreEqual (4, range.RangeCount);
+            
+            Assert.AreEqual (true, range.Contains (2));
+            range.Remove (2);
+            Assert.AreEqual (false, range.Contains (2));
+            Assert.AreEqual (4, range.RangeCount);
+            Assert.AreEqual (3, range.Ranges[0].Start);
+            Assert.AreEqual (5, range.Ranges[0].End);
+            
+            Assert.AreEqual (true, range.Contains (14));
+            range.Remove (14);
+            Assert.AreEqual (false, range.Contains (14));
+            Assert.AreEqual (4, range.RangeCount);
+            Assert.AreEqual (15, range.Ranges[2].Start);
+            Assert.AreEqual (15, range.Ranges[2].End);
+        }
+         
+        [Test]
+        public void RemoveEnds ()
+        {
+            RangeCollection range = _SetupTestRemoveMerges ();
+            
+            Assert.AreEqual (true, range.Contains (5));
+            range.Remove (5);
+            Assert.AreEqual (false, range.Contains (5));
+            Assert.AreEqual (5, range.RangeCount);
+            Assert.AreEqual (2, range.Ranges[1].Start);
+            Assert.AreEqual (4, range.Ranges[1].End);
+            
+            Assert.AreEqual (true, range.Contains (15));
+            range.Remove (15);
+            Assert.AreEqual (false, range.Contains (15));
+            Assert.AreEqual (5, range.RangeCount);
+            Assert.AreEqual (14, range.Ranges[3].Start);
+            Assert.AreEqual (14, range.Ranges[3].End);
+        }
+        
+        [Test]
+        public void RemoveMids ()
+        {
+            RangeCollection range = _SetupTestRemoveMerges ();
+            
+            Assert.AreEqual (5, range.RangeCount);
+            Assert.AreEqual (14, range.Ranges[3].Start);
+            Assert.AreEqual (15, range.Ranges[3].End);
+            Assert.AreEqual (true, range.Contains (9));
+            range.Remove (9);
+            Assert.AreEqual (false, range.Contains (9));
+            Assert.AreEqual (6, range.RangeCount);
+            Assert.AreEqual (7, range.Ranges[2].Start);
+            Assert.AreEqual (8, range.Ranges[2].End);
+            Assert.AreEqual (10, range.Ranges[3].Start);
+            Assert.AreEqual (11, range.Ranges[3].End);
+            Assert.AreEqual (14, range.Ranges[4].Start);
+            Assert.AreEqual (15, range.Ranges[4].End);
+        }
+        
+        private static RangeCollection _SetupTestRemoveMerges ()
+        {
+            RangeCollection range = new RangeCollection ();
+            int [] indexes = new int [] { 
+                0, 
+                2, 3, 4, 5,
+                7, 8, 9, 10, 11,
+                14, 15,
+                17, 18, 19
+            };
+            
+            foreach (int index in indexes) {
+                range.Add (index);
+            }
+            
+            int i = 0;
+            foreach (RangeCollection.Range r in range.Ranges) {
+                switch (i++) {
+                    case 0:
+                        Assert.AreEqual (0, r.Start);
+                        Assert.AreEqual (0, r.End);
+                        break;
+                    case 1:
+                        Assert.AreEqual (2, r.Start);
+                        Assert.AreEqual (5, r.End);
+                        break;
+                    case 2:
+                        Assert.AreEqual (7, r.Start);
+                        Assert.AreEqual (11, r.End);
+                        break;
+                    case 3:
+                        Assert.AreEqual (14, r.Start);
+                        Assert.AreEqual (15, r.End);
+                        break;
+                    case 4:
+                        Assert.AreEqual (17, r.Start);
+                        Assert.AreEqual (19, r.End);
+                        break;
+                    default:
+                        Assert.Fail ("Should never reach here");
+                        break;
+                }
+            }
+            
+            return range;
         }
-    }
-    
-#pragma warning restore 0618
-
-    [Test]
-    public void TestIndexOf ()
-    {
-        RangeCollection range = new RangeCollection ();
         
-        range.Add (0);
-        range.Add (2);
-        range.Add (3);
-        range.Add (5);
-        range.Add (6);
-        range.Add (7);
-        range.Add (8);
-        range.Add (11);
-        range.Add (12);
-        range.Add (13);
-        
-        Assert.AreEqual (0, range.IndexOf (0));
-        Assert.AreEqual (1, range.IndexOf (2));
-        Assert.AreEqual (2, range.IndexOf (3));
-        Assert.AreEqual (3, range.IndexOf (5));
-        Assert.AreEqual (4, range.IndexOf (6));
-        Assert.AreEqual (5, range.IndexOf (7));
-        Assert.AreEqual (6, range.IndexOf (8));
-        Assert.AreEqual (7, range.IndexOf (11));
-        Assert.AreEqual (8, range.IndexOf (12));
-        Assert.AreEqual (9, range.IndexOf (13));
-        Assert.AreEqual (-1, range.IndexOf (99));
-    }
-    
-    [Test]
-    public void TestIndexerForGoodIndexes ()
-    {
-        RangeCollection range = new RangeCollection ();
+        #pragma warning disable 0618
         
-        /*
-        Range  Idx  Value
-        0-2    0 -> 0
-               1 -> 1
-               2 -> 2
-        
-        7-9    3 -> 7
-               4 -> 8
-               5 -> 9
-        
-        11-13  6 -> 11
-               7 -> 12
-               8 -> 13
-        */
-        
-        range.Add (0);
-        range.Add (1);
-        range.Add (2);
-        range.Add (7);
-        range.Add (8);
-        range.Add (9);
-        range.Add (11);
-        range.Add (12);
-        range.Add (13);
-        
-        Assert.AreEqual (0, range[0]);
-        Assert.AreEqual (1, range[1]);
-        Assert.AreEqual (2, range[2]);
-        Assert.AreEqual (7, range[3]);
-        Assert.AreEqual (8, range[4]);
-        Assert.AreEqual (9, range[5]);
-        Assert.AreEqual (11, range[6]);
-        Assert.AreEqual (12, range[7]);
-        Assert.AreEqual (13, range[8]);
-    }
+        [Test]
+        public void IndexesCacheGeneration ()
+        {
+            RangeCollection range = new RangeCollection ();
+            int [] index_cache = range.Indexes;
+            
+            Assert.AreSame (index_cache, range.Indexes);
+            
+            range.Add (0);
+            range.Add (5);
+            
+            if (index_cache == range.Indexes) {
+                Assert.Fail ("Indexes Cache not regenerated after change");
+            }
+            
+            index_cache = range.Indexes;
+            range.Remove (0);
+            range.Add (3);
     
-    private static void SortedInsert<T> (List<T> list, T value) 
-        where T : IComparable
-    {
-        if (list.Count == 0 || list[list.Count - 1].CompareTo (value) < 0) {
-            list.Add (value);
-        } else if (list[0].CompareTo (value) > 0) {
-            list.Insert (0, value);
-        } else {
-            int index = list.BinarySearch (value);
-            list.Insert (index < 0 ? ~index : index, value);
-        }
-    }
-
-    [Test]
-    public void TestStressForGoodIndexes ()
-    {
-        Random random = new Random (0xbeef);
-        RangeCollection ranges = new RangeCollection ();
-        List<int> indexes = new List<int> ();
-        
-        for (int i = 0, n = 75000; i < n; i++) {
-            int value = random.Next (n);
-            if (ranges.Add (value)) {
-                SortedInsert (indexes, value);
-            }
-        } 
-        
-        Assert.AreEqual (indexes.Count, ranges.Count);
-        for (int i = 0; i < indexes.Count; i++) {
-            Assert.AreEqual (indexes[i], ranges[i]);
+            if (index_cache == range.Indexes) {
+                Assert.Fail ("Indexes Cache not regenerated after change");
+            }
         }
-    }
-    
-    [Test]
-    [ExpectedException (typeof (IndexOutOfRangeException))]
-    public void TestIndexerForNegativeBadIndex ()
-    {
-        RangeCollection range = new RangeCollection ();
-        Assert.AreEqual (0, range[1]);
-    }
-    
-    [Test]
-    [ExpectedException (typeof (IndexOutOfRangeException))]
-    public void TestIndexerForZeroBadIndex ()
-    {
-        RangeCollection range = new RangeCollection ();
-        Assert.AreEqual (0, range[0]);
-    }
+        
+        #pragma warning restore 0618
     
-    [Test]
-    [ExpectedException (typeof (IndexOutOfRangeException))]
-    public void TestIndexerForPositiveBadIndex ()
-    {
-        RangeCollection range = new RangeCollection ();
-        range.Add (1);
-        Assert.AreEqual (0, range[1]);
-    }
+        [Test]
+        public void IndexOf ()
+        {
+            RangeCollection range = new RangeCollection ();
+            
+            range.Add (0);
+            range.Add (2);
+            range.Add (3);
+            range.Add (5);
+            range.Add (6);
+            range.Add (7);
+            range.Add (8);
+            range.Add (11);
+            range.Add (12);
+            range.Add (13);
+            
+            Assert.AreEqual (0, range.IndexOf (0));
+            Assert.AreEqual (1, range.IndexOf (2));
+            Assert.AreEqual (2, range.IndexOf (3));
+            Assert.AreEqual (3, range.IndexOf (5));
+            Assert.AreEqual (4, range.IndexOf (6));
+            Assert.AreEqual (5, range.IndexOf (7));
+            Assert.AreEqual (6, range.IndexOf (8));
+            Assert.AreEqual (7, range.IndexOf (11));
+            Assert.AreEqual (8, range.IndexOf (12));
+            Assert.AreEqual (9, range.IndexOf (13));
+            Assert.AreEqual (-1, range.IndexOf (99));
+        }
+        
+        [Test]
+        public void IndexerForGoodIndexes ()
+        {
+            RangeCollection range = new RangeCollection ();
+            
+            /*
+            Range  Idx  Value
+            0-2    0 -> 0
+                   1 -> 1
+                   2 -> 2
+            
+            7-9    3 -> 7
+                   4 -> 8
+                   5 -> 9
+            
+            11-13  6 -> 11
+                   7 -> 12
+                   8 -> 13
+            */
+            
+            range.Add (0);
+            range.Add (1);
+            range.Add (2);
+            range.Add (7);
+            range.Add (8);
+            range.Add (9);
+            range.Add (11);
+            range.Add (12);
+            range.Add (13);
+            
+            Assert.AreEqual (0, range[0]);
+            Assert.AreEqual (1, range[1]);
+            Assert.AreEqual (2, range[2]);
+            Assert.AreEqual (7, range[3]);
+            Assert.AreEqual (8, range[4]);
+            Assert.AreEqual (9, range[5]);
+            Assert.AreEqual (11, range[6]);
+            Assert.AreEqual (12, range[7]);
+            Assert.AreEqual (13, range[8]);
+        }
+        
+        private static void SortedInsert<T> (List<T> list, T value) 
+            where T : IComparable
+        {
+            if (list.Count == 0 || list[list.Count - 1].CompareTo (value) < 0) {
+                list.Add (value);
+            } else if (list[0].CompareTo (value) > 0) {
+                list.Insert (0, value);
+            } else {
+                int index = list.BinarySearch (value);
+                list.Insert (index < 0 ? ~index : index, value);
+            }
+        }
     
-    [Test]
-    public void TestExplicitInterface ()
-    {
-        ICollection<int> range = new RangeCollection ();
-        range.Add (1);
-        range.Add (2);
-        range.Add (5);
-        range.Add (6);
+        [Test]
+        public void StressForGoodIndexes ()
+        {
+            Random random = new Random (0xbeef);
+            RangeCollection ranges = new RangeCollection ();
+            List<int> indexes = new List<int> ();
+            
+            for (int i = 0, n = 75000; i < n; i++) {
+                int value = random.Next (n);
+                if (ranges.Add (value)) {
+                    SortedInsert (indexes, value);
+                }
+            } 
+            
+            Assert.AreEqual (indexes.Count, ranges.Count);
+            for (int i = 0; i < indexes.Count; i++) {
+                Assert.AreEqual (indexes[i], ranges[i]);
+            }
+        }
         
-        Assert.AreEqual (4, range.Count);
+        [Test]
+        [ExpectedException (typeof (IndexOutOfRangeException))]
+        public void IndexerForNegativeBadIndex ()
+        {
+            RangeCollection range = new RangeCollection ();
+            Assert.AreEqual (0, range[1]);
+        }
+        
+        [Test]
+        [ExpectedException (typeof (IndexOutOfRangeException))]
+        public void IndexerForZeroBadIndex ()
+        {
+            RangeCollection range = new RangeCollection ();
+            Assert.AreEqual (0, range[0]);
+        }
+        
+        [Test]
+        [ExpectedException (typeof (IndexOutOfRangeException))]
+        public void IndexerForPositiveBadIndex ()
+        {
+            RangeCollection range = new RangeCollection ();
+            range.Add (1);
+            Assert.AreEqual (0, range[1]);
+        }
+        
+        [Test]
+        public void ExplicitInterface ()
+        {
+            ICollection<int> range = new RangeCollection ();
+            range.Add (1);
+            range.Add (2);
+            range.Add (5);
+            range.Add (6);
+            
+            Assert.AreEqual (4, range.Count);
+        }
     }
 }
+
+#endif

Copied: trunk/banshee/src/Libraries/Hyena/Hyena.Data.Sqlite/Tests/DbBoundType.cs (from r3928, /trunk/banshee/tests/Hyena/DbBoundType.cs)
==============================================================================
--- /trunk/banshee/tests/Hyena/DbBoundType.cs	(original)
+++ trunk/banshee/src/Libraries/Hyena/Hyena.Data.Sqlite/Tests/DbBoundType.cs	Mon May 19 21:34:45 2008
@@ -26,286 +26,293 @@
 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 //
 
+#if ENABLE_TESTS
+
 using System;
 using Hyena.Data.Sqlite;
 
-public enum IntEnum : int
-{
-    Zero,
-    One,
-    Two,
-    Three
-}
-
-public enum LongEnum : long
-{
-    Cero,
-    Uno,
-    Dos,
-    Tres
-}
-
-public class ModelProvider : SqliteModelProvider<DbBoundType>
+namespace Hyena.Data.Sqlite.Tests
 {
-    public ModelProvider (HyenaSqliteConnection connection) : base (connection)
+    internal enum IntEnum : int
     {
-        Init ();
-    }
-    
-    public override string TableName {
-        get { return "TestTable"; }
-    }
-    protected override int ModelVersion {
-        get { return 1; }
-    }
-    protected override int DatabaseVersion {
-        get { return 1; }
+        Zero,
+        One,
+        Two,
+        Three
     }
     
-    protected override void MigrateTable (int old_version)
+    internal enum LongEnum : long
     {
+        Cero,
+        Uno,
+        Dos,
+        Tres
     }
-    protected override void MigrateDatabase (int old_version)
-    {
-    }
-    protected override DbBoundType MakeNewObject ()
-    {
-        return new DbBoundType ();
-    }
-}
-
-public class DbBoundType
-{
-    [DatabaseColumn ("PrimaryKey", Constraints = DatabaseColumnConstraints.PrimaryKey)]
-    public int PrimaryKey;
     
-    [DatabaseColumn ("PublicIntField")]
-    public int PublicIntField;
-    [DatabaseColumn ("PublicLongField")]
-    public long PublicLongField;
-    [DatabaseColumn ("PublicStringField")]
-    public string PublicStringField;
-    [DatabaseColumn ("PublicDateTimeField")]
-    public DateTime PublicDateTimeField;
-    [DatabaseColumn ("PublicTimeSpanField")]
-    public TimeSpan PublicTimeSpanField;
-    [DatabaseColumn ("PublicIntEnumField")]
-    public IntEnum PublicIntEnumField;
-    [DatabaseColumn ("PublicLongEnumField")]
-    public LongEnum PublicLongEnumField;
-    
-    private int public_int_property_field;
-    [DatabaseColumn ("PublicIntProperty")]
-    public int PublicIntProperty {
-        get { return public_int_property_field; }
-        set { public_int_property_field = value; }
-    }
-    private long public_long_property_field;
-    [DatabaseColumn ("PublicLongProperty")]
-    public long PublicLongProperty {
-        get { return public_long_property_field; }
-        set { public_long_property_field = value; }
-    }
-    private string public_string_property_field;
-    [DatabaseColumn ("PublicStringProperty")]
-    public string PublicStringProperty {
-        get { return public_string_property_field; }
-        set { public_string_property_field = value; }
-    }
-    private DateTime public_date_time_proprety_field;
-    [DatabaseColumn ("PublicDateTimeProperty")]
-    public DateTime PublicDateTimeProperty {
-        get { return public_date_time_proprety_field; }
-        set { public_date_time_proprety_field = value; }
-    }
-    private TimeSpan public_time_span_property_field;
-    [DatabaseColumn ("PublicTimeSpanProperty")]
-    public TimeSpan PublicTimeSpanProperty {
-        get { return public_time_span_property_field; }
-        set { public_time_span_property_field = value; }
-    }
-    private IntEnum public_int_enum_property_field;
-    [DatabaseColumn ("PublicIntEnumProperty")]
-    public IntEnum PublicIntEnumProperty {
-        get { return public_int_enum_property_field; }
-        set { public_int_enum_property_field = value; }
-    }
-    private LongEnum public_long_enum_property_field;
-    [DatabaseColumn ("PublicLongEnumProperty")]
-    public LongEnum PublicLongEnumProperty {
-        get { return public_long_enum_property_field; }
-        set { public_long_enum_property_field = value; }
-    }
-    
-    [DatabaseColumn ("PrivateIntField")]
-    private int private_int_field;
-    [DatabaseColumn ("PrivateLongField")]
-    private long private_long_field;
-    [DatabaseColumn ("PrivateStringField")]
-    private string private_string_field;
-    [DatabaseColumn ("PrivateDateTimeField")]
-    private DateTime private_date_time_field;
-    [DatabaseColumn ("PrivateTimeSpanField")]
-    private TimeSpan private_time_span_field;
-    [DatabaseColumn ("PrivateIntEnumField")]
-    private IntEnum private_int_enum_field;
-    [DatabaseColumn ("PrivateLongEnumField")]
-    private LongEnum private_long_enum_field;
-    
-    public int GetPrivateIntField ()
-    {
-        return private_int_field;
-    }
-    public void SetPrivateIntField (int value)
-    {
-        private_int_field = value;
-    }
-    public long GetPrivateLongField ()
-    {
-        return private_long_field;
-    }
-    public void SetPrivateLongField (long value)
+    internal class ModelProvider : SqliteModelProvider<DbBoundType>
     {
-        private_long_field = value;
-    }
-    public string GetPrivateStringField ()
-    {
-        return private_string_field;
-    }
-    public void SetPrivateStringField (string value)
-    {
-        private_string_field = value;
-    }
-    public DateTime GetPrivateDateTimeField ()
-    {
-        return private_date_time_field;
-    }
-    public void SetPrivateDateTimeField (DateTime value)
-    {
-        private_date_time_field = value;
-    }
-    public TimeSpan GetPrivateTimeSpanField ()
-    {
-        return private_time_span_field;
-    }
-    public void SetPrivateTimeSpanField (TimeSpan value)
-    {
-        private_time_span_field = value;
-    }
-    public IntEnum GetPrivateIntEnumField ()
-    {
-        return private_int_enum_field;
-    }
-    public void SetPrivateIntEnumField (IntEnum value)
-    {
-        private_int_enum_field = value;
-    }
-    public LongEnum GetPrivateLongEnumField ()
-    {
-        return private_long_enum_field;
-    }
-    public void SetPrivateLongEnumField (LongEnum value)
-    {
-        private_long_enum_field = value;
-    }
-    
-    private int private_int_property_field;
-    [DatabaseColumn ("PrivateIntProperty")]
-    private int private_int_property {
-        get { return private_int_property_field; }
-        set { private_int_property_field = value; }
-    }
-    private long private_long_property_field;
-    [DatabaseColumn ("PrivateLongProperty")]
-    private long private_long_property {
-        get { return private_long_property_field; }
-        set { private_long_property_field = value; }
-    }
-    private string private_string_property_field;
-    [DatabaseColumn ("PrivateStringProperty")]
-    private string private_string_property {
-        get { return private_string_property_field; }
-        set { private_string_property_field = value; }
-    }
-    private DateTime private_date_time_property_field;
-    [DatabaseColumn ("PrivateDateTimeProperty")]
-    private DateTime private_date_time_property {
-        get { return private_date_time_property_field; }
-        set { private_date_time_property_field = value; }
-    }
-    private TimeSpan private_time_span_property_field;
-    [DatabaseColumn ("PrivateTimeSpanProperty")]
-    private TimeSpan private_time_span_property {
-        get { return private_time_span_property_field; }
-        set { private_time_span_property_field = value; }
-    }
-    private IntEnum private_int_enum_property_field;
-    [DatabaseColumn ("PrivateIntEnumProperty")]
-    private IntEnum private_int_enum_property {
-        get { return private_int_enum_property_field; }
-        set { private_int_enum_property_field = value; }
-    }
-    private LongEnum private_long_enum_property_field;
-    [DatabaseColumn ("PrivateLongEnumProperty")]
-    private LongEnum private_long_enum_property {
-        get { return private_long_enum_property_field; }
-        set { private_long_enum_property_field = value; }
+        public ModelProvider (HyenaSqliteConnection connection) : base (connection)
+        {
+            Init ();
+        }
+        
+        public override string TableName {
+            get { return "TestTable"; }
+        }
+        protected override int ModelVersion {
+            get { return 1; }
+        }
+        protected override int DatabaseVersion {
+            get { return 1; }
+        }
+        
+        protected override void MigrateTable (int old_version)
+        {
+        }
+        protected override void MigrateDatabase (int old_version)
+        {
+        }
+        protected override DbBoundType MakeNewObject ()
+        {
+            return new DbBoundType ();
+        }
     }
     
-    public int GetPrivateIntProperty ()
-    {
-        return private_int_property;
-    }
-    public void SetPrivateIntProperty (int value)
-    {
-        private_int_property = value;
-    }
-    public long GetPrivateLongProperty ()
-    {
-        return private_long_property;
-    }
-    public void SetPrivateLongProperty (long value)
-    {
-        private_long_property = value;
-    }
-    public string GetPrivateStringProperty ()
-    {
-        return private_string_property;
-    }
-    public void SetPrivateStringProperty (string value)
-    {
-        private_string_property = value;
-    }
-    public DateTime GetPrivateDateTimeProperty ()
-    {
-        return private_date_time_property;
-    }
-    public void SetPrivateDateTimeProperty (DateTime value)
-    {
-        private_date_time_property = value;
-    }
-    public TimeSpan GetPrivateTimeSpanProperty ()
+    internal class DbBoundType
     {
-        return private_time_span_property;
-    }
-    public void SetPrivateTimeSpanProperty (TimeSpan value)
-    {
-        private_time_span_property = value;
-    }
-    public IntEnum GetPrivateIntEnumProperty ()
-    {
-        return private_int_enum_property;
-    }
-    public void SetPrivateIntEnumProperty (IntEnum value)
-    {
-        private_int_enum_property = value;
-    }
-    public LongEnum GetPrivateLongEnumProperty ()
-    {
-        return private_long_enum_property;
-    }
-    public void SetPrivateLongEnumProperty (LongEnum value)
-    {
-        private_long_enum_property = value;
+        [DatabaseColumn ("PrimaryKey", Constraints = DatabaseColumnConstraints.PrimaryKey)]
+        public int PrimaryKey;
+        
+        [DatabaseColumn ("PublicIntField")]
+        public int PublicIntField;
+        [DatabaseColumn ("PublicLongField")]
+        public long PublicLongField;
+        [DatabaseColumn ("PublicStringField")]
+        public string PublicStringField;
+        [DatabaseColumn ("PublicDateTimeField")]
+        public DateTime PublicDateTimeField;
+        [DatabaseColumn ("PublicTimeSpanField")]
+        public TimeSpan PublicTimeSpanField;
+        [DatabaseColumn ("PublicIntEnumField")]
+        public IntEnum PublicIntEnumField;
+        [DatabaseColumn ("PublicLongEnumField")]
+        public LongEnum PublicLongEnumField;
+        
+        private int public_int_property_field;
+        [DatabaseColumn ("PublicIntProperty")]
+        public int PublicIntProperty {
+            get { return public_int_property_field; }
+            set { public_int_property_field = value; }
+        }
+        private long public_long_property_field;
+        [DatabaseColumn ("PublicLongProperty")]
+        public long PublicLongProperty {
+            get { return public_long_property_field; }
+            set { public_long_property_field = value; }
+        }
+        private string public_string_property_field;
+        [DatabaseColumn ("PublicStringProperty")]
+        public string PublicStringProperty {
+            get { return public_string_property_field; }
+            set { public_string_property_field = value; }
+        }
+        private DateTime public_date_time_proprety_field;
+        [DatabaseColumn ("PublicDateTimeProperty")]
+        public DateTime PublicDateTimeProperty {
+            get { return public_date_time_proprety_field; }
+            set { public_date_time_proprety_field = value; }
+        }
+        private TimeSpan public_time_span_property_field;
+        [DatabaseColumn ("PublicTimeSpanProperty")]
+        public TimeSpan PublicTimeSpanProperty {
+            get { return public_time_span_property_field; }
+            set { public_time_span_property_field = value; }
+        }
+        private IntEnum public_int_enum_property_field;
+        [DatabaseColumn ("PublicIntEnumProperty")]
+        public IntEnum PublicIntEnumProperty {
+            get { return public_int_enum_property_field; }
+            set { public_int_enum_property_field = value; }
+        }
+        private LongEnum public_long_enum_property_field;
+        [DatabaseColumn ("PublicLongEnumProperty")]
+        public LongEnum PublicLongEnumProperty {
+            get { return public_long_enum_property_field; }
+            set { public_long_enum_property_field = value; }
+        }
+        
+        [DatabaseColumn ("PrivateIntField")]
+        private int private_int_field;
+        [DatabaseColumn ("PrivateLongField")]
+        private long private_long_field;
+        [DatabaseColumn ("PrivateStringField")]
+        private string private_string_field;
+        [DatabaseColumn ("PrivateDateTimeField")]
+        private DateTime private_date_time_field;
+        [DatabaseColumn ("PrivateTimeSpanField")]
+        private TimeSpan private_time_span_field;
+        [DatabaseColumn ("PrivateIntEnumField")]
+        private IntEnum private_int_enum_field;
+        [DatabaseColumn ("PrivateLongEnumField")]
+        private LongEnum private_long_enum_field;
+        
+        public int GetPrivateIntField ()
+        {
+            return private_int_field;
+        }
+        public void SetPrivateIntField (int value)
+        {
+            private_int_field = value;
+        }
+        public long GetPrivateLongField ()
+        {
+            return private_long_field;
+        }
+        public void SetPrivateLongField (long value)
+        {
+            private_long_field = value;
+        }
+        public string GetPrivateStringField ()
+        {
+            return private_string_field;
+        }
+        public void SetPrivateStringField (string value)
+        {
+            private_string_field = value;
+        }
+        public DateTime GetPrivateDateTimeField ()
+        {
+            return private_date_time_field;
+        }
+        public void SetPrivateDateTimeField (DateTime value)
+        {
+            private_date_time_field = value;
+        }
+        public TimeSpan GetPrivateTimeSpanField ()
+        {
+            return private_time_span_field;
+        }
+        public void SetPrivateTimeSpanField (TimeSpan value)
+        {
+            private_time_span_field = value;
+        }
+        public IntEnum GetPrivateIntEnumField ()
+        {
+            return private_int_enum_field;
+        }
+        public void SetPrivateIntEnumField (IntEnum value)
+        {
+            private_int_enum_field = value;
+        }
+        public LongEnum GetPrivateLongEnumField ()
+        {
+            return private_long_enum_field;
+        }
+        public void SetPrivateLongEnumField (LongEnum value)
+        {
+            private_long_enum_field = value;
+        }
+        
+        private int private_int_property_field;
+        [DatabaseColumn ("PrivateIntProperty")]
+        private int private_int_property {
+            get { return private_int_property_field; }
+            set { private_int_property_field = value; }
+        }
+        private long private_long_property_field;
+        [DatabaseColumn ("PrivateLongProperty")]
+        private long private_long_property {
+            get { return private_long_property_field; }
+            set { private_long_property_field = value; }
+        }
+        private string private_string_property_field;
+        [DatabaseColumn ("PrivateStringProperty")]
+        private string private_string_property {
+            get { return private_string_property_field; }
+            set { private_string_property_field = value; }
+        }
+        private DateTime private_date_time_property_field;
+        [DatabaseColumn ("PrivateDateTimeProperty")]
+        private DateTime private_date_time_property {
+            get { return private_date_time_property_field; }
+            set { private_date_time_property_field = value; }
+        }
+        private TimeSpan private_time_span_property_field;
+        [DatabaseColumn ("PrivateTimeSpanProperty")]
+        private TimeSpan private_time_span_property {
+            get { return private_time_span_property_field; }
+            set { private_time_span_property_field = value; }
+        }
+        private IntEnum private_int_enum_property_field;
+        [DatabaseColumn ("PrivateIntEnumProperty")]
+        private IntEnum private_int_enum_property {
+            get { return private_int_enum_property_field; }
+            set { private_int_enum_property_field = value; }
+        }
+        private LongEnum private_long_enum_property_field;
+        [DatabaseColumn ("PrivateLongEnumProperty")]
+        private LongEnum private_long_enum_property {
+            get { return private_long_enum_property_field; }
+            set { private_long_enum_property_field = value; }
+        }
+        
+        public int GetPrivateIntProperty ()
+        {
+            return private_int_property;
+        }
+        public void SetPrivateIntProperty (int value)
+        {
+            private_int_property = value;
+        }
+        public long GetPrivateLongProperty ()
+        {
+            return private_long_property;
+        }
+        public void SetPrivateLongProperty (long value)
+        {
+            private_long_property = value;
+        }
+        public string GetPrivateStringProperty ()
+        {
+            return private_string_property;
+        }
+        public void SetPrivateStringProperty (string value)
+        {
+            private_string_property = value;
+        }
+        public DateTime GetPrivateDateTimeProperty ()
+        {
+            return private_date_time_property;
+        }
+        public void SetPrivateDateTimeProperty (DateTime value)
+        {
+            private_date_time_property = value;
+        }
+        public TimeSpan GetPrivateTimeSpanProperty ()
+        {
+            return private_time_span_property;
+        }
+        public void SetPrivateTimeSpanProperty (TimeSpan value)
+        {
+            private_time_span_property = value;
+        }
+        public IntEnum GetPrivateIntEnumProperty ()
+        {
+            return private_int_enum_property;
+        }
+        public void SetPrivateIntEnumProperty (IntEnum value)
+        {
+            private_int_enum_property = value;
+        }
+        public LongEnum GetPrivateLongEnumProperty ()
+        {
+            return private_long_enum_property;
+        }
+        public void SetPrivateLongEnumProperty (LongEnum value)
+        {
+            private_long_enum_property = value;
+        }
     }
 }
+
+#endif

Copied: trunk/banshee/src/Libraries/Hyena/Hyena.Data.Sqlite/Tests/SqliteCommandTests.cs (from r3928, /trunk/banshee/tests/Hyena/SqliteCommandTests.cs)
==============================================================================
--- /trunk/banshee/tests/Hyena/SqliteCommandTests.cs	(original)
+++ trunk/banshee/src/Libraries/Hyena/Hyena.Data.Sqlite/Tests/SqliteCommandTests.cs	Mon May 19 21:34:45 2008
@@ -26,79 +26,86 @@
 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 //
 
+#if ENABLE_TESTS
+
 using System;
 using System.Reflection;
 using NUnit.Framework;
 using Hyena.Data.Sqlite;
 
-[TestFixture]
-public class SqliteCommandTests
+namespace Hyena.Data.Sqlite.Tests
 {
-    [Test]
-    public void TestIdentifiesParameters ()
+    [TestFixture]
+    public class SqliteCommandTests
     {
-        HyenaSqliteCommand cmd = null;
-        try {
-            cmd = new HyenaSqliteCommand ("select foo from bar where baz = ?, bbz = ?, this = ?",
-                "a", 32);
-            Assert.Fail ("Should not have been able to pass 2 values to ApplyValues without exception");
-        } catch {}
-
-        try {
-            cmd = new HyenaSqliteCommand ("select foo from bar where baz = ?, bbz = ?, this = ?",
-                "a", 32, "22");
-        } catch {
-            Assert.Fail ("Should have been able to pass 3 values to ApplyValues without exception");
+        [Test]
+        public void IdentifiesParameters ()
+        {
+            HyenaSqliteCommand cmd = null;
+            try {
+                cmd = new HyenaSqliteCommand ("select foo from bar where baz = ?, bbz = ?, this = ?",
+                    "a", 32);
+                Assert.Fail ("Should not have been able to pass 2 values to ApplyValues without exception");
+            } catch {}
+    
+            try {
+                cmd = new HyenaSqliteCommand ("select foo from bar where baz = ?, bbz = ?, this = ?",
+                    "a", 32, "22");
+            } catch {
+                Assert.Fail ("Should have been able to pass 3 values to ApplyValues without exception");
+            }
+    
+            Assert.AreEqual ("select foo from bar where baz = 'a', bbz = 32, this = '22'", GetGeneratedSql (cmd));
+        }
+    
+        [Test]
+        public void Constructor ()
+        {
+            HyenaSqliteCommand cmd = new HyenaSqliteCommand ("select foo from bar where baz = ?, bbz = ?, this = ?", "a", 32, "22");
+            Assert.AreEqual ("select foo from bar where baz = 'a', bbz = 32, this = '22'", GetGeneratedSql (cmd));
+        }
+    
+        [Test]
+        public void CultureInvariant ()
+        {
+            HyenaSqliteCommand cmd = new HyenaSqliteCommand ("select foo from bar where baz = ?", 32.2);
+            Assert.AreEqual ("select foo from bar where baz = 32.2", GetGeneratedSql (cmd));
+        }
+    
+        [Test]
+        public void ParameterSerialization ()
+        {
+            HyenaSqliteCommand cmd = new HyenaSqliteCommand ("select foo from bar where baz = ?");
+    
+            Assert.AreEqual ("select foo from bar where baz = NULL", GetGeneratedSql (cmd, null));
+            Assert.AreEqual ("select foo from bar where baz = 'It''s complicated, \"but\" ''''why not''''?'", GetGeneratedSql (cmd, "It's complicated, \"but\" ''why not''?"));
+            Assert.AreEqual ("select foo from bar where baz = 0", GetGeneratedSql (cmd, new DateTime (1970, 1, 1).ToLocalTime ()));
+            Assert.AreEqual ("select foo from bar where baz = 931309200", GetGeneratedSql (cmd, new DateTime (1999, 7, 7).ToLocalTime ()));
+            Assert.AreEqual ("select foo from bar where baz = 555.55", GetGeneratedSql (cmd, 555.55f));
+            Assert.AreEqual ("select foo from bar where baz = 555.55", GetGeneratedSql (cmd, 555.55));
+            Assert.AreEqual ("select foo from bar where baz = 555", GetGeneratedSql (cmd, 555));
+            Assert.AreEqual ("select foo from bar where baz = 1", GetGeneratedSql (cmd, true));
+            Assert.AreEqual ("select foo from bar where baz = 0", GetGeneratedSql (cmd, false));
+    
+            HyenaSqliteCommand cmd2 = new HyenaSqliteCommand ("select foo from bar where baz = ?, bar = ?, boo = ?");
+            Assert.AreEqual ("select foo from bar where baz = NULL, bar = NULL, boo = 22", GetGeneratedSql (cmd2, null, null, 22));
+    
+            HyenaSqliteCommand cmd3 = new HyenaSqliteCommand ("select foo from bar where id in (?) and foo not in (?)");
+            Assert.AreEqual ("select foo from bar where id in (1,2,4) and foo not in ('foo','baz')",
+                    GetGeneratedSql (cmd3, new int [] {1, 2, 4}, new string [] {"foo", "baz"}));
+        }
+    
+        static PropertyInfo tf = typeof(HyenaSqliteCommand).GetProperty ("CurrentSqlText", BindingFlags.Instance | BindingFlags.NonPublic);
+        private static string GetGeneratedSql (HyenaSqliteCommand cmd, params object [] p)
+        {
+            return tf.GetValue ((new HyenaSqliteCommand (cmd.Text, p)), null) as string;
+        }
+    
+        private static string GetGeneratedSql (HyenaSqliteCommand cmd)
+        {
+            return tf.GetValue (cmd, null) as string;
         }
-
-        Assert.AreEqual ("select foo from bar where baz = 'a', bbz = 32, this = '22'", GetGeneratedSql (cmd));
-    }
-
-    [Test]
-    public void TestConstructor ()
-    {
-        HyenaSqliteCommand cmd = new HyenaSqliteCommand ("select foo from bar where baz = ?, bbz = ?, this = ?", "a", 32, "22");
-        Assert.AreEqual ("select foo from bar where baz = 'a', bbz = 32, this = '22'", GetGeneratedSql (cmd));
-    }
-
-    [Test]
-    public void TestCultureInvariant ()
-    {
-        HyenaSqliteCommand cmd = new HyenaSqliteCommand ("select foo from bar where baz = ?", 32.2);
-        Assert.AreEqual ("select foo from bar where baz = 32.2", GetGeneratedSql (cmd));
-    }
-
-    [Test]
-    public void TestParameterSerialization ()
-    {
-        HyenaSqliteCommand cmd = new HyenaSqliteCommand ("select foo from bar where baz = ?");
-
-        Assert.AreEqual ("select foo from bar where baz = NULL", GetGeneratedSql (cmd, null));
-        Assert.AreEqual ("select foo from bar where baz = 'It''s complicated, \"but\" ''''why not''''?'", GetGeneratedSql (cmd, "It's complicated, \"but\" ''why not''?"));
-        Assert.AreEqual ("select foo from bar where baz = 0", GetGeneratedSql (cmd, new DateTime (1970, 1, 1).ToLocalTime ()));
-        Assert.AreEqual ("select foo from bar where baz = 931309200", GetGeneratedSql (cmd, new DateTime (1999, 7, 7).ToLocalTime ()));
-        Assert.AreEqual ("select foo from bar where baz = 555.55", GetGeneratedSql (cmd, 555.55f));
-        Assert.AreEqual ("select foo from bar where baz = 555.55", GetGeneratedSql (cmd, 555.55));
-        Assert.AreEqual ("select foo from bar where baz = 555", GetGeneratedSql (cmd, 555));
-        Assert.AreEqual ("select foo from bar where baz = 1", GetGeneratedSql (cmd, true));
-        Assert.AreEqual ("select foo from bar where baz = 0", GetGeneratedSql (cmd, false));
-
-        HyenaSqliteCommand cmd2 = new HyenaSqliteCommand ("select foo from bar where baz = ?, bar = ?, boo = ?");
-        Assert.AreEqual ("select foo from bar where baz = NULL, bar = NULL, boo = 22", GetGeneratedSql (cmd2, null, null, 22));
-
-        HyenaSqliteCommand cmd3 = new HyenaSqliteCommand ("select foo from bar where id in (?) and foo not in (?)");
-        Assert.AreEqual ("select foo from bar where id in (1,2,4) and foo not in ('foo','baz')",
-                GetGeneratedSql (cmd3, new int [] {1, 2, 4}, new string [] {"foo", "baz"}));
-    }
-
-    static PropertyInfo tf = typeof(HyenaSqliteCommand).GetProperty ("CurrentSqlText", BindingFlags.Instance | BindingFlags.NonPublic);
-    private static string GetGeneratedSql (HyenaSqliteCommand cmd, params object [] p)
-    {
-        return tf.GetValue ((new HyenaSqliteCommand (cmd.Text, p)), null) as string;
-    }
-
-    private static string GetGeneratedSql (HyenaSqliteCommand cmd)
-    {
-        return tf.GetValue (cmd, null) as string;
     }
 }
+
+#endif

Copied: trunk/banshee/src/Libraries/Hyena/Hyena.Data.Sqlite/Tests/SqliteModelProviderTests.cs (from r3928, /trunk/banshee/tests/Hyena/SqliteModelProviderTests.cs)
==============================================================================
--- /trunk/banshee/tests/Hyena/SqliteModelProviderTests.cs	(original)
+++ trunk/banshee/src/Libraries/Hyena/Hyena.Data.Sqlite/Tests/SqliteModelProviderTests.cs	Mon May 19 21:34:45 2008
@@ -26,198 +26,205 @@
 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 //
 
+#if ENABLE_TESTS
+
 using System;
 using System.Data;
 using System.IO;
 using NUnit.Framework;
 using Hyena.Data.Sqlite;
 
-[TestFixture]
-public class SqliteModelProviderTests
+namespace Hyena.Data.Sqlite.Tests
 {
-    private HyenaSqliteConnection connection;
-    private ModelProvider provider;
-    
-    [TestFixtureSetUp]
-    public void Init ()
-    {
-        connection = new HyenaSqliteConnection ("test.db");
-        provider = new ModelProvider (connection);
-    }
-    
-    [TestFixtureTearDown]
-    public void Dispose ()
-    {
-        connection.Dispose ();
-        File.Delete ("test.db");
-    }
-    
-    [Test]
-    public void TestIntMembers ()
-    {
-        DbBoundType newed_item = new DbBoundType ();
-        newed_item.PublicIntField = 3141592;
-        newed_item.PublicIntProperty = 13;
-        newed_item.SetPrivateIntField (128);
-        newed_item.SetPrivateIntProperty (42);
-        
-        provider.Save (newed_item);
-        
-        DbBoundType loaded_item = provider.FetchSingle (newed_item.PrimaryKey);
-        Assert.AreEqual (newed_item.PublicIntField, loaded_item.PublicIntField);
-        Assert.AreEqual (newed_item.PublicIntProperty, loaded_item.PublicIntProperty);
-        Assert.AreEqual (newed_item.GetPrivateIntField (), loaded_item.GetPrivateIntField ());
-        Assert.AreEqual (newed_item.GetPrivateIntProperty (), loaded_item.GetPrivateIntProperty ());
-    }
-    
-    [Test]
-    public void TestLongMembers ()
-    {
-        DbBoundType newed_item = new DbBoundType ();
-        newed_item.PublicLongField = 4926227057;
-        newed_item.PublicLongProperty = -932;
-        newed_item.SetPrivateLongField (3243);
-        newed_item.SetPrivateLongProperty (1);
-        
-        provider.Save (newed_item);
-        
-        DbBoundType loaded_item = provider.FetchSingle (newed_item.PrimaryKey);
-        Assert.AreEqual (newed_item.PublicLongField, loaded_item.PublicLongField);
-        Assert.AreEqual (newed_item.PublicLongProperty, loaded_item.PublicLongProperty);
-        Assert.AreEqual (newed_item.GetPrivateLongField (), loaded_item.GetPrivateLongField ());
-        Assert.AreEqual (newed_item.GetPrivateLongProperty (), loaded_item.GetPrivateLongProperty ());
-    }
-    
-    [Test]
-    public void TestStringMembers ()
+    [TestFixture]
+    public class SqliteModelProviderTests
     {
-        DbBoundType newed_item = new DbBoundType ();
-        newed_item.PublicStringField = "Surely you're joking, Mr. Feynman.";
-        newed_item.PublicStringProperty = "Even as a splitted bark, so sunder we: This way fall I to death.";
-        newed_item.SetPrivateStringField ("Who is John Galt?");
-        newed_item.SetPrivateStringProperty ("The most formidable weapon against errors of every kind is Reason.");
-        
-        provider.Save (newed_item);
-        
-        DbBoundType loaded_item = provider.FetchSingle (newed_item.PrimaryKey);
-        Assert.AreEqual (newed_item.PublicStringField, loaded_item.PublicStringField);
-        Assert.AreEqual (newed_item.PublicStringProperty, loaded_item.PublicStringProperty);
-        Assert.AreEqual (newed_item.GetPrivateStringField (), loaded_item.GetPrivateStringField ());
-        Assert.AreEqual (newed_item.GetPrivateStringProperty (), loaded_item.GetPrivateStringProperty ());
-    }
-
-    [Test]
-    public void TestNullStringMembers ()
-    {
-        DbBoundType newed_item = new DbBoundType ();
-        newed_item.PublicStringField = null;
-        newed_item.PublicStringProperty = null;
-        newed_item.SetPrivateStringField (null);
-        newed_item.SetPrivateStringProperty (null);
-        
-        provider.Save (newed_item);
-        
-        DbBoundType loaded_item = provider.FetchSingle (newed_item.PrimaryKey);
-        Assert.AreEqual (newed_item.PublicStringField, loaded_item.PublicStringField);
-        Assert.AreEqual (newed_item.PublicStringProperty, loaded_item.PublicStringProperty);
-        Assert.AreEqual (newed_item.GetPrivateStringField (), loaded_item.GetPrivateStringField ());
-        Assert.AreEqual (newed_item.GetPrivateStringProperty (), loaded_item.GetPrivateStringProperty ());
-    }
-    
-    // Some fidelity is lost in the conversion from DT to DB time format
-    private void AssertArePrettyClose (DateTime time1, DateTime time2)
-    {
-        Assert.AreEqual (time1.Year, time2.Year);
-        Assert.AreEqual (time1.Month, time2.Month);
-        Assert.AreEqual (time1.Day, time2.Day);
-        Assert.AreEqual (time1.Hour, time2.Hour);
-        Assert.AreEqual (time1.Minute, time2.Minute);
-        Assert.AreEqual (time1.Second, time2.Second);
-    }
-    
-    [Test]
-    public void TestDateTimeMembers ()
-    {
-        DbBoundType newed_item = new DbBoundType ();
-        newed_item.PublicDateTimeField = DateTime.Now;
-        newed_item.PublicDateTimeProperty = new DateTime (1986, 4, 23);
-        newed_item.SetPrivateDateTimeField (DateTime.MinValue);
-        newed_item.SetPrivateDateTimeProperty (DateTime.Now);
-        
-        provider.Save (newed_item);
-        
-        string command = String.Format ("SELECT PrivateDateTimeField FROM {0} WHERE PrimaryKey = {1}", provider.TableName, newed_item.PrimaryKey);
-        
-        using (IDataReader reader = connection.Query (command)) {
-            reader.Read ();
-            Assert.IsTrue (reader.IsDBNull (0));
-        }
-        
-        DbBoundType loaded_item = provider.FetchSingle (newed_item.PrimaryKey);
-        AssertArePrettyClose (newed_item.PublicDateTimeField, loaded_item.PublicDateTimeField);
-        AssertArePrettyClose (newed_item.PublicDateTimeProperty, loaded_item.PublicDateTimeProperty);
-        AssertArePrettyClose (newed_item.GetPrivateDateTimeField (), loaded_item.GetPrivateDateTimeField ());
-        AssertArePrettyClose (newed_item.GetPrivateDateTimeProperty (), loaded_item.GetPrivateDateTimeProperty ());
-    }
-    
-    [Test]
-    public void TestTimeSpanMembers ()
-    {
-        DbBoundType newed_item = new DbBoundType ();
-        newed_item.PublicTimeSpanField = new TimeSpan (0, 0, 1);
-        newed_item.PublicTimeSpanProperty = new TimeSpan (1, 0, 0);
-        newed_item.SetPrivateTimeSpanField (new TimeSpan (1, 39, 12));
-        newed_item.SetPrivateTimeSpanProperty (TimeSpan.MinValue);
-        
-        provider.Save (newed_item);
-        
-        string command = String.Format ("SELECT PrivateTimeSpanProperty FROM {0} WHERE PrimaryKey = {1}", provider.TableName, newed_item.PrimaryKey);
-        using (IDataReader reader = connection.Query (command)) {
-            reader.Read ();
-            Assert.IsTrue (reader.IsDBNull (0));
-        }
-        
-        // NUnit boxes and uses reference equality, rather than Equals()
-        DbBoundType loaded_item = provider.FetchSingle (newed_item.PrimaryKey);
-        Assert.AreEqual (newed_item.PublicTimeSpanField, loaded_item.PublicTimeSpanField);
-        Assert.AreEqual (newed_item.PublicTimeSpanProperty, loaded_item.PublicTimeSpanProperty);
-        Assert.AreEqual (newed_item.GetPrivateTimeSpanField (), loaded_item.GetPrivateTimeSpanField ());
-        Assert.AreEqual (newed_item.GetPrivateTimeSpanProperty (), loaded_item.GetPrivateTimeSpanProperty ());
-    }
-    
-    [Test]
-    public void TestIntEnumMembers ()
-    {
-        DbBoundType newed_item = new DbBoundType ();
-        newed_item.PublicIntEnumField = IntEnum.Zero;
-        newed_item.PublicIntEnumProperty = IntEnum.One;
-        newed_item.SetPrivateIntEnumField (IntEnum.Two);
-        newed_item.SetPrivateIntEnumProperty (IntEnum.Three);
-        
-        provider.Save (newed_item);
-        
-        DbBoundType loaded_item = provider.FetchSingle (newed_item.PrimaryKey);
-        Assert.AreEqual (newed_item.PublicIntEnumField, loaded_item.PublicIntEnumField);
-        Assert.AreEqual (newed_item.PublicIntEnumProperty, loaded_item.PublicIntEnumProperty);
-        Assert.AreEqual (newed_item.GetPrivateIntEnumField (), loaded_item.GetPrivateIntEnumField ());
-        Assert.AreEqual (newed_item.GetPrivateIntEnumProperty (), loaded_item.GetPrivateIntEnumProperty ());
-    }
+        private HyenaSqliteConnection connection;
+        private ModelProvider provider;
+        
+        [TestFixtureSetUp]
+        public void Init ()
+        {
+            connection = new HyenaSqliteConnection ("test.db");
+            provider = new ModelProvider (connection);
+        }
+        
+        [TestFixtureTearDown]
+        public void Dispose ()
+        {
+            connection.Dispose ();
+            File.Delete ("test.db");
+        }
+        
+        [Test]
+        public void IntMembers ()
+        {
+            DbBoundType newed_item = new DbBoundType ();
+            newed_item.PublicIntField = 3141592;
+            newed_item.PublicIntProperty = 13;
+            newed_item.SetPrivateIntField (128);
+            newed_item.SetPrivateIntProperty (42);
+            
+            provider.Save (newed_item);
+            
+            DbBoundType loaded_item = provider.FetchSingle (newed_item.PrimaryKey);
+            Assert.AreEqual (newed_item.PublicIntField, loaded_item.PublicIntField);
+            Assert.AreEqual (newed_item.PublicIntProperty, loaded_item.PublicIntProperty);
+            Assert.AreEqual (newed_item.GetPrivateIntField (), loaded_item.GetPrivateIntField ());
+            Assert.AreEqual (newed_item.GetPrivateIntProperty (), loaded_item.GetPrivateIntProperty ());
+        }
+        
+        [Test]
+        public void LongMembers ()
+        {
+            DbBoundType newed_item = new DbBoundType ();
+            newed_item.PublicLongField = 4926227057;
+            newed_item.PublicLongProperty = -932;
+            newed_item.SetPrivateLongField (3243);
+            newed_item.SetPrivateLongProperty (1);
+            
+            provider.Save (newed_item);
+            
+            DbBoundType loaded_item = provider.FetchSingle (newed_item.PrimaryKey);
+            Assert.AreEqual (newed_item.PublicLongField, loaded_item.PublicLongField);
+            Assert.AreEqual (newed_item.PublicLongProperty, loaded_item.PublicLongProperty);
+            Assert.AreEqual (newed_item.GetPrivateLongField (), loaded_item.GetPrivateLongField ());
+            Assert.AreEqual (newed_item.GetPrivateLongProperty (), loaded_item.GetPrivateLongProperty ());
+        }
+        
+        [Test]
+        public void StringMembers ()
+        {
+            DbBoundType newed_item = new DbBoundType ();
+            newed_item.PublicStringField = "Surely you're joking, Mr. Feynman.";
+            newed_item.PublicStringProperty = "Even as a splitted bark, so sunder we: This way fall I to death.";
+            newed_item.SetPrivateStringField ("Who is John Galt?");
+            newed_item.SetPrivateStringProperty ("The most formidable weapon against errors of every kind is Reason.");
+            
+            provider.Save (newed_item);
+            
+            DbBoundType loaded_item = provider.FetchSingle (newed_item.PrimaryKey);
+            Assert.AreEqual (newed_item.PublicStringField, loaded_item.PublicStringField);
+            Assert.AreEqual (newed_item.PublicStringProperty, loaded_item.PublicStringProperty);
+            Assert.AreEqual (newed_item.GetPrivateStringField (), loaded_item.GetPrivateStringField ());
+            Assert.AreEqual (newed_item.GetPrivateStringProperty (), loaded_item.GetPrivateStringProperty ());
+        }
     
-    [Test]
-    public void TestLongEnumMembers ()
-    {
-        DbBoundType newed_item = new DbBoundType ();
-        newed_item.PublicLongEnumField = LongEnum.Cero;
-        newed_item.PublicLongEnumProperty = LongEnum.Uno;
-        newed_item.SetPrivateLongEnumField (LongEnum.Dos);
-        newed_item.SetPrivateLongEnumProperty (LongEnum.Tres);
-        
-        provider.Save (newed_item);
-        
-        DbBoundType loaded_item = provider.FetchSingle (newed_item.PrimaryKey);
-        Assert.AreEqual (newed_item.PublicLongEnumField, loaded_item.PublicLongEnumField);
-        Assert.AreEqual (newed_item.PublicLongEnumProperty, loaded_item.PublicLongEnumProperty);
-        Assert.AreEqual (newed_item.GetPrivateLongEnumField (), loaded_item.GetPrivateLongEnumField ());
-        Assert.AreEqual (newed_item.GetPrivateLongEnumProperty (), loaded_item.GetPrivateLongEnumProperty ());
+        [Test]
+        public void NullStringMembers ()
+        {
+            DbBoundType newed_item = new DbBoundType ();
+            newed_item.PublicStringField = null;
+            newed_item.PublicStringProperty = null;
+            newed_item.SetPrivateStringField (null);
+            newed_item.SetPrivateStringProperty (null);
+            
+            provider.Save (newed_item);
+            
+            DbBoundType loaded_item = provider.FetchSingle (newed_item.PrimaryKey);
+            Assert.AreEqual (newed_item.PublicStringField, loaded_item.PublicStringField);
+            Assert.AreEqual (newed_item.PublicStringProperty, loaded_item.PublicStringProperty);
+            Assert.AreEqual (newed_item.GetPrivateStringField (), loaded_item.GetPrivateStringField ());
+            Assert.AreEqual (newed_item.GetPrivateStringProperty (), loaded_item.GetPrivateStringProperty ());
+        }
+        
+        // Some fidelity is lost in the conversion from DT to DB time format
+        private void AssertArePrettyClose (DateTime time1, DateTime time2)
+        {
+            Assert.AreEqual (time1.Year, time2.Year);
+            Assert.AreEqual (time1.Month, time2.Month);
+            Assert.AreEqual (time1.Day, time2.Day);
+            Assert.AreEqual (time1.Hour, time2.Hour);
+            Assert.AreEqual (time1.Minute, time2.Minute);
+            Assert.AreEqual (time1.Second, time2.Second);
+        }
+        
+        [Test]
+        public void DateTimeMembers ()
+        {
+            DbBoundType newed_item = new DbBoundType ();
+            newed_item.PublicDateTimeField = DateTime.Now;
+            newed_item.PublicDateTimeProperty = new DateTime (1986, 4, 23);
+            newed_item.SetPrivateDateTimeField (DateTime.MinValue);
+            newed_item.SetPrivateDateTimeProperty (DateTime.Now);
+            
+            provider.Save (newed_item);
+            
+            string command = String.Format ("SELECT PrivateDateTimeField FROM {0} WHERE PrimaryKey = {1}", provider.TableName, newed_item.PrimaryKey);
+            
+            using (IDataReader reader = connection.Query (command)) {
+                reader.Read ();
+                Assert.IsTrue (reader.IsDBNull (0));
+            }
+            
+            DbBoundType loaded_item = provider.FetchSingle (newed_item.PrimaryKey);
+            AssertArePrettyClose (newed_item.PublicDateTimeField, loaded_item.PublicDateTimeField);
+            AssertArePrettyClose (newed_item.PublicDateTimeProperty, loaded_item.PublicDateTimeProperty);
+            AssertArePrettyClose (newed_item.GetPrivateDateTimeField (), loaded_item.GetPrivateDateTimeField ());
+            AssertArePrettyClose (newed_item.GetPrivateDateTimeProperty (), loaded_item.GetPrivateDateTimeProperty ());
+        }
+        
+        [Test]
+        public void TimeSpanMembers ()
+        {
+            DbBoundType newed_item = new DbBoundType ();
+            newed_item.PublicTimeSpanField = new TimeSpan (0, 0, 1);
+            newed_item.PublicTimeSpanProperty = new TimeSpan (1, 0, 0);
+            newed_item.SetPrivateTimeSpanField (new TimeSpan (1, 39, 12));
+            newed_item.SetPrivateTimeSpanProperty (TimeSpan.MinValue);
+            
+            provider.Save (newed_item);
+            
+            string command = String.Format ("SELECT PrivateTimeSpanProperty FROM {0} WHERE PrimaryKey = {1}", provider.TableName, newed_item.PrimaryKey);
+            using (IDataReader reader = connection.Query (command)) {
+                reader.Read ();
+                Assert.IsTrue (reader.IsDBNull (0));
+            }
+            
+            // NUnit boxes and uses reference equality, rather than Equals()
+            DbBoundType loaded_item = provider.FetchSingle (newed_item.PrimaryKey);
+            Assert.AreEqual (newed_item.PublicTimeSpanField, loaded_item.PublicTimeSpanField);
+            Assert.AreEqual (newed_item.PublicTimeSpanProperty, loaded_item.PublicTimeSpanProperty);
+            Assert.AreEqual (newed_item.GetPrivateTimeSpanField (), loaded_item.GetPrivateTimeSpanField ());
+            Assert.AreEqual (newed_item.GetPrivateTimeSpanProperty (), loaded_item.GetPrivateTimeSpanProperty ());
+        }
+        
+        [Test]
+        public void IntEnumMembers ()
+        {
+            DbBoundType newed_item = new DbBoundType ();
+            newed_item.PublicIntEnumField = IntEnum.Zero;
+            newed_item.PublicIntEnumProperty = IntEnum.One;
+            newed_item.SetPrivateIntEnumField (IntEnum.Two);
+            newed_item.SetPrivateIntEnumProperty (IntEnum.Three);
+            
+            provider.Save (newed_item);
+            
+            DbBoundType loaded_item = provider.FetchSingle (newed_item.PrimaryKey);
+            Assert.AreEqual (newed_item.PublicIntEnumField, loaded_item.PublicIntEnumField);
+            Assert.AreEqual (newed_item.PublicIntEnumProperty, loaded_item.PublicIntEnumProperty);
+            Assert.AreEqual (newed_item.GetPrivateIntEnumField (), loaded_item.GetPrivateIntEnumField ());
+            Assert.AreEqual (newed_item.GetPrivateIntEnumProperty (), loaded_item.GetPrivateIntEnumProperty ());
+        }
+        
+        [Test]
+        public void LongEnumMembers ()
+        {
+            DbBoundType newed_item = new DbBoundType ();
+            newed_item.PublicLongEnumField = LongEnum.Cero;
+            newed_item.PublicLongEnumProperty = LongEnum.Uno;
+            newed_item.SetPrivateLongEnumField (LongEnum.Dos);
+            newed_item.SetPrivateLongEnumProperty (LongEnum.Tres);
+            
+            provider.Save (newed_item);
+            
+            DbBoundType loaded_item = provider.FetchSingle (newed_item.PrimaryKey);
+            Assert.AreEqual (newed_item.PublicLongEnumField, loaded_item.PublicLongEnumField);
+            Assert.AreEqual (newed_item.PublicLongEnumProperty, loaded_item.PublicLongEnumProperty);
+            Assert.AreEqual (newed_item.GetPrivateLongEnumField (), loaded_item.GetPrivateLongEnumField ());
+            Assert.AreEqual (newed_item.GetPrivateLongEnumProperty (), loaded_item.GetPrivateLongEnumProperty ());
+        }
     }
 }
+
+#endif

Copied: trunk/banshee/src/Libraries/Hyena/Hyena.Query/Tests/QueryTests.cs (from r3928, /trunk/banshee/tests/Hyena/QueryTests.cs)
==============================================================================
--- /trunk/banshee/tests/Hyena/QueryTests.cs	(original)
+++ trunk/banshee/src/Libraries/Hyena/Hyena.Query/Tests/QueryTests.cs	Mon May 19 21:34:45 2008
@@ -26,99 +26,107 @@
 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 //
 
+#if ENABLE_TESTS
+
 using System;
 using System.Reflection;
 using NUnit.Framework;
 
 using Hyena.Query;
-using Banshee.Query;
 
-[TestFixture]
-public class QueryTests : BansheeTests
+namespace Hyena.Query.Tests
 {
-    [Test]
-    public void TestQueryValueSql ()
-    {
-        QueryValue qv;
-        
-        qv = new DateQueryValue (); qv.ParseUserQuery ("2007-03-9");
-        Assert.AreEqual (new DateTime (2007, 3, 9), qv.Value);
-        Assert.AreEqual ("2007-03-09", qv.ToUserQuery ());
-        Assert.AreEqual ("1173420000", qv.ToSql ());
-
-        qv = new StringQueryValue (); qv.ParseUserQuery ("foo 'bar'");
-        Assert.AreEqual ("foo 'bar'", qv.Value);
-        Assert.AreEqual ("foo 'bar'", qv.ToUserQuery ());
-        Assert.AreEqual ("foo ''bar''", qv.ToSql ());
-
-        qv = new IntegerQueryValue (); qv.ParseUserQuery ("22");
-        Assert.AreEqual (22, qv.Value);
-        Assert.AreEqual ("22", qv.ToUserQuery ());
-        Assert.AreEqual ("22", qv.ToSql ());
-
-        qv = new FileSizeQueryValue (); qv.ParseUserQuery ("2048 KB");
-        Assert.AreEqual (2097152, qv.Value);
-        Assert.AreEqual ("2.048 KB", qv.ToUserQuery ());
-        Assert.AreEqual ("2097152", qv.ToSql ());
-
-        // TODO this will break once an it_IT translation for "days ago" etc is committed
-        qv = new RelativeTimeSpanQueryValue (); qv.ParseUserQuery ("2 days ago");
-        Assert.AreEqual (-172800, qv.Value);
-        Assert.AreEqual ("2 days ago", qv.ToUserQuery ());
-
-        // TODO this will break once an it_IT translation for "minutes" etc is committed
-        qv = new TimeSpanQueryValue (); qv.ParseUserQuery ("4 minutes");
-        Assert.AreEqual (240, qv.Value);
-        Assert.AreEqual ("4 minutes", qv.ToUserQuery ());
-        Assert.AreEqual ("240000", qv.ToSql ());
-    }
-
-    [Test]
-    public void TestQueryParsing ()
-    {
-        string [] tests = new string [] {
-            "foo",
-            "foo bar",
-            "foo -bar",
-            "-foo -bar",
-            "-(foo bar)",
-            "-(foo or bar)",
-            "-(foo (-bar or baz))",
-            "-(foo (-bar or -baz))",
-            "artist:foo",
-            "-artist:foo",
-            "-artist!=foo",
-            "duration>\"2 minutes\"",
-            "rating>3",
-            "-rating>3",
-            "artist:baz -album:bar",
-            "artist:baz -album:bar",
-            "artist:baz (rating>3 or rating<2)",
-        };
-
-        AssertForEach<string> (tests, UserQueryParsesAndGenerates);
-    }
-
-    [Test]
-    public void TestCustomFormatParenthesisBugFixed ()
-    {
-        QueryValue val = new StringQueryValue ();
-        val.ParseUserQuery ("mp3");
-
-        Assert.AreEqual (
-            "(CoreTracks.MimeType LIKE '%mp3%' OR CoreTracks.Uri LIKE '%mp3%')",
-            BansheeQuery.MimeTypeField.ToSql (StringQueryValue.Contains, val)
-        );
-    }
-
-    private static void UserQueryParsesAndGenerates (string query)
+    [TestFixture]
+    public class QueryTests : Hyena.Tests.TestBase
     {
-        QueryNode node = UserQueryParser.Parse (query, BansheeQuery.FieldSet);
-        if (query == null || query.Trim () == String.Empty) {
-            Assert.AreEqual (node, null); 
-            return;
+        [Test]
+        public void QueryValueSql ()
+        {
+            QueryValue qv;
+            
+            qv = new DateQueryValue (); qv.ParseUserQuery ("2007-03-9");
+            Assert.AreEqual (new DateTime (2007, 3, 9), qv.Value);
+            Assert.AreEqual ("2007-03-09", qv.ToUserQuery ());
+            Assert.AreEqual ("1173420000", qv.ToSql ());
+    
+            qv = new StringQueryValue (); qv.ParseUserQuery ("foo 'bar'");
+            Assert.AreEqual ("foo 'bar'", qv.Value);
+            Assert.AreEqual ("foo 'bar'", qv.ToUserQuery ());
+            Assert.AreEqual ("foo ''bar''", qv.ToSql ());
+    
+            qv = new IntegerQueryValue (); qv.ParseUserQuery ("22");
+            Assert.AreEqual (22, qv.Value);
+            Assert.AreEqual ("22", qv.ToUserQuery ());
+            Assert.AreEqual ("22", qv.ToSql ());
+    
+            qv = new FileSizeQueryValue (); qv.ParseUserQuery ("2048 KB");
+            Assert.AreEqual (2097152, qv.Value);
+            Assert.AreEqual ("2.048 KB", qv.ToUserQuery ());
+            Assert.AreEqual ("2097152", qv.ToSql ());
+    
+            // TODO this will break once an it_IT translation for "days ago" etc is committed
+            qv = new RelativeTimeSpanQueryValue (); qv.ParseUserQuery ("2 days ago");
+            Assert.AreEqual (-172800, qv.Value);
+            Assert.AreEqual ("2 days ago", qv.ToUserQuery ());
+    
+            // TODO this will break once an it_IT translation for "minutes" etc is committed
+            qv = new TimeSpanQueryValue (); qv.ParseUserQuery ("4 minutes");
+            Assert.AreEqual (240, qv.Value);
+            Assert.AreEqual ("4 minutes", qv.ToUserQuery ());
+            Assert.AreEqual ("240000", qv.ToSql ());
+        }
+    
+        [Test]
+        public void QueryParsing ()
+        {
+            string [] tests = new string [] {
+                "foo",
+                "foo bar",
+                "foo -bar",
+                "-foo -bar",
+                "-(foo bar)",
+                "-(foo or bar)",
+                "-(foo (-bar or baz))",
+                "-(foo (-bar or -baz))",
+                "artist:foo",
+                "-artist:foo",
+                "-artist!=foo",
+                "duration>\"2 minutes\"",
+                "rating>3",
+                "-rating>3",
+                "artist:baz -album:bar",
+                "artist:baz -album:bar",
+                "artist:baz (rating>3 or rating<2)",
+            };
+    
+            AssertForEach<string> (tests, UserQueryParsesAndGenerates);
+        }
+    
+        [Test]
+        public void CustomFormatParenthesisBugFixed ()
+        {
+            Assert.Fail ("gabe is lame and should fix this. kthx, --aaron");
+            /*QueryValue val = new StringQueryValue ();
+            val.ParseUserQuery ("mp3");
+    
+            Assert.AreEqual (
+                "(CoreTracks.MimeType LIKE '%mp3%' OR CoreTracks.Uri LIKE '%mp3%')",
+                BansheeQuery.MimeTypeField.ToSql (StringQueryValue.Contains, val)
+            );*/
+        }
+    
+        private static void UserQueryParsesAndGenerates (string query)
+        {
+            Assert.Fail ("gabe is lame and should fix this. kthx, --aaron");
+            /*QueryNode node = UserQueryParser.Parse (query, BansheeQuery.FieldSet);
+            if (query == null || query.Trim () == String.Empty) {
+                Assert.AreEqual (node, null); 
+                return;
+            }
+    
+            Assert.AreEqual (query, node.ToUserQuery ());*/
         }
-
-        Assert.AreEqual (query, node.ToUserQuery ());
     }
 }
+
+#endif

Modified: trunk/banshee/src/Libraries/Hyena/Hyena.mdp
==============================================================================
--- trunk/banshee/src/Libraries/Hyena/Hyena.mdp	(original)
+++ trunk/banshee/src/Libraries/Hyena/Hyena.mdp	Mon May 19 21:34:45 2008
@@ -87,11 +87,21 @@
     <File name="Hyena.Query/NullQueryValue.cs" subtype="Code" buildaction="Compile" />
     <File name="Hyena.Query/RelativeTimeSpanQueryValue.cs" subtype="Code" buildaction="Compile" />
     <File name="Hyena.Query/TimeSpanQueryValue.cs" subtype="Code" buildaction="Compile" />
+    <File name="Hyena.Collections/Tests/IntervalHeapTests.cs" subtype="Code" buildaction="Compile" />
+    <File name="Hyena.Collections/Tests/RangeCollectionTests.cs" subtype="Code" buildaction="Compile" />
+    <File name="Hyena.Data.Sqlite/Tests/DbBoundType.cs" subtype="Code" buildaction="Compile" />
+    <File name="Hyena.Data.Sqlite/Tests/SqliteCommandTests.cs" subtype="Code" buildaction="Compile" />
+    <File name="Hyena.Data.Sqlite/Tests/SqliteModelProviderTests.cs" subtype="Code" buildaction="Compile" />
+    <File name="Hyena.Query/Tests/QueryTests.cs" subtype="Code" buildaction="Compile" />
+    <File name="Hyena/Tests/CryptoUtilTests.cs" subtype="Code" buildaction="Compile" />
+    <File name="Hyena/Tests/StringUtilTests.cs" subtype="Code" buildaction="Compile" />
+    <File name="Hyena/Tests/TestBase.cs" subtype="Code" buildaction="Compile" />
   </Contents>
   <References>
     <ProjectReference type="Gac" localcopy="True" refto="System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
     <ProjectReference type="Gac" localcopy="True" refto="System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
     <ProjectReference type="Gac" localcopy="True" refto="Mono.Data.Sqlite, Version=2.0.0.0, Culture=neutral, PublicKeyToken=0738eb9f132ed756" />
+    <ProjectReference type="Gac" localcopy="True" refto="nunit.core, Version=2.2.0.0, Culture=neutral, PublicKeyToken=96d09a1eb7f44a77" />
   </References>
   <Deployment.LinuxDeployData generateScript="False" />
   <MonoDevelop.Autotools.MakefileInfo IntegrationEnabled="True" RelativeMakefileName="Makefile.am">

Copied: trunk/banshee/src/Libraries/Hyena/Hyena/Tests/CryptoUtilTests.cs (from r3928, /trunk/banshee/tests/Hyena/CryptoUtilTests.cs)
==============================================================================
--- /trunk/banshee/tests/Hyena/CryptoUtilTests.cs	(original)
+++ trunk/banshee/src/Libraries/Hyena/Hyena/Tests/CryptoUtilTests.cs	Mon May 19 21:34:45 2008
@@ -26,26 +26,32 @@
 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 //
 
+#if ENABLE_TESTS
+
 using System;
 using NUnit.Framework;
 using Hyena;
 
-[TestFixture]
-public class CryptoUtilTests
+namespace Hyena.Tests
 {
-    [Test]
-    public void Md5Encode ()
-    {
-        Assert.AreEqual ("ae2b1fca515949e5d54fb22b8ed95575", CryptoUtil.Md5Encode ("testing"));
-    }
-
-    [Test]
-    public void IsMd5Encoded ()
+    [TestFixture]
+    internal class CryptoUtilTests
     {
-        Assert.IsTrue (CryptoUtil.IsMd5Encoded ("ae2b1fca515949e5d54fb22b8ed95575"));
-        Assert.IsFalse (CryptoUtil.IsMd5Encoded ("abc233"));
-        Assert.IsFalse (CryptoUtil.IsMd5Encoded ("lebowski"));
-        Assert.IsFalse (CryptoUtil.IsMd5Encoded ("ae2b1fca515949e5g54fb22b8ed95575"));
+        [Test]
+        public void Md5Encode ()
+        {
+            Assert.AreEqual ("ae2b1fca515949e5d54fb22b8ed95575", CryptoUtil.Md5Encode ("testing"));
+        }
+    
+        [Test]
+        public void IsMd5Encoded ()
+        {
+            Assert.IsTrue (CryptoUtil.IsMd5Encoded ("ae2b1fca515949e5d54fb22b8ed95575"));
+            Assert.IsFalse (CryptoUtil.IsMd5Encoded ("abc233"));
+            Assert.IsFalse (CryptoUtil.IsMd5Encoded ("lebowski"));
+            Assert.IsFalse (CryptoUtil.IsMd5Encoded ("ae2b1fca515949e5g54fb22b8ed95575"));
+        }
     }
 }
 
+#endif

Copied: trunk/banshee/src/Libraries/Hyena/Hyena/Tests/StringUtilTests.cs (from r3928, /trunk/banshee/tests/Hyena/StringUtilTests.cs)
==============================================================================
--- /trunk/banshee/tests/Hyena/StringUtilTests.cs	(original)
+++ trunk/banshee/src/Libraries/Hyena/Hyena/Tests/StringUtilTests.cs	Mon May 19 21:34:45 2008
@@ -27,92 +27,99 @@
 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 //
 
+#if ENABLE_TESTS
+
 using System;
 using NUnit.Framework;
 using Hyena;
-
-[TestFixture]
-public class StringUtilTests
+    
+namespace Hyena.Tests
 {
-    private class Map
+    [TestFixture]
+    public class StringUtilTests
     {
-        public Map (string camel, string under)
+        private class Map
         {
-            Camel = camel;
-            Under = under;
+            public Map (string camel, string under)
+            {
+                Camel = camel;
+                Under = under;
+            }
+    
+            public string Camel;
+            public string Under;
         }
-
-        public string Camel;
-        public string Under;
-    }
-
-    private Map [] u_to_c_maps = new Map [] {
-        new Map ("Hello", "hello"),
-        new Map ("HelloWorld", "hello_world"),
-        new Map ("HelloWorld", "hello__world"),
-        new Map ("HelloWorld", "hello___world"),
-        new Map ("HelloWorld", "hello____world"),
-        new Map ("HelloWorld", "_hello_world"),
-        new Map ("HelloWorld", "__hello__world"),
-        new Map ("HelloWorld", "___hello_world_"),
-        new Map ("HelloWorldHowAreYou", "_hello_World_HOW_ARE__YOU__"),
-        new Map (null, ""),
-        new Map ("H", "h")
-    };
-
-    [Test]
-    public void TestUnderCaseToCamelCase ()
-    {
-        foreach (Map map in u_to_c_maps) {
-            Assert.AreEqual (map.Camel, StringUtil.UnderCaseToCamelCase (map.Under));
+    
+        private Map [] u_to_c_maps = new Map [] {
+            new Map ("Hello", "hello"),
+            new Map ("HelloWorld", "hello_world"),
+            new Map ("HelloWorld", "hello__world"),
+            new Map ("HelloWorld", "hello___world"),
+            new Map ("HelloWorld", "hello____world"),
+            new Map ("HelloWorld", "_hello_world"),
+            new Map ("HelloWorld", "__hello__world"),
+            new Map ("HelloWorld", "___hello_world_"),
+            new Map ("HelloWorldHowAreYou", "_hello_World_HOW_ARE__YOU__"),
+            new Map (null, ""),
+            new Map ("H", "h")
+        };
+    
+        [Test]
+        public void UnderCaseToCamelCase ()
+        {
+            foreach (Map map in u_to_c_maps) {
+                Assert.AreEqual (map.Camel, StringUtil.UnderCaseToCamelCase (map.Under));
+            }
         }
-    }
-
-    private Map [] c_to_u_maps = new Map [] {
-        new Map ("Hello", "hello"),
-        new Map ("HelloWorld", "hello_world"),
-        new Map ("HiWorldHowAreYouDoingToday", "hi_world_how_are_you_doing_today"),
-        new Map ("SRSLYHowAreYou", "srsly_how_are_you"),
-        new Map ("OMGThisShitIsBananas", "omg_this_shit_is_bananas"),
-        new Map ("KTHXBAI", "kthxbai"),
-        new Map ("nereid.track_view_columns.MusicLibrarySource-Library/composer", "nereid.track_view_columns._music_library_source_-_library/composer"),
-        new Map ("", null),
-        new Map ("H", "h")
-    };
-
-    [Test]
-    public void TestCamelCaseToUnderCase ()
-    {
-        foreach (Map map in c_to_u_maps) {
-            Assert.AreEqual (map.Under, StringUtil.CamelCaseToUnderCase (map.Camel));
+    
+        private Map [] c_to_u_maps = new Map [] {
+            new Map ("Hello", "hello"),
+            new Map ("HelloWorld", "hello_world"),
+            new Map ("HiWorldHowAreYouDoingToday", "hi_world_how_are_you_doing_today"),
+            new Map ("SRSLYHowAreYou", "srsly_how_are_you"),
+            new Map ("OMGThisShitIsBananas", "omg_this_shit_is_bananas"),
+            new Map ("KTHXBAI", "kthxbai"),
+            new Map ("nereid.track_view_columns.MusicLibrarySource-Library/composer", "nereid.track_view_columns._music_library_source_-_library/composer"),
+            new Map ("", null),
+            new Map ("H", "h")
+        };
+    
+        [Test]
+        public void CamelCaseToUnderCase ()
+        {
+            foreach (Map map in c_to_u_maps) {
+                Assert.AreEqual (map.Under, StringUtil.CamelCaseToUnderCase (map.Camel));
+            }
+        }
+    
+        [Test]
+        public void DoubleToTenthsPrecision ()
+        {
+            // Note we are testing with locale = it_IT, hence the commas
+            Assert.AreEqual ("15",      StringUtil.DoubleToTenthsPrecision (15.0));
+            Assert.AreEqual ("15",      StringUtil.DoubleToTenthsPrecision (15.0334));
+            Assert.AreEqual ("15,1",    StringUtil.DoubleToTenthsPrecision (15.052));
+            Assert.AreEqual ("15,5",    StringUtil.DoubleToTenthsPrecision (15.5234));
+            Assert.AreEqual ("15",      StringUtil.DoubleToTenthsPrecision (14.9734));
+            Assert.AreEqual ("14,9",    StringUtil.DoubleToTenthsPrecision (14.92));
+            Assert.AreEqual ("0,4",     StringUtil.DoubleToTenthsPrecision (0.421));
+            Assert.AreEqual ("0",       StringUtil.DoubleToTenthsPrecision (0.01));
+            Assert.AreEqual ("1.000,3", StringUtil.DoubleToTenthsPrecision (1000.32));
+            Assert.AreEqual ("9.233",   StringUtil.DoubleToTenthsPrecision (9233));
+        }
+    
+        [Test]
+        public void DoubleToPluralInt ()
+        {
+            // This method helps us pluralize doubles. Probably a horrible i18n idea.
+            Assert.AreEqual (0,     StringUtil.DoubleToPluralInt (0));
+            Assert.AreEqual (1,     StringUtil.DoubleToPluralInt (1));
+            Assert.AreEqual (2,     StringUtil.DoubleToPluralInt (2));
+            Assert.AreEqual (1,     StringUtil.DoubleToPluralInt (0.5));
+            Assert.AreEqual (2,     StringUtil.DoubleToPluralInt (1.8));
+            Assert.AreEqual (22,    StringUtil.DoubleToPluralInt (21.3));
         }
-    }
-
-    [Test]
-    public void TestDoubleToTenthsPrecision ()
-    {
-        // Note we are testing with locale = it_IT, hence the commas
-        Assert.AreEqual ("15",      StringUtil.DoubleToTenthsPrecision (15.0));
-        Assert.AreEqual ("15",      StringUtil.DoubleToTenthsPrecision (15.0334));
-        Assert.AreEqual ("15,1",    StringUtil.DoubleToTenthsPrecision (15.052));
-        Assert.AreEqual ("15,5",    StringUtil.DoubleToTenthsPrecision (15.5234));
-        Assert.AreEqual ("15",      StringUtil.DoubleToTenthsPrecision (14.9734));
-        Assert.AreEqual ("14,9",    StringUtil.DoubleToTenthsPrecision (14.92));
-        Assert.AreEqual ("0,4",     StringUtil.DoubleToTenthsPrecision (0.421));
-        Assert.AreEqual ("0",       StringUtil.DoubleToTenthsPrecision (0.01));
-        Assert.AreEqual ("1.000,3", StringUtil.DoubleToTenthsPrecision (1000.32));
-        Assert.AreEqual ("9.233",   StringUtil.DoubleToTenthsPrecision (9233));
-    }
-
-    [Test]
-    public void TestDoubleToPluralInt ()
-    {
-        // This method helps us pluralize doubles. Probably a horrible i18n idea.
-        Assert.AreEqual (0,     StringUtil.DoubleToPluralInt (0));
-        Assert.AreEqual (1,     StringUtil.DoubleToPluralInt (1));
-        Assert.AreEqual (2,     StringUtil.DoubleToPluralInt (2));
-        Assert.AreEqual (1,     StringUtil.DoubleToPluralInt (0.5));
-        Assert.AreEqual (2,     StringUtil.DoubleToPluralInt (1.8));
-        Assert.AreEqual (22,    StringUtil.DoubleToPluralInt (21.3));
     }
 }
+
+#endif

Added: trunk/banshee/src/Libraries/Hyena/Hyena/Tests/TestBase.cs
==============================================================================
--- (empty file)
+++ trunk/banshee/src/Libraries/Hyena/Hyena/Tests/TestBase.cs	Mon May 19 21:34:45 2008
@@ -0,0 +1,101 @@
+//
+// BansheeTests.cs
+//
+// Author:
+//   Gabriel Burt <gburt novell com>
+//
+// Copyright (C) 2008 Novell, Inc.
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+#if ENABLE_TESTS
+
+using System;
+using System.IO;
+using System.Collections.Generic;
+using System.Reflection;
+using System.Threading;
+
+using NUnit.Framework;
+
+using Hyena;
+
+namespace Hyena.Tests
+{
+    public struct TransformPair<F, T>
+    {
+        public F From;
+        public T To;
+    
+        public TransformPair (F from, T to)
+        {
+            From = from;
+            To = to;
+        }
+    
+        public static TransformPair<F, T> [] GetFrom (params object [] objects)
+        {
+            TransformPair<F, T> [] pairs = new TransformPair<F, T> [objects.Length / 2];
+            for (int i = 0; i < objects.Length; i += 2) {
+                pairs[i/2] = new TransformPair<F, T> ((F)objects[i], (T)objects[i+1]);
+            }
+            return pairs;
+        }
+    
+        public override string ToString ()
+        {
+            return From.ToString ();
+        }
+    }
+    
+    public delegate To Transform<F, To> (F from);
+    
+    public abstract class TestBase
+    {
+        private string bin_dir;
+        public string BinDir {
+            get { return bin_dir ?? (bin_dir = Path.GetDirectoryName (Assembly.GetExecutingAssembly ().Location)); }
+        }
+    
+        public static void AssertForEach<T> (IEnumerable<T> objects, Action<T> runner)
+        {
+            System.Text.StringBuilder sb = new System.Text.StringBuilder ();
+            foreach (T o in objects) {
+                try { runner (o); }
+                catch (AssertionException e) { sb.AppendFormat ("Failed assertion on {0}: {1}\n", o, e.Message); }
+                catch (Exception e) { sb.AppendFormat ("\nCaught exception on {0}: {1}\n", o, e.ToString ()); }
+            }
+    
+            if (sb.Length > 0)
+                Assert.Fail ("\n" + sb.ToString ());
+        }
+    
+        // Fails to compile, causes SIGABRT in gmcs; boo
+        /*public static void AssertTransformsEach<A, B> (IEnumerable<TransformPair<A, B>> pairs, Transform<A, B> transform)
+        {
+            AssertForEach (pairs, delegate (TransformPair<A, B> pair) {
+                Assert.AreEqual (pair.To, transform (pair.From));
+            });
+        }*/
+    }
+}
+
+#endif

Modified: trunk/banshee/src/Libraries/Hyena/Makefile.am
==============================================================================
--- trunk/banshee/src/Libraries/Hyena/Makefile.am	(original)
+++ trunk/banshee/src/Libraries/Hyena/Makefile.am	Mon May 19 21:34:45 2008
@@ -7,6 +7,8 @@
 	Hyena.Collections/RangeCollection.cs \
 	Hyena.Collections/Selection.cs \
 	Hyena.Collections/SelectionProxy.cs \
+	Hyena.Collections/Tests/IntervalHeapTests.cs \
+	Hyena.Collections/Tests/RangeCollectionTests.cs \
 	Hyena.CommandLine/CommandLineParser.cs \
 	Hyena.CommandLine/Layout.cs \
 	Hyena.CommandLine/LayoutGroup.cs \
@@ -20,6 +22,9 @@
 	Hyena.Data.Sqlite/SqliteModelCache.cs \
 	Hyena.Data.Sqlite/SqliteModelProvider.cs \
 	Hyena.Data.Sqlite/SqliteUtils.cs \
+	Hyena.Data.Sqlite/Tests/DbBoundType.cs \
+	Hyena.Data.Sqlite/Tests/SqliteCommandTests.cs \
+	Hyena.Data.Sqlite/Tests/SqliteModelProviderTests.cs \
 	Hyena.Data/ArrayModelCache.cs \
 	Hyena.Data/ColumnDescription.cs \
 	Hyena.Data/DictionaryModelCache.cs \
@@ -54,6 +59,7 @@
 	Hyena.Query/QueryValue.cs \
 	Hyena.Query/RelativeTimeSpanQueryValue.cs \
 	Hyena.Query/StringQueryValue.cs \
+	Hyena.Query/Tests/QueryTests.cs \
 	Hyena.Query/TimeSpanQueryValue.cs \
 	Hyena.Query/UserQueryParser.cs \
 	Hyena.Query/XmlQueryParser.cs \
@@ -79,6 +85,9 @@
 	Hyena/IUndoAction.cs \
 	Hyena/Log.cs \
 	Hyena/StringUtil.cs \
+	Hyena/Tests/CryptoUtilTests.cs \
+	Hyena/Tests/StringUtilTests.cs \
+	Hyena/Tests/TestBase.cs \
 	Hyena/Timer.cs \
 	Hyena/UndoManager.cs
 

Modified: trunk/banshee/src/Libraries/Migo/Makefile.am
==============================================================================
--- trunk/banshee/src/Libraries/Migo/Makefile.am	(original)
+++ trunk/banshee/src/Libraries/Migo/Makefile.am	Mon May 19 21:34:45 2008
@@ -40,6 +40,7 @@
 	Migo/Migo.Syndication/OpmlParser.cs \
 	Migo/Migo.Syndication/Rfc822DateTime.cs \
 	Migo/Migo.Syndication/RssParser.cs \
+	Migo/Migo.Syndication/Tests/XmlTests.cs \
 	Migo/Migo.Syndication/XmlUtils.cs \
 	Migo/Migo.TaskCore/AsyncCommandQueue/AsyncCommandQueue.cs \
 	Migo/Migo.TaskCore/AsyncCommandQueue/CommandDelegate.cs \

Modified: trunk/banshee/src/Libraries/Migo/Migo.mdp
==============================================================================
--- trunk/banshee/src/Libraries/Migo/Migo.mdp	(original)
+++ trunk/banshee/src/Libraries/Migo/Migo.mdp	Mon May 19 21:34:45 2008
@@ -74,6 +74,8 @@
     <File name="Migo/Migo.Syndication/MigoItem.cs" subtype="Code" buildaction="Compile" />
     <File name="Migo/Migo.Syndication/MigoModelProvider.cs" subtype="Code" buildaction="Compile" />
     <File name="Migo/Migo.Syndication/OpmlParser.cs" subtype="Code" buildaction="Compile" />
+    <File name="Migo/Migo.Syndication/Tests" subtype="Directory" buildaction="Compile" />
+    <File name="Migo/Migo.Syndication/Tests/XmlTests.cs" subtype="Code" buildaction="Compile" />
   </Contents>
   <References>
     <ProjectReference type="Gac" localcopy="True" refto="System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />

Copied: trunk/banshee/src/Libraries/Migo/Migo/Migo.Syndication/Tests/XmlTests.cs (from r3928, /trunk/banshee/tests/Migo/XmlTests.cs)
==============================================================================
--- /trunk/banshee/tests/Migo/XmlTests.cs	(original)
+++ trunk/banshee/src/Libraries/Migo/Migo/Migo.Syndication/Tests/XmlTests.cs	Mon May 19 21:34:45 2008
@@ -26,54 +26,63 @@
 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 //
 
+#if ENABLE_TESTS
+
 using System;
 using NUnit.Framework;
 
 using Migo.Syndication;
 
-[TestFixture]
-public class XmlTests : BansheeTests
-{
-    [Test]
-    public void TestParseDates ()
-    {
-        TransformPair<string, DateTime> [] pairs = TransformPair<string, DateTime>.GetFrom (
-            "Fri, 22 Feb 2008 16:00:00 EST",        DateTime.Parse ("22/02/2008 5.00.00"),
-            "Fri, 15 Feb 2008 4:10:00 EST",         DateTime.Parse ("14/02/2008 17.10.00"),
-            "Tue, 08 Apr 2008 03:37:04 -0400",      DateTime.Parse ("07/04/2008 18.37.04"),
-            "Tue, 26 Feb 2008 03:28:51 -0500",      DateTime.Parse ("25/02/2008 16.28.51"),
-            "Sun, 11 May 2008 01:33:26 -0400",      DateTime.Parse ("10/05/2008 16.33.26"),
-            "Fri, 16 May 2008 16:09:10 -0500",      DateTime.Parse ("16/05/2008 6.09.10"),
-            "Fri, 14 Mar 2008 13:44:53 -0500",      DateTime.Parse ("14/03/2008 3.44.53"),
-            "Fri, 07 December 2007 17:00:00 EST",   DateTime.Parse ("07/12/2007 6.00.00"),
-            "Sat, 08 Mar 2008 12:00:00 EST",        DateTime.Parse ("08/03/2008 1.00.00"),
-            "Sat, 17 May 2008 20:47:57 +0000",      DateTime.Parse ("17/05/2008 15.47.57"),
-            "Sat, 17 May 2008 19:33:42 +0000",      DateTime.Parse ("17/05/2008 14.33.42")
-        );
-
-        AssertForEach (pairs, delegate (TransformPair<string, DateTime> pair) {
-            Assert.AreEqual (pair.To, Rfc822DateTime.Parse (pair.From));
-        });
-    }
+using Hyena.Tests;
 
-    [Test]
-    public void TestParseITunesDuration ()
+namespace Migo.Syndication.Tests
+{
+    [TestFixture]
+    public class XmlTests : TestBase
     {
-        TransformPair<string, TimeSpan> [] pairs = TransformPair<string, TimeSpan>.GetFrom (
-            null,      TimeSpan.Zero,
-            "",        TimeSpan.Zero,
-            "0",       TimeSpan.Zero,
-            "0:0",     TimeSpan.Zero,
-            "0:0:0",   TimeSpan.Zero,
-            "1:0:0",   new TimeSpan (1, 0, 0),
-            "363",     new TimeSpan (0, 0, 363),
-            "2:45",    new TimeSpan (0, 2, 45),
-            "1:02:22", new TimeSpan (1, 2, 22),
-            "9:0:0",   new TimeSpan (9, 0, 0)
-        );
-
-        AssertForEach (pairs, delegate (TransformPair<string, TimeSpan> pair) {
-            Assert.AreEqual (pair.To, XmlUtils.GetITunesDuration (pair.From));
-        });
+        [Test]
+        public void TestParseDates ()
+        {
+            TransformPair<string, DateTime> [] pairs = TransformPair<string, DateTime>.GetFrom (
+                "Fri, 22 Feb 2008 16:00:00 EST",        DateTime.Parse ("22/02/2008 5.00.00"),
+                "Fri, 15 Feb 2008 4:10:00 EST",         DateTime.Parse ("14/02/2008 17.10.00"),
+                "Tue, 08 Apr 2008 03:37:04 -0400",      DateTime.Parse ("07/04/2008 18.37.04"),
+                "Tue, 26 Feb 2008 03:28:51 -0500",      DateTime.Parse ("25/02/2008 16.28.51"),
+                "Sun, 11 May 2008 01:33:26 -0400",      DateTime.Parse ("10/05/2008 16.33.26"),
+                "Fri, 16 May 2008 16:09:10 -0500",      DateTime.Parse ("16/05/2008 6.09.10"),
+                "Fri, 14 Mar 2008 13:44:53 -0500",      DateTime.Parse ("14/03/2008 3.44.53"),
+                "Fri, 07 December 2007 17:00:00 EST",   DateTime.Parse ("07/12/2007 6.00.00"),
+                "Sat, 08 Mar 2008 12:00:00 EST",        DateTime.Parse ("08/03/2008 1.00.00"),
+                "Sat, 17 May 2008 20:47:57 +0000",      DateTime.Parse ("17/05/2008 15.47.57"),
+                "Sat, 17 May 2008 19:33:42 +0000",      DateTime.Parse ("17/05/2008 14.33.42")
+            );
+    
+            AssertForEach (pairs, delegate (TransformPair<string, DateTime> pair) {
+                Assert.AreEqual (pair.To, Rfc822DateTime.Parse (pair.From));
+            });
+        }
+    
+        [Test]
+        public void TestParseITunesDuration ()
+        {
+            TransformPair<string, TimeSpan> [] pairs = TransformPair<string, TimeSpan>.GetFrom (
+                null,      TimeSpan.Zero,
+                "",        TimeSpan.Zero,
+                "0",       TimeSpan.Zero,
+                "0:0",     TimeSpan.Zero,
+                "0:0:0",   TimeSpan.Zero,
+                "1:0:0",   new TimeSpan (1, 0, 0),
+                "363",     new TimeSpan (0, 0, 363),
+                "2:45",    new TimeSpan (0, 2, 45),
+                "1:02:22", new TimeSpan (1, 2, 22),
+                "9:0:0",   new TimeSpan (9, 0, 0)
+            );
+    
+            AssertForEach (pairs, delegate (TransformPair<string, TimeSpan> pair) {
+                Assert.AreEqual (pair.To, XmlUtils.GetITunesDuration (pair.From));
+            });
+        }
     }
 }
+
+#endif

Copied: trunk/banshee/src/Libraries/Mono.Media/Media.Playlists.Xspf/Tests/XspfTests.cs (from r3928, /trunk/banshee/tests/Banshee.Services/Xspf/Xspf.cs)
==============================================================================
--- /trunk/banshee/tests/Banshee.Services/Xspf/Xspf.cs	(original)
+++ trunk/banshee/src/Libraries/Mono.Media/Media.Playlists.Xspf/Tests/XspfTests.cs	Mon May 19 21:34:45 2008
@@ -1,93 +1,124 @@
+//
+// XspfTests.cs
+//
+// Author:
+//   Aaron Bockover <abockover novell com>
+//
+// Copyright (C) 2006 Novell, Inc.
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+#if ENABLE_TESTS
+
 using System;
 using System.IO;
 using System.Xml;
 using System.Xml.Schema;
 using NUnit.Framework;
 
-using Banshee.Playlists.Formats.Xspf;
+using Media.Playlists.Xspf;
 
-namespace Banshee.Playlists.Formats.Xspf.Tests
+namespace Media.Playlists.Xspf.Tests
 {
-	[TestFixture]
-	public class XspfTest
-	{
-        private const string complete_path = "Banshee.Services/Xspf/complete.xml";
-        private const string xsd_path = "Banshee.Services/Xspf/xspf-1.xsd";
-
-		[Test]
-		public void Load()
-		{
-			Playlist playlist = new Playlist();
-			playlist.Load(complete_path);
-			Helper.TestPlaylist(playlist);
-		}
-
-		[Test]
-		public void Validate()
-		{
-			XmlReaderSettings settings = new XmlReaderSettings();
-			settings.ValidationType = ValidationType.Schema;
-			XmlSchemaSet schema_set = new XmlSchemaSet();
-			schema_set.Add("http://xspf.org/ns/0/";, xsd_path);
-			settings.Schemas.Add(schema_set);
-			settings.ValidationFlags |= XmlSchemaValidationFlags.ReportValidationWarnings;
-			XmlReader reader = XmlReader.Create(complete_path, settings);
-			while(reader.Read());
-		}
-	}
-
-	public static class Helper
-	{
-		public static void TestPlaylist(Playlist playlist)
-		{
-			Assert.AreEqual("Playlist Title", playlist.Title);
-			Assert.AreEqual("Aaron Bockover", playlist.Creator);
-			Assert.AreEqual("Comment", playlist.Annotation);
-
-			Uri uri = new Uri("http://abock.org/";);
-
-			Assert.AreEqual(uri, playlist.Location);
-			Assert.AreEqual(uri, playlist.Identifier);
-			Assert.AreEqual(uri, playlist.Image);
-			Assert.AreEqual(uri, playlist.License);
-
-			Assert.AreEqual(W3CDateTime.Parse("2005-01-08T17:10:47-05:00").LocalTime, playlist.Date);
-
-			Assert.AreEqual(2, playlist.Meta.Count);
-			foreach(MetaEntry meta in playlist.Meta) {
-				Assert.AreEqual(new Uri("http://abock.org/fruit";), meta.Rel);
-				if(meta.Value != "Apples" && meta.Value != "Oranges") {
-					Assert.Fail("Expected one of 'Apples' or 'Oranges'");
-				}
-			}
-
-			Assert.AreEqual(2, playlist.Links.Count);
-			foreach(LinkEntry link in playlist.Links) {
-				if(!link.Rel.AbsoluteUri.StartsWith("http://abock.org";)) {
-					Assert.Fail("Incorrect rel, expected it to start with http://abock.org";);
-				}
-
-				if(!link.Value.AbsoluteUri.StartsWith("http://abock.org";)) {
-					Assert.Fail("Incorrect content, expected it to start with http://abock.org";);
-				}
-			}
-
-			Assert.AreEqual(1, playlist.Tracks.Count);
-
-			Track track = playlist.Tracks[0];
-			Assert.AreEqual("Track 1", track.Title);
-			Assert.AreEqual("Aaron Bockover", track.Creator);
-			Assert.AreEqual("Comment", track.Annotation);
-			Assert.AreEqual("Album", track.Album);
-
-			Assert.AreEqual(uri, track.Info);
-			Assert.AreEqual(uri, track.Image);
-			
-			Assert.AreEqual(11, track.TrackNumber);
-			Assert.AreEqual(TimeSpan.FromMilliseconds(5159), track.Duration);
-
-			Assert.AreEqual(2, track.Locations.Count);
-		}
-	}
+    [TestFixture]
+    public class XspfTest
+    {
+        private const string complete_path = "../tests/Mono.Media/Xspf/complete.xml";
+        private const string xsd_path = "../tests/Mono.Media/Xspf/xspf-1.xsd";
+
+        [Test]
+        public void Load()
+        {
+            Playlist playlist = new Playlist();
+            playlist.Load(complete_path);
+            Helper.TestPlaylist(playlist);
+        }
+
+        [Test]
+        public void Validate()
+        {
+            XmlReaderSettings settings = new XmlReaderSettings();
+            settings.ValidationType = ValidationType.Schema;
+            XmlSchemaSet schema_set = new XmlSchemaSet();
+            schema_set.Add("http://xspf.org/ns/0/";, xsd_path);
+            settings.Schemas.Add(schema_set);
+            settings.ValidationFlags |= XmlSchemaValidationFlags.ReportValidationWarnings;
+            XmlReader reader = XmlReader.Create(complete_path, settings);
+            while(reader.Read());
+        }
+    }
+
+    public static class Helper
+    {
+        public static void TestPlaylist(Playlist playlist)
+        {
+            Assert.AreEqual("Playlist Title", playlist.Title);
+            Assert.AreEqual("Aaron Bockover", playlist.Creator);
+            Assert.AreEqual("Comment", playlist.Annotation);
+
+            Uri uri = new Uri("http://abock.org/";);
+
+            Assert.AreEqual(uri, playlist.Location);
+            Assert.AreEqual(uri, playlist.Identifier);
+            Assert.AreEqual(uri, playlist.Image);
+            Assert.AreEqual(uri, playlist.License);
+
+            Assert.AreEqual(W3CDateTime.Parse("2005-01-08T17:10:47-05:00").LocalTime, playlist.Date);
+
+            Assert.AreEqual(2, playlist.Meta.Count);
+            foreach(MetaEntry meta in playlist.Meta) {
+                Assert.AreEqual(new Uri("http://abock.org/fruit";), meta.Rel);
+                if(meta.Value != "Apples" && meta.Value != "Oranges") {
+                    Assert.Fail("Expected one of 'Apples' or 'Oranges'");
+                }
+            }
+
+            Assert.AreEqual(2, playlist.Links.Count);
+            foreach(LinkEntry link in playlist.Links) {
+                if(!link.Rel.AbsoluteUri.StartsWith("http://abock.org";)) {
+                    Assert.Fail("Incorrect rel, expected it to start with http://abock.org";);
+                }
+
+                if(!link.Value.AbsoluteUri.StartsWith("http://abock.org";)) {
+                    Assert.Fail("Incorrect content, expected it to start with http://abock.org";);
+                }
+            }
+
+            Assert.AreEqual(1, playlist.Tracks.Count);
+
+            Track track = playlist.Tracks[0];
+            Assert.AreEqual("Track 1", track.Title);
+            Assert.AreEqual("Aaron Bockover", track.Creator);
+            Assert.AreEqual("Comment", track.Annotation);
+            Assert.AreEqual("Album", track.Album);
+
+            Assert.AreEqual(uri, track.Info);
+            Assert.AreEqual(uri, track.Image);
+            
+            Assert.AreEqual(11, track.TrackNumber);
+            Assert.AreEqual(TimeSpan.FromMilliseconds(5159), track.Duration);
+
+            Assert.AreEqual(2, track.Locations.Count);
+        }
+    }
 }
 
+#endif

Modified: trunk/banshee/src/Libraries/Mono.Media/Mono.Media.mdp
==============================================================================
--- trunk/banshee/src/Libraries/Mono.Media/Mono.Media.mdp	(original)
+++ trunk/banshee/src/Libraries/Mono.Media/Mono.Media.mdp	Mon May 19 21:34:45 2008
@@ -15,6 +15,8 @@
     <File name="Media.Playlists.Xspf/W3CDateTime.cs" subtype="Code" buildaction="Compile" />
     <File name="Media.Playlists.Xspf/XmlUtil.cs" subtype="Code" buildaction="Compile" />
     <File name="Media.Playlists.Xspf/XspfBaseObject.cs" subtype="Code" buildaction="Compile" />
+    <File name="Media.Playlists.Xspf/Tests" subtype="Directory" buildaction="Compile" />
+    <File name="Media.Playlists.Xspf/Tests/XspfTests.cs" subtype="Code" buildaction="Compile" />
   </Contents>
   <References>
     <ProjectReference type="Gac" localcopy="True" refto="System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]