- Upgraded NUnit
- Added StatLight and Silverlight unit testing
- Added copies of all projects for Silverlight
- Integrated Silverlight unit tests in build
diff --git a/src/ProtocolBuffers.Test/TestUtil.cs b/src/ProtocolBuffers.Test/TestUtil.cs
index ae2c116..dd1c981 100644
--- a/src/ProtocolBuffers.Test/TestUtil.cs
+++ b/src/ProtocolBuffers.Test/TestUtil.cs
@@ -41,14 +41,21 @@
 using System.Text;

 using System.Threading;

 using Google.ProtocolBuffers.TestProtos;

-using NUnit.Framework;

+#if SILVERLIGHT

+using TestClass = Microsoft.VisualStudio.TestTools.UnitTesting.TestClassAttribute;

+using Test = Microsoft.VisualStudio.TestTools.UnitTesting.TestMethodAttribute;

+using Assert = Microsoft.VisualStudio.TestTools.UnitTesting.Assert;

+#else

+using Microsoft.VisualStudio.TestTools.UnitTesting;

+#endif

+

 

 namespace Google.ProtocolBuffers

 {

     internal static class TestUtil

     {

+#if !SILVERLIGHT

         private static string testDataDirectory;

-        private static ByteString goldenMessage = null;

 

         internal static string TestDataDirectory

         {

@@ -76,6 +83,8 @@
             }

         }

 

+        private static ByteString goldenMessage = null;

+

         internal static ByteString GoldenMessage

         {

             get

@@ -88,6 +97,36 @@
             }

         }

 

+        internal static string ReadTextFromFile(string filePath)

+        {

+            return ReadBytesFromFile(filePath).ToStringUtf8();

+        }

+

+        internal static ByteString ReadBytesFromFile(String filename)

+        {

+            byte[] data = File.ReadAllBytes(Path.Combine(TestDataDirectory, filename));

+            return ByteString.CopyFrom(data);

+        }

+        

+        private static ByteString goldenPackedFieldsMessage = null;

+

+        /// <summary>

+        /// Get the bytes of the "golden packed fields message".  This is a serialized

+        /// TestPackedTypes with all fields set as they would be by SetPackedFields,

+        /// but it is loaded from a file on disk rather than generated dynamically.

+        /// The file is actually generated by C++ code, so testing against it verifies compatibility

+        /// with C++.

+        /// </summary>

+        public static ByteString GetGoldenPackedFieldsMessage()

+        {

+            if (goldenPackedFieldsMessage == null)

+            {

+                goldenPackedFieldsMessage = ReadBytesFromFile("golden_packed_fields_message");

+            }

+            return goldenPackedFieldsMessage;

+        }

+

+#endif

         /// <summary>

         /// Creates an unmodifiable ExtensionRegistry containing all the extensions

         /// of TestAllExtensions.

@@ -193,17 +232,6 @@
             registry.Add(UnitTestProtoFile.PackedEnumExtension);

         }

 

-        internal static string ReadTextFromFile(string filePath)

-        {

-            return ReadBytesFromFile(filePath).ToStringUtf8();

-        }

-

-        internal static ByteString ReadBytesFromFile(String filename)

-        {

-            byte[] data = File.ReadAllBytes(Path.Combine(TestDataDirectory, filename));

-            return ByteString.CopyFrom(data);

-        }

-

         /// <summary>

         /// Helper to convert a String to ByteString.

         /// </summary>

@@ -379,12 +407,12 @@
 

             Assert.AreEqual(101, message.OptionalInt32);

             Assert.AreEqual(102, message.OptionalInt64);

-            Assert.AreEqual(103, message.OptionalUint32);

-            Assert.AreEqual(104, message.OptionalUint64);

+            Assert.AreEqual(103u, message.OptionalUint32);

+            Assert.AreEqual(104u, message.OptionalUint64);

             Assert.AreEqual(105, message.OptionalSint32);

             Assert.AreEqual(106, message.OptionalSint64);

-            Assert.AreEqual(107, message.OptionalFixed32);

-            Assert.AreEqual(108, message.OptionalFixed64);

+            Assert.AreEqual(107u, message.OptionalFixed32);

+            Assert.AreEqual(108u, message.OptionalFixed64);

             Assert.AreEqual(109, message.OptionalSfixed32);

             Assert.AreEqual(110, message.OptionalSfixed64);

             Assert.AreEqual(111, message.OptionalFloat);

@@ -436,12 +464,12 @@
 

             Assert.AreEqual(201, message.GetRepeatedInt32(0));

             Assert.AreEqual(202, message.GetRepeatedInt64(0));

-            Assert.AreEqual(203, message.GetRepeatedUint32(0));

-            Assert.AreEqual(204, message.GetRepeatedUint64(0));

+            Assert.AreEqual(203u, message.GetRepeatedUint32(0));

+            Assert.AreEqual(204u, message.GetRepeatedUint64(0));

             Assert.AreEqual(205, message.GetRepeatedSint32(0));

             Assert.AreEqual(206, message.GetRepeatedSint64(0));

-            Assert.AreEqual(207, message.GetRepeatedFixed32(0));

-            Assert.AreEqual(208, message.GetRepeatedFixed64(0));

+            Assert.AreEqual(207u, message.GetRepeatedFixed32(0));

+            Assert.AreEqual(208u, message.GetRepeatedFixed64(0));

             Assert.AreEqual(209, message.GetRepeatedSfixed32(0));

             Assert.AreEqual(210, message.GetRepeatedSfixed64(0));

             Assert.AreEqual(211, message.GetRepeatedFloat(0));

@@ -464,12 +492,12 @@
 

             Assert.AreEqual(301, message.GetRepeatedInt32(1));

             Assert.AreEqual(302, message.GetRepeatedInt64(1));

-            Assert.AreEqual(303, message.GetRepeatedUint32(1));

-            Assert.AreEqual(304, message.GetRepeatedUint64(1));

+            Assert.AreEqual(303u, message.GetRepeatedUint32(1));

+            Assert.AreEqual(304u, message.GetRepeatedUint64(1));

             Assert.AreEqual(305, message.GetRepeatedSint32(1));

             Assert.AreEqual(306, message.GetRepeatedSint64(1));

-            Assert.AreEqual(307, message.GetRepeatedFixed32(1));

-            Assert.AreEqual(308, message.GetRepeatedFixed64(1));

+            Assert.AreEqual(307u, message.GetRepeatedFixed32(1));

+            Assert.AreEqual(308u, message.GetRepeatedFixed64(1));

             Assert.AreEqual(309, message.GetRepeatedSfixed32(1));

             Assert.AreEqual(310, message.GetRepeatedSfixed64(1));

             Assert.AreEqual(311, message.GetRepeatedFloat(1), 0.0);

@@ -517,12 +545,12 @@
 

             Assert.AreEqual(401, message.DefaultInt32);

             Assert.AreEqual(402, message.DefaultInt64);

-            Assert.AreEqual(403, message.DefaultUint32);

-            Assert.AreEqual(404, message.DefaultUint64);

+            Assert.AreEqual(403u, message.DefaultUint32);

+            Assert.AreEqual(404u, message.DefaultUint64);

             Assert.AreEqual(405, message.DefaultSint32);

             Assert.AreEqual(406, message.DefaultSint64);

-            Assert.AreEqual(407, message.DefaultFixed32);

-            Assert.AreEqual(408, message.DefaultFixed64);

+            Assert.AreEqual(407u, message.DefaultFixed32);

+            Assert.AreEqual(408u, message.DefaultFixed64);

             Assert.AreEqual(409, message.DefaultSfixed32);

             Assert.AreEqual(410, message.DefaultSfixed64);

             Assert.AreEqual(411, message.DefaultFloat);

@@ -573,12 +601,12 @@
             // Optional fields without defaults are set to zero or something like it.

             Assert.AreEqual(0, message.OptionalInt32);

             Assert.AreEqual(0, message.OptionalInt64);

-            Assert.AreEqual(0, message.OptionalUint32);

-            Assert.AreEqual(0, message.OptionalUint64);

+            Assert.AreEqual(0u, message.OptionalUint32);

+            Assert.AreEqual(0u, message.OptionalUint64);

             Assert.AreEqual(0, message.OptionalSint32);

             Assert.AreEqual(0, message.OptionalSint64);

-            Assert.AreEqual(0, message.OptionalFixed32);

-            Assert.AreEqual(0, message.OptionalFixed64);

+            Assert.AreEqual(0u, message.OptionalFixed32);

+            Assert.AreEqual(0u, message.OptionalFixed64);

             Assert.AreEqual(0, message.OptionalSfixed32);

             Assert.AreEqual(0, message.OptionalSfixed64);

             Assert.AreEqual(0, message.OptionalFloat);

@@ -661,12 +689,12 @@
             // Fields with defaults have their default values (duh).

             Assert.AreEqual(41, message.DefaultInt32);

             Assert.AreEqual(42, message.DefaultInt64);

-            Assert.AreEqual(43, message.DefaultUint32);

-            Assert.AreEqual(44, message.DefaultUint64);

+            Assert.AreEqual(43u, message.DefaultUint32);

+            Assert.AreEqual(44u, message.DefaultUint64);

             Assert.AreEqual(-45, message.DefaultSint32);

             Assert.AreEqual(46, message.DefaultSint64);

-            Assert.AreEqual(47, message.DefaultFixed32);

-            Assert.AreEqual(48, message.DefaultFixed64);

+            Assert.AreEqual(47u, message.DefaultFixed32);

+            Assert.AreEqual(48u, message.DefaultFixed64);

             Assert.AreEqual(49, message.DefaultSfixed32);

             Assert.AreEqual(-50, message.DefaultSfixed64);

             Assert.AreEqual(51.5, message.DefaultFloat, 0.0);

@@ -1531,12 +1559,12 @@
             Assert.AreEqual(2, message.PackedEnumCount);

             Assert.AreEqual(601, message.GetPackedInt32(0));

             Assert.AreEqual(602, message.GetPackedInt64(0));

-            Assert.AreEqual(603, message.GetPackedUint32(0));

-            Assert.AreEqual(604, message.GetPackedUint64(0));

+            Assert.AreEqual(603u, message.GetPackedUint32(0));

+            Assert.AreEqual(604u, message.GetPackedUint64(0));

             Assert.AreEqual(605, message.GetPackedSint32(0));

             Assert.AreEqual(606, message.GetPackedSint64(0));

-            Assert.AreEqual(607, message.GetPackedFixed32(0));

-            Assert.AreEqual(608, message.GetPackedFixed64(0));

+            Assert.AreEqual(607u, message.GetPackedFixed32(0));

+            Assert.AreEqual(608u, message.GetPackedFixed64(0));

             Assert.AreEqual(609, message.GetPackedSfixed32(0));

             Assert.AreEqual(610, message.GetPackedSfixed64(0));

             Assert.AreEqual(611, message.GetPackedFloat(0), 0.0);

@@ -1545,12 +1573,12 @@
             Assert.AreEqual(ForeignEnum.FOREIGN_BAR, message.GetPackedEnum(0));

             Assert.AreEqual(701, message.GetPackedInt32(1));

             Assert.AreEqual(702, message.GetPackedInt64(1));

-            Assert.AreEqual(703, message.GetPackedUint32(1));

-            Assert.AreEqual(704, message.GetPackedUint64(1));

+            Assert.AreEqual(703u, message.GetPackedUint32(1));

+            Assert.AreEqual(704u, message.GetPackedUint64(1));

             Assert.AreEqual(705, message.GetPackedSint32(1));

             Assert.AreEqual(706, message.GetPackedSint64(1));

-            Assert.AreEqual(707, message.GetPackedFixed32(1));

-            Assert.AreEqual(708, message.GetPackedFixed64(1));

+            Assert.AreEqual(707u, message.GetPackedFixed32(1));

+            Assert.AreEqual(708u, message.GetPackedFixed64(1));

             Assert.AreEqual(709, message.GetPackedSfixed32(1));

             Assert.AreEqual(710, message.GetPackedSfixed64(1));

             Assert.AreEqual(711, message.GetPackedFloat(1), 0.0);

@@ -1580,12 +1608,12 @@
             Assert.AreEqual(2, message.UnpackedEnumCount);

             Assert.AreEqual(601, message.GetUnpackedInt32(0));

             Assert.AreEqual(602, message.GetUnpackedInt64(0));

-            Assert.AreEqual(603, message.GetUnpackedUint32(0));

-            Assert.AreEqual(604, message.GetUnpackedUint64(0));

+            Assert.AreEqual(603u, message.GetUnpackedUint32(0));

+            Assert.AreEqual(604u, message.GetUnpackedUint64(0));

             Assert.AreEqual(605, message.GetUnpackedSint32(0));

             Assert.AreEqual(606, message.GetUnpackedSint64(0));

-            Assert.AreEqual(607, message.GetUnpackedFixed32(0));

-            Assert.AreEqual(608, message.GetUnpackedFixed64(0));

+            Assert.AreEqual(607u, message.GetUnpackedFixed32(0));

+            Assert.AreEqual(608u, message.GetUnpackedFixed64(0));

             Assert.AreEqual(609, message.GetUnpackedSfixed32(0));

             Assert.AreEqual(610, message.GetUnpackedSfixed64(0));

             Assert.AreEqual(611, message.GetUnpackedFloat(0), 0.0);

@@ -1594,12 +1622,12 @@
             Assert.AreEqual(ForeignEnum.FOREIGN_BAR, message.GetUnpackedEnum(0));

             Assert.AreEqual(701, message.GetUnpackedInt32(1));

             Assert.AreEqual(702, message.GetUnpackedInt64(1));

-            Assert.AreEqual(703, message.GetUnpackedUint32(1));

-            Assert.AreEqual(704, message.GetUnpackedUint64(1));

+            Assert.AreEqual(703u, message.GetUnpackedUint32(1));

+            Assert.AreEqual(704u, message.GetUnpackedUint64(1));

             Assert.AreEqual(705, message.GetUnpackedSint32(1));

             Assert.AreEqual(706, message.GetUnpackedSint64(1));

-            Assert.AreEqual(707, message.GetUnpackedFixed32(1));

-            Assert.AreEqual(708, message.GetUnpackedFixed64(1));

+            Assert.AreEqual(707u, message.GetUnpackedFixed32(1));

+            Assert.AreEqual(708u, message.GetUnpackedFixed64(1));

             Assert.AreEqual(709, message.GetUnpackedSfixed32(1));

             Assert.AreEqual(710, message.GetUnpackedSfixed64(1));

             Assert.AreEqual(711, message.GetUnpackedFloat(1), 0.0);

@@ -1659,12 +1687,12 @@
             Assert.AreEqual(2, message.GetExtensionCount(UnitTestProtoFile.PackedEnumExtension));

             Assert.AreEqual(601, message.GetExtension(UnitTestProtoFile.PackedInt32Extension, 0));

             Assert.AreEqual(602L, message.GetExtension(UnitTestProtoFile.PackedInt64Extension, 0));

-            Assert.AreEqual(603, message.GetExtension(UnitTestProtoFile.PackedUint32Extension, 0));

-            Assert.AreEqual(604L, message.GetExtension(UnitTestProtoFile.PackedUint64Extension, 0));

+            Assert.AreEqual(603u, message.GetExtension(UnitTestProtoFile.PackedUint32Extension, 0));

+            Assert.AreEqual(604uL, message.GetExtension(UnitTestProtoFile.PackedUint64Extension, 0));

             Assert.AreEqual(605, message.GetExtension(UnitTestProtoFile.PackedSint32Extension, 0));

             Assert.AreEqual(606L, message.GetExtension(UnitTestProtoFile.PackedSint64Extension, 0));

-            Assert.AreEqual(607, message.GetExtension(UnitTestProtoFile.PackedFixed32Extension, 0));

-            Assert.AreEqual(608L, message.GetExtension(UnitTestProtoFile.PackedFixed64Extension, 0));

+            Assert.AreEqual(607u, message.GetExtension(UnitTestProtoFile.PackedFixed32Extension, 0));

+            Assert.AreEqual(608uL, message.GetExtension(UnitTestProtoFile.PackedFixed64Extension, 0));

             Assert.AreEqual(609, message.GetExtension(UnitTestProtoFile.PackedSfixed32Extension, 0));

             Assert.AreEqual(610L, message.GetExtension(UnitTestProtoFile.PackedSfixed64Extension, 0));

             Assert.AreEqual(611F, message.GetExtension(UnitTestProtoFile.PackedFloatExtension, 0));

@@ -1674,12 +1702,12 @@
                             message.GetExtension(UnitTestProtoFile.PackedEnumExtension, 0));

             Assert.AreEqual(701, message.GetExtension(UnitTestProtoFile.PackedInt32Extension, 1));

             Assert.AreEqual(702L, message.GetExtension(UnitTestProtoFile.PackedInt64Extension, 1));

-            Assert.AreEqual(703, message.GetExtension(UnitTestProtoFile.PackedUint32Extension, 1));

-            Assert.AreEqual(704L, message.GetExtension(UnitTestProtoFile.PackedUint64Extension, 1));

+            Assert.AreEqual(703u, message.GetExtension(UnitTestProtoFile.PackedUint32Extension, 1));

+            Assert.AreEqual(704uL, message.GetExtension(UnitTestProtoFile.PackedUint64Extension, 1));

             Assert.AreEqual(705, message.GetExtension(UnitTestProtoFile.PackedSint32Extension, 1));

             Assert.AreEqual(706L, message.GetExtension(UnitTestProtoFile.PackedSint64Extension, 1));

-            Assert.AreEqual(707, message.GetExtension(UnitTestProtoFile.PackedFixed32Extension, 1));

-            Assert.AreEqual(708L, message.GetExtension(UnitTestProtoFile.PackedFixed64Extension, 1));

+            Assert.AreEqual(707u, message.GetExtension(UnitTestProtoFile.PackedFixed32Extension, 1));

+            Assert.AreEqual(708uL, message.GetExtension(UnitTestProtoFile.PackedFixed64Extension, 1));

             Assert.AreEqual(709, message.GetExtension(UnitTestProtoFile.PackedSfixed32Extension, 1));

             Assert.AreEqual(710L, message.GetExtension(UnitTestProtoFile.PackedSfixed64Extension, 1));

             Assert.AreEqual(711F, message.GetExtension(UnitTestProtoFile.PackedFloatExtension, 1));

@@ -1706,12 +1734,12 @@
             Assert.AreEqual(2, message.GetExtensionCount(UnitTestExtrasProtoFile.UnpackedEnumExtension));

             Assert.AreEqual(601, message.GetExtension(UnitTestExtrasProtoFile.UnpackedInt32Extension, 0));

             Assert.AreEqual(602L, message.GetExtension(UnitTestExtrasProtoFile.UnpackedInt64Extension, 0));

-            Assert.AreEqual(603, message.GetExtension(UnitTestExtrasProtoFile.UnpackedUint32Extension, 0));

-            Assert.AreEqual(604L, message.GetExtension(UnitTestExtrasProtoFile.UnpackedUint64Extension, 0));

+            Assert.AreEqual(603u, message.GetExtension(UnitTestExtrasProtoFile.UnpackedUint32Extension, 0));

+            Assert.AreEqual(604uL, message.GetExtension(UnitTestExtrasProtoFile.UnpackedUint64Extension, 0));

             Assert.AreEqual(605, message.GetExtension(UnitTestExtrasProtoFile.UnpackedSint32Extension, 0));

             Assert.AreEqual(606L, message.GetExtension(UnitTestExtrasProtoFile.UnpackedSint64Extension, 0));

-            Assert.AreEqual(607, message.GetExtension(UnitTestExtrasProtoFile.UnpackedFixed32Extension, 0));

-            Assert.AreEqual(608L, message.GetExtension(UnitTestExtrasProtoFile.UnpackedFixed64Extension, 0));

+            Assert.AreEqual(607u, message.GetExtension(UnitTestExtrasProtoFile.UnpackedFixed32Extension, 0));

+            Assert.AreEqual(608uL, message.GetExtension(UnitTestExtrasProtoFile.UnpackedFixed64Extension, 0));

             Assert.AreEqual(609, message.GetExtension(UnitTestExtrasProtoFile.UnpackedSfixed32Extension, 0));

             Assert.AreEqual(610L, message.GetExtension(UnitTestExtrasProtoFile.UnpackedSfixed64Extension, 0));

             Assert.AreEqual(611F, message.GetExtension(UnitTestExtrasProtoFile.UnpackedFloatExtension, 0));

@@ -1721,12 +1749,12 @@
                             message.GetExtension(UnitTestExtrasProtoFile.UnpackedEnumExtension, 0));

             Assert.AreEqual(701, message.GetExtension(UnitTestExtrasProtoFile.UnpackedInt32Extension, 1));

             Assert.AreEqual(702L, message.GetExtension(UnitTestExtrasProtoFile.UnpackedInt64Extension, 1));

-            Assert.AreEqual(703, message.GetExtension(UnitTestExtrasProtoFile.UnpackedUint32Extension, 1));

-            Assert.AreEqual(704L, message.GetExtension(UnitTestExtrasProtoFile.UnpackedUint64Extension, 1));

+            Assert.AreEqual(703u, message.GetExtension(UnitTestExtrasProtoFile.UnpackedUint32Extension, 1));

+            Assert.AreEqual(704uL, message.GetExtension(UnitTestExtrasProtoFile.UnpackedUint64Extension, 1));

             Assert.AreEqual(705, message.GetExtension(UnitTestExtrasProtoFile.UnpackedSint32Extension, 1));

             Assert.AreEqual(706L, message.GetExtension(UnitTestExtrasProtoFile.UnpackedSint64Extension, 1));

-            Assert.AreEqual(707, message.GetExtension(UnitTestExtrasProtoFile.UnpackedFixed32Extension, 1));

-            Assert.AreEqual(708L, message.GetExtension(UnitTestExtrasProtoFile.UnpackedFixed64Extension, 1));

+            Assert.AreEqual(707u, message.GetExtension(UnitTestExtrasProtoFile.UnpackedFixed32Extension, 1));

+            Assert.AreEqual(708uL, message.GetExtension(UnitTestExtrasProtoFile.UnpackedFixed64Extension, 1));

             Assert.AreEqual(709, message.GetExtension(UnitTestExtrasProtoFile.UnpackedSfixed32Extension, 1));

             Assert.AreEqual(710L, message.GetExtension(UnitTestExtrasProtoFile.UnpackedSfixed64Extension, 1));

             Assert.AreEqual(711F, message.GetExtension(UnitTestExtrasProtoFile.UnpackedFloatExtension, 1));

@@ -1735,27 +1763,11 @@
             Assert.AreEqual(UnpackedExtensionsForeignEnum.FOREIGN_BAZ, message.GetExtension(UnitTestExtrasProtoFile.UnpackedEnumExtension, 1));

         }

 

-        private static ByteString goldenPackedFieldsMessage = null;

-

-        /// <summary>

-        /// Get the bytes of the "golden packed fields message".  This is a serialized

-        /// TestPackedTypes with all fields set as they would be by SetPackedFields,

-        /// but it is loaded from a file on disk rather than generated dynamically.

-        /// The file is actually generated by C++ code, so testing against it verifies compatibility

-        /// with C++.

-        /// </summary>

-        public static ByteString GetGoldenPackedFieldsMessage()

-        {

-            if (goldenPackedFieldsMessage == null)

-            {

-                goldenPackedFieldsMessage = ReadBytesFromFile("golden_packed_fields_message");

-            }

-            return goldenPackedFieldsMessage;

-        }

-

         private static readonly string[] TestCultures = {"en-US", "en-GB", "fr-FR", "de-DE"};

 

-        public static void TestInMultipleCultures(Action test)

+        public delegate void CultureAction();

+

+        public static void TestInMultipleCultures(CultureAction test)

         {

             CultureInfo originalCulture = Thread.CurrentThread.CurrentCulture;

             foreach (string culture in TestCultures)

@@ -1785,6 +1797,22 @@
             return bytes;

         }

 

+

+        internal delegate void Action();

+

+        internal static void AssertNotSupported(Action action)

+        {

+            try

+            {

+                action();

+                Assert.Fail("Expected NotSupportedException");

+            }

+            catch (NotSupportedException)

+            {

+                // Expected

+            }

+        }

+

         internal static void AssertArgumentNullException(Action action)

         {

             try

@@ -1797,5 +1825,25 @@
                 // We expect this exception.

             }

         }

+

+        internal static void AssertBytesEqual(byte[] a, byte[]b)

+        {

+            if (a == null || b == null)

+            {

+                Assert.AreEqual<object>(a, b);

+            }

+            else

+            {

+                Assert.AreEqual(a.Length, b.Length, "The byte[] is not of the expected length.");

+

+                for (int i = 0; i < a.Length; i++)

+                {

+                    if (a[i] != b[i])

+                    {

+                        Assert.AreEqual(a[i], b[i], "Byte[] differs at index " + i);

+                    }

+                }

+            }

+        }

     }

 }
\ No newline at end of file