Unit testing of Packed/Unpacked parsing in Lite
diff --git a/src/ProtocolBuffersLite.Test/ExtendableMessageLiteTest.cs b/src/ProtocolBuffersLite.Test/ExtendableMessageLiteTest.cs
index 399e308..5ea8447 100644
--- a/src/ProtocolBuffersLite.Test/ExtendableMessageLiteTest.cs
+++ b/src/ProtocolBuffersLite.Test/ExtendableMessageLiteTest.cs
@@ -258,48 +258,42 @@
             Assert.AreEqual(123u, copy.GetExtension(UnitTestLiteProtoFile.RepeatedUint64ExtensionLite, 0));

         }

 

-        [Test]

-        public void ExtensionWriterTestPacked()

+        private TestPackedExtensionsLite BuildPackedExtensions()

         {

             TestPackedExtensionsLite.Builder builder = TestPackedExtensionsLite.CreateBuilder()

-                .AddExtension(UnitTestLiteProtoFile.PackedBoolExtensionLite, true)

-                .AddExtension(UnitTestLiteProtoFile.PackedDoubleExtensionLite, 123)

-                .AddExtension(UnitTestLiteProtoFile.PackedFixed32ExtensionLite, 123u)

-                .AddExtension(UnitTestLiteProtoFile.PackedFixed64ExtensionLite, 123u)

-                .AddExtension(UnitTestLiteProtoFile.PackedFloatExtensionLite, 123)

-                .AddExtension(UnitTestLiteProtoFile.PackedInt32ExtensionLite, 123)

-                .AddExtension(UnitTestLiteProtoFile.PackedInt64ExtensionLite, 123)

-                .AddExtension(UnitTestLiteProtoFile.PackedSfixed32ExtensionLite, 123)

-                .AddExtension(UnitTestLiteProtoFile.PackedSfixed64ExtensionLite, 123)

-                .AddExtension(UnitTestLiteProtoFile.PackedSint32ExtensionLite, 123)

-                .AddExtension(UnitTestLiteProtoFile.PackedSint64ExtensionLite, 123)

-                .AddExtension(UnitTestLiteProtoFile.PackedUint32ExtensionLite, 123u)

-                .AddExtension(UnitTestLiteProtoFile.PackedUint64ExtensionLite, 123u)

-                .AddExtension(UnitTestLiteProtoFile.PackedBoolExtensionLite, true)

-                .AddExtension(UnitTestLiteProtoFile.PackedDoubleExtensionLite, 123)

-                .AddExtension(UnitTestLiteProtoFile.PackedFixed32ExtensionLite, 123u)

-                .AddExtension(UnitTestLiteProtoFile.PackedFixed64ExtensionLite, 123u)

-                .AddExtension(UnitTestLiteProtoFile.PackedFloatExtensionLite, 123)

-                .AddExtension(UnitTestLiteProtoFile.PackedInt32ExtensionLite, 123)

-                .AddExtension(UnitTestLiteProtoFile.PackedInt64ExtensionLite, 123)

-                .AddExtension(UnitTestLiteProtoFile.PackedSfixed32ExtensionLite, 123)

-                .AddExtension(UnitTestLiteProtoFile.PackedSfixed64ExtensionLite, 123)

-                .AddExtension(UnitTestLiteProtoFile.PackedSint32ExtensionLite, 123)

-                .AddExtension(UnitTestLiteProtoFile.PackedSint64ExtensionLite, 123)

-                .AddExtension(UnitTestLiteProtoFile.PackedUint32ExtensionLite, 123u)

-                .AddExtension(UnitTestLiteProtoFile.PackedUint64ExtensionLite, 123u);

+                   .AddExtension(UnitTestLiteProtoFile.PackedBoolExtensionLite, true)

+                   .AddExtension(UnitTestLiteProtoFile.PackedDoubleExtensionLite, 123)

+                   .AddExtension(UnitTestLiteProtoFile.PackedFixed32ExtensionLite, 123u)

+                   .AddExtension(UnitTestLiteProtoFile.PackedFixed64ExtensionLite, 123u)

+                   .AddExtension(UnitTestLiteProtoFile.PackedFloatExtensionLite, 123)

+                   .AddExtension(UnitTestLiteProtoFile.PackedInt32ExtensionLite, 123)

+                   .AddExtension(UnitTestLiteProtoFile.PackedInt64ExtensionLite, 123)

+                   .AddExtension(UnitTestLiteProtoFile.PackedSfixed32ExtensionLite, 123)

+                   .AddExtension(UnitTestLiteProtoFile.PackedSfixed64ExtensionLite, 123)

+                   .AddExtension(UnitTestLiteProtoFile.PackedSint32ExtensionLite, 123)

+                   .AddExtension(UnitTestLiteProtoFile.PackedSint64ExtensionLite, 123)

+                   .AddExtension(UnitTestLiteProtoFile.PackedUint32ExtensionLite, 123u)

+                   .AddExtension(UnitTestLiteProtoFile.PackedUint64ExtensionLite, 123u)

+                   .AddExtension(UnitTestLiteProtoFile.PackedBoolExtensionLite, true)

+                   .AddExtension(UnitTestLiteProtoFile.PackedDoubleExtensionLite, 123)

+                   .AddExtension(UnitTestLiteProtoFile.PackedFixed32ExtensionLite, 123u)

+                   .AddExtension(UnitTestLiteProtoFile.PackedFixed64ExtensionLite, 123u)

+                   .AddExtension(UnitTestLiteProtoFile.PackedFloatExtensionLite, 123)

+                   .AddExtension(UnitTestLiteProtoFile.PackedInt32ExtensionLite, 123)

+                   .AddExtension(UnitTestLiteProtoFile.PackedInt64ExtensionLite, 123)

+                   .AddExtension(UnitTestLiteProtoFile.PackedSfixed32ExtensionLite, 123)

+                   .AddExtension(UnitTestLiteProtoFile.PackedSfixed64ExtensionLite, 123)

+                   .AddExtension(UnitTestLiteProtoFile.PackedSint32ExtensionLite, 123)

+                   .AddExtension(UnitTestLiteProtoFile.PackedSint64ExtensionLite, 123)

+                   .AddExtension(UnitTestLiteProtoFile.PackedUint32ExtensionLite, 123u)

+                   .AddExtension(UnitTestLiteProtoFile.PackedUint64ExtensionLite, 123u);

 

             TestPackedExtensionsLite msg = builder.Build();

+            return msg;

+        }

 

-            ExtensionRegistry registry = ExtensionRegistry.CreateInstance();

-            UnitTestLiteProtoFile.RegisterAllExtensions(registry);

-

-            TestPackedExtensionsLite.Builder copyBuilder =

-                TestPackedExtensionsLite.CreateBuilder().MergeFrom(msg.ToByteArray(), registry);

-            TestPackedExtensionsLite copy = copyBuilder.Build();

-

-            Assert.AreEqual(msg.ToByteArray(), copy.ToByteArray());

-

+        private void AssertPackedExtensions(TestPackedExtensionsLite copy)

+        {

             Assert.AreEqual(true, copy.GetExtension(UnitTestLiteProtoFile.PackedBoolExtensionLite, 0));

             Assert.AreEqual(123, copy.GetExtension(UnitTestLiteProtoFile.PackedDoubleExtensionLite, 0));

             Assert.AreEqual(123u, copy.GetExtension(UnitTestLiteProtoFile.PackedFixed32ExtensionLite, 0));

@@ -328,5 +322,56 @@
             Assert.AreEqual(123u, copy.GetExtension(UnitTestLiteProtoFile.PackedUint32ExtensionLite, 1));

             Assert.AreEqual(123u, copy.GetExtension(UnitTestLiteProtoFile.PackedUint64ExtensionLite, 1));

         }

+

+        [Test]

+        public void ExtensionWriterTestPacked()

+        {

+            TestPackedExtensionsLite msg = BuildPackedExtensions();

+

+            ExtensionRegistry registry = ExtensionRegistry.CreateInstance();

+            UnitTestLiteProtoFile.RegisterAllExtensions(registry);

+

+            TestPackedExtensionsLite.Builder copyBuilder =

+                TestPackedExtensionsLite.CreateBuilder().MergeFrom(msg.ToByteArray(), registry);

+            TestPackedExtensionsLite copy = copyBuilder.Build();

+

+            Assert.AreEqual(msg.ToByteArray(), copy.ToByteArray());

+

+            AssertPackedExtensions(copy);

+        }

+

+        [Test]

+        public void TestUnpackedAndPackedExtensions()

+        {

+            TestPackedExtensionsLite original = BuildPackedExtensions();

+            AssertPackedExtensions(original);

+

+            ExtensionRegistry registry = ExtensionRegistry.CreateInstance();

+            UnitTestLiteProtoFile.RegisterAllExtensions(registry);

+

+            TestUnpackedExtensionsLite unpacked = TestUnpackedExtensionsLite.ParseFrom(original.ToByteArray(), registry);

+

+            TestPackedExtensionsLite packed = TestPackedExtensionsLite.ParseFrom(unpacked.ToByteArray(), registry);

+

+            Assert.AreEqual(original, packed);

+            Assert.AreEqual(original.ToByteArray(), packed.ToByteArray());

+            AssertPackedExtensions(packed);

+        }

+

+        [Test]

+        public void TestUnpackedFromPackedInput()

+        {

+            byte[] packedData = BuildPackedExtensions().ToByteArray();

+

+            TestUnpackedTypesLite unpacked = TestUnpackedTypesLite.ParseFrom(packedData);

+            TestPackedTypesLite packed = TestPackedTypesLite.ParseFrom(unpacked.ToByteArray());

+            Assert.AreEqual(packedData, packed.ToByteArray());

+            

+            unpacked = TestUnpackedTypesLite.ParseFrom(packed.ToByteArray());

+

+            ExtensionRegistry registry = ExtensionRegistry.CreateInstance();

+            UnitTestLiteProtoFile.RegisterAllExtensions(registry);

+            AssertPackedExtensions(TestPackedExtensionsLite.ParseFrom(unpacked.ToByteArray(), registry));

+        }

     }

 }
\ No newline at end of file