public void ValidJsonFormatReaderCreationTest() { IFormatReader jsonFormatReader = new JsonFormatReader("c:/TestFilePath.json"); Assert.NotNull(jsonFormatReader); Assert.IsType <JsonFormatReader>(jsonFormatReader); }
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); }
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); }
public void JsonFormatReaderReadTest() { Assert.Throws <ArgumentException>(() => { var jsonFormatReader = new JsonFormatReader(""); jsonFormatReader.Read(); }); }
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); }
/// <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)); }
/// <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)); }
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 '}' }
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); }
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); }
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); } }
public void FailWithUnQuotedName() { Assert.Throws <FormatException>(() => JsonFormatReader.CreateInstance("{name:{}}").Merge(TestXmlMessage.CreateBuilder())); }
public void FailWithEmptyText() { JsonFormatReader.CreateInstance("") .Merge(TestXmlMessage.CreateBuilder()); }
protected override TBuilder DeserializeMessage <TMessage, TBuilder>(object message, TBuilder builder, ExtensionRegistry registry) { JsonFormatReader.CreateInstance((string)message).Merge(builder); return(builder); }
/// <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); } }
public void FailWithEmptyText() { Assert.Throws <FormatException>(() => JsonFormatReader.CreateInstance("").Merge(TestXmlMessage.CreateBuilder())); }
public void FailWithUnexpectedValue() { JsonFormatReader.CreateInstance("{{}}") .Merge(TestXmlMessage.CreateBuilder()); }
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()); }
// 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(); }