예제 #1
0
        public void ValidJsonFormatReaderCreationTest()
        {
            IFormatReader jsonFormatReader = new JsonFormatReader("c:/TestFilePath.json");

            Assert.NotNull(jsonFormatReader);
            Assert.IsType <JsonFormatReader>(jsonFormatReader);
        }
예제 #2
0
        public void TestNestedMessageArray()
        {
            JsonFormatWriter writer = JsonFormatWriter.CreateInstance();

            using (writer.StartArray())
            {
                using (writer.StartArray())
                {
                    writer.WriteMessage(TestXmlMessage.CreateBuilder().SetNumber(1).AddTextlines("a").Build());
                    writer.WriteMessage(TestXmlMessage.CreateBuilder().SetNumber(2).AddTextlines("b").Build());
                }
                using (writer.StartArray())
                    writer.WriteMessage(TestXmlMessage.CreateBuilder().SetNumber(3).AddTextlines("c").Build());
            }
            string           json   = writer.ToString();
            JsonFormatReader reader = JsonFormatReader.CreateInstance(json);

            TestXmlMessage.Builder builder = TestXmlMessage.CreateBuilder();
            int ordinal = 0;

            foreach (JsonFormatReader r in reader.EnumerateArray())
            {
                foreach (JsonFormatReader r2 in r.EnumerateArray())
                {
                    r2.Merge(builder);
                    Assert.AreEqual(++ordinal, builder.Number);
                }
            }
            Assert.AreEqual(3, ordinal);
            Assert.AreEqual(3, builder.TextlinesCount);
        }
예제 #3
0
        public void TestMessageMissingExtensions()
        {
            TestXmlMessage original = TestXmlMessage.CreateBuilder()
                                      .SetValid(true)
                                      .SetText("text")
                                      .SetExtension(UnittestExtrasXmltest.ExtensionText, " extension text value ! ")
                                      .SetExtension(UnittestExtrasXmltest.ExtensionMessage, new TestXmlExtension.Builder().SetNumber(42).Build())
                                      .AddExtension(UnittestExtrasXmltest.ExtensionNumber, 100)
                                      .AddExtension(UnittestExtrasXmltest.ExtensionNumber, 101)
                                      .AddExtension(UnittestExtrasXmltest.ExtensionNumber, 102)
                                      .SetExtension(UnittestExtrasXmltest.ExtensionEnum, EnumOptions.ONE)
                                      .Build();

            TestXmlMessage message = original.ToBuilder()
                                     .ClearExtension(UnittestExtrasXmltest.ExtensionText)
                                     .ClearExtension(UnittestExtrasXmltest.ExtensionMessage)
                                     .ClearExtension(UnittestExtrasXmltest.ExtensionNumber)
                                     .ClearExtension(UnittestExtrasXmltest.ExtensionEnum)
                                     .Build();

            JsonFormatWriter writer = JsonFormatWriter.CreateInstance();

            writer.WriteMessage(original);
            Content = writer.ToString();

            IMessageLite copy = JsonFormatReader.CreateInstance(Content)
                                .Merge(message.CreateBuilderForType()).Build();

            Assert.AreNotEqual(original, message);
            Assert.AreNotEqual(original, copy);
            Assert.AreEqual(message, copy);
        }
예제 #4
0
        public void JsonFormatReaderReadTest()
        {
            Assert.Throws <ArgumentException>(() => {
                var jsonFormatReader = new JsonFormatReader("");

                jsonFormatReader.Read();
            });
        }
예제 #5
0
 public void TestMergeFields()
 {
     TestXmlMessage.Builder builder = TestXmlMessage.CreateBuilder();
     builder.MergeFrom(JsonFormatReader.CreateInstance("\"valid\": true"));
     builder.MergeFrom(JsonFormatReader.CreateInstance("\"text\": \"text\", \"number\": \"411\""));
     Assert.AreEqual(true, builder.Valid);
     Assert.AreEqual("text", builder.Text);
     Assert.AreEqual(411, builder.Number);
 }
예제 #6
0
        /// <summary>
        /// Merges a JSON object into this builder and returns
        /// </summary>
        public static TBuilder MergeFromJson <TBuilder>(
#if !NOEXTENSIONS
            this
#endif
            TBuilder builder, string jsonText) where TBuilder : IBuilderLite
        {
            return(JsonFormatReader.CreateInstance(jsonText)
                   .Merge(builder));
        }
예제 #7
0
        /// <summary>
        /// Merges a JSON object into this builder using the extensions provided and returns
        /// </summary>
        public static TBuilder MergeFromJson <TBuilder>(
#if !NOEXTENSIONS
            this
#endif
            TBuilder builder, TextReader reader, ExtensionRegistry extensionRegistry) where TBuilder : IBuilderLite
        {
            return(JsonFormatReader.CreateInstance(reader)
                   .Merge(builder, extensionRegistry));
        }
예제 #8
0
        public void Example_ReadJsonUsingICodedInputStream()
        {
            TestXmlMessage.Builder builder = TestXmlMessage.CreateBuilder();
            ICodedInputStream      reader  = JsonFormatReader.CreateInstance(@"{""valid"":true}");

            reader.ReadMessageStart();  //manually read the begin the message '{'

            builder.MergeFrom(reader);  //write the message normally

            reader.ReadMessageEnd();    //manually read the end message '}'
        }
예제 #9
0
        public void TestReadWriteJsonWithoutRoot()
        {
            TestXmlMessage.Builder builder = TestXmlMessage.CreateBuilder();
            TestXmlMessage         message = builder.SetText("abc").SetNumber(123).Build();

            string Json;

            using (StringWriter sw = new StringWriter())
            {
                ICodedOutputStream output = JsonFormatWriter.CreateInstance(sw);

                message.WriteTo(output);
                output.Flush();
                Json = sw.ToString();
            }
            Assert.AreEqual(@"""text"":""abc"",""number"":123", Json);

            ICodedInputStream input = JsonFormatReader.CreateInstance(Json);
            TestXmlMessage    copy  = TestXmlMessage.CreateBuilder().MergeFrom(input).Build();

            Assert.AreEqual(message, copy);
        }
예제 #10
0
        public void TestJsonFormatted()
        {
            TestXmlMessage message = TestXmlMessage.CreateBuilder()
                                     .SetValid(true)
                                     .SetNumber(0x1010)
                                     .AddChildren(TestXmlMessage.Types.Children.CreateBuilder())
                                     .AddChildren(TestXmlMessage.Types.Children.CreateBuilder().AddOptions(EnumOptions.ONE))
                                     .AddChildren(TestXmlMessage.Types.Children.CreateBuilder().AddOptions(EnumOptions.ONE).AddOptions(EnumOptions.TWO))
                                     .AddChildren(TestXmlMessage.Types.Children.CreateBuilder().SetBinary(ByteString.CopyFromUtf8("abc")))
                                     .Build();

            StringWriter sw = new StringWriter();

            JsonFormatWriter.CreateInstance(sw).Formatted()
            .WriteMessage(message);

            string json = sw.ToString();

            TestXmlMessage copy = JsonFormatReader.CreateInstance(json)
                                  .Merge(TestXmlMessage.CreateBuilder()).Build();

            Assert.AreEqual(message, copy);
        }
예제 #11
0
        protected void FormatterAssert <TMessage>(TMessage message, params string[] expecting) where TMessage : IMessageLite
        {
            StringWriter sw = new StringWriter();

            JsonFormatWriter.CreateInstance(sw).WriteMessage(message);

            Content = sw.ToString();

            ExtensionRegistry registry = ExtensionRegistry.CreateInstance();

            UnittestExtrasXmltest.RegisterAllExtensions(registry);

            IMessageLite copy =
                JsonFormatReader.CreateInstance(Content)
                .Merge(message.WeakCreateBuilderForType(), registry).WeakBuild();

            Assert.AreEqual(typeof(TMessage), copy.GetType());
            Assert.AreEqual(message, copy);
            foreach (string expect in expecting)
            {
                Assert.IsTrue(Content.IndexOf(expect) >= 0);
            }
        }
예제 #12
0
 public void FailWithUnQuotedName()
 {
     Assert.Throws <FormatException>(() => JsonFormatReader.CreateInstance("{name:{}}").Merge(TestXmlMessage.CreateBuilder()));
 }
 public void FailWithEmptyText()
 {
     JsonFormatReader.CreateInstance("")
     .Merge(TestXmlMessage.CreateBuilder());
 }
예제 #14
0
 protected override TBuilder DeserializeMessage <TMessage, TBuilder>(object message, TBuilder builder, ExtensionRegistry registry)
 {
     JsonFormatReader.CreateInstance((string)message).Merge(builder);
     return(builder);
 }
예제 #15
0
        /// <summary>
        /// Runs a single test. Error messages are displayed to Console.Error, and the return value indicates
        /// general success/failure.
        /// </summary>
        public static bool RunTest(string typeName, string file, byte[] inputData)
        {
            WriteLine("Benchmarking {0} with file {1}", typeName, file);
            IMessage defaultMessage;

            try
            {
                defaultMessage = MessageUtil.GetDefaultMessage(typeName);
            }
            catch (ArgumentException e)
            {
                Console.Error.WriteLine(e.Message);
                return(false);
            }
            try
            {
                ExtensionRegistry registry = ExtensionRegistry.Empty;
                inputData = inputData ?? File.ReadAllBytes(file);
                MemoryStream inputStream   = new MemoryStream(inputData);
                ByteString   inputString   = ByteString.CopyFrom(inputData);
                IMessage     sampleMessage =
                    defaultMessage.WeakCreateBuilderForType().WeakMergeFrom(inputString, registry).WeakBuild();

                IDictionary <string, object> dictionary = null;
                byte[] jsonBytes = null, xmlBytes = null; /*no pun intended, well... maybe for xml*/
                if (OtherFormats)
                {
                    using (MemoryStream temp = new MemoryStream())
                    {
                        XmlFormatWriter.CreateInstance(temp).WriteMessage(sampleMessage);
                        xmlBytes = temp.ToArray();
                    }
                    using (MemoryStream temp = new MemoryStream())
                    {
                        JsonFormatWriter.CreateInstance(temp).WriteMessage(sampleMessage);
                        jsonBytes = temp.ToArray();
                    }
                    dictionary = new Dictionary <string, object>(StringComparer.Ordinal);
                    new DictionaryWriter(dictionary).WriteMessage(sampleMessage);
                }

                //Serializers
                if (!FastTest)
                {
                    RunBenchmark("Serialize to byte string", inputData.Length, () => sampleMessage.ToByteString());
                }
                RunBenchmark("Serialize to byte array", inputData.Length, () => sampleMessage.ToByteArray());
                if (!FastTest)
                {
                    RunBenchmark("Serialize to memory stream", inputData.Length,
                                 () => sampleMessage.WriteTo(new MemoryStream()));
                }

                if (OtherFormats)
                {
                    RunBenchmark("Serialize to xml", xmlBytes.Length,
                                 () =>
                    {
                        XmlFormatWriter.CreateInstance(new MemoryStream(), Encoding.UTF8).WriteMessage(sampleMessage);
                    });
                    RunBenchmark("Serialize to json", jsonBytes.Length,
                                 () => { JsonFormatWriter.CreateInstance().WriteMessage(sampleMessage); });
                    RunBenchmark("Serialize to json via xml", jsonBytes.Length,
                                 () =>
                                 XmlFormatWriter.CreateInstance(
                                     JsonReaderWriterFactory.CreateJsonWriter(new MemoryStream(), Encoding.UTF8))
                                 .SetOptions(XmlWriterOptions.OutputJsonTypes)
                                 .WriteMessage(sampleMessage)
                                 );

                    RunBenchmark("Serialize to dictionary", sampleMessage.SerializedSize,
                                 () => new DictionaryWriter().WriteMessage(sampleMessage));
                }
                //Deserializers
                if (!FastTest)
                {
                    RunBenchmark("Deserialize from byte string", inputData.Length,
                                 () => defaultMessage.WeakCreateBuilderForType()
                                 .WeakMergeFrom(inputString, registry)
                                 .WeakBuild()
                                 );
                }

                RunBenchmark("Deserialize from byte array", inputData.Length,
                             () => defaultMessage.WeakCreateBuilderForType()
                             .WeakMergeFrom(CodedInputStream.CreateInstance(inputData), registry)
                             .WeakBuild()
                             );
                if (!FastTest)
                {
                    RunBenchmark("Deserialize from memory stream", inputData.Length,
                                 () =>
                    {
                        inputStream.Position = 0;
                        defaultMessage.WeakCreateBuilderForType().WeakMergeFrom(
                            CodedInputStream.CreateInstance(inputStream), registry)
                        .WeakBuild();
                    });
                }

                if (OtherFormats)
                {
                    RunBenchmark("Deserialize from xml", xmlBytes.Length,
                                 () =>
                                 XmlFormatReader.CreateInstance(xmlBytes).Merge(
                                     defaultMessage.WeakCreateBuilderForType()).WeakBuild());
                    RunBenchmark("Deserialize from json", jsonBytes.Length,
                                 () =>
                                 JsonFormatReader.CreateInstance(jsonBytes).Merge(
                                     defaultMessage.WeakCreateBuilderForType()).WeakBuild());
                    RunBenchmark("Deserialize from json via xml", jsonBytes.Length,
                                 () =>
                                 XmlFormatReader.CreateInstance(JsonReaderWriterFactory.CreateJsonReader(jsonBytes, XmlDictionaryReaderQuotas.Max))
                                 .SetOptions(XmlReaderOptions.ReadNestedArrays).Merge(
                                     defaultMessage.WeakCreateBuilderForType()).WeakBuild());

                    RunBenchmark("Deserialize from dictionary", sampleMessage.SerializedSize,
                                 () =>
                                 new DictionaryReader(dictionary).Merge(defaultMessage.WeakCreateBuilderForType()).
                                 WeakBuild());
                }
                WriteLine(String.Empty);
                return(true);
            }
            catch (Exception e)
            {
                Console.Error.WriteLine("Error: {0}", e.Message);
                Console.Error.WriteLine();
                Console.Error.WriteLine("Detailed exception information: {0}", e);
                return(false);
            }
        }
예제 #16
0
 public void FailWithEmptyText()
 {
     Assert.Throws <FormatException>(() => JsonFormatReader.CreateInstance("").Merge(TestXmlMessage.CreateBuilder()));
 }
 public void FailWithUnexpectedValue()
 {
     JsonFormatReader.CreateInstance("{{}}")
     .Merge(TestXmlMessage.CreateBuilder());
 }
예제 #18
0
 public void FailWithUnexpectedType()
 {
     Assert.Throws <FormatException>(() => JsonFormatReader.CreateInstance("{\"valid\":{}}").Merge(TestXmlMessage.CreateBuilder()));
 }
 public void FailWithUnQuotedName()
 {
     JsonFormatReader.CreateInstance("{name:{}}")
     .Merge(TestXmlMessage.CreateBuilder());
 }
 public void FailWithUnexpectedType()
 {
     JsonFormatReader.CreateInstance("{\"valid\":{}}")
     .Merge(TestXmlMessage.CreateBuilder());
 }
예제 #21
0
        // Main
        static void Main(string[] args)
        {
            // Try to load AppSettings.json configuration file first
            var builder = new ConfigurationBuilder()
                          .SetBasePath(Environment.CurrentDirectory)
                          .AddJsonFile(_AppSettingsFileName);

            // Read the AppSettings file and create a ConfigurationRoot object
            var configs = builder.Build();


            // Get the Employee Hierarchy filename from the AppSettings file
            var employeeHierarchyFileName = configs[_AppSetting_HierarchyFileName];

            // Throw exception if there was a problem
            if (String.IsNullOrEmpty(employeeHierarchyFileName))
            {
                throw new ApplicationException($"ERROR :: Problem reading App Setting '{_AppSetting_HierarchyFileName}'!");
            }


            // Create filepath to Employee Hierarchy json file
            var employeeHierarchyFilePath = Path.Combine(Environment.CurrentDirectory, employeeHierarchyFileName);


            // Convert AppSettings parameter 'SortHierarchyOutput' to Boolean
            var castSortEmployeeHierarchySuccess = bool.TryParse(configs[_AppSetting_SortHierarchyOutput], out bool sortEmployeeHierarchy);

            if (castSortEmployeeHierarchySuccess == false)
            {
                throw new ApplicationException($"ERROR :: Problem reading App Setting '{_AppSetting_SortHierarchyOutput}'!");
            }


            // Use the Composition Root & Dependency Injection patterns to compose the application's functionality
            // IFormatReader formatReader = new MockFormatReader();
            IFormatReader formatReader     = new JsonFormatReader(employeeHierarchyFilePath);
            IDataReader   dataReader       = new DataReader(formatReader);
            IDataPrinter  hierarchyPrinter = null;


            // If AppSettings parameter 'SortHierarchyOutput' set to True: create 'SortedHierarchyPrinter'
            //  otherwise, create an unsorted 'HierarchyPrinter'
            if (sortEmployeeHierarchy)
            {
                hierarchyPrinter = new SortedHierarchyPrinter();
            }
            else
            {
                hierarchyPrinter = new HierarchyPrinter();
            }


            // Create the Salaray Requirement Printer
            IDataPrinter salaryRequirementPrinter = new SalaryRequirementPrinter();


            // Read Employee data from the data source
            var rootManager = dataReader.Read();


            // Get String representations for the Employee Hierarchy & Salary Requirement
            var hierarchyString         = hierarchyPrinter.PrintString(rootManager);
            var salaryRequirementString = salaryRequirementPrinter.PrintString(rootManager);


            // Print the Employee Hierarchy & Salary Requirement
            Console.WriteLine(hierarchyString);
            Console.WriteLine(salaryRequirementString);

            // Keep the console window open
            Console.WriteLine("\n\nPress 'enter' to exit...");
            Console.ReadLine();
        }