示例#1
0
        public void DeserializeCustomUnitAsPredefined_ShouldReturnValidResult()
        {
            // arrange
            var someUnit = new LengthUnit(
                name: "some unit",
                abbreviation: "su",
                valueInMetres: (number)123.456m);
            string json      = @"{
  'unit': 'su'
}";
            var    converter = new LengthUnitJsonConverter(
                serializationFormat: LinearUnitJsonSerializationFormat.PredefinedAsString,
                tryReadCustomPredefinedUnit: (string value, out LengthUnit predefinedUnit) =>
            {
                if (value == someUnit.Abbreviation)
                {
                    predefinedUnit = someUnit;
                    return(true);
                }

                predefinedUnit = default(LengthUnit);
                return(false);
            });

            // act
            var result = JsonConvert.DeserializeObject <SomeUnitOwner <LengthUnit> >(json, converter);

            // assert
            result.Unit.Should().Be(someUnit);
        }
示例#2
0
        public void SerializePredefinedUnit_ShouldReturnValidJson(LinearUnitJsonSerializationFormat serializationFormat, string expectedJsonPattern)
        {
            // arrange
            var unit      = LengthUnit.Kilometre;
            var converter = new LengthUnitJsonConverter(serializationFormat);

            // act
            string actualJson = JsonConvert.SerializeObject(new SomeUnitOwner <LengthUnit> {
                Unit = unit
            }, converter);

            // assert
            actualJson.Should().MatchRegex(expectedJsonPattern);
        }
示例#3
0
        public void DeserializePredefinedUnitString_ShouldReturnValidResult(LengthUnit expectedUnit)
        {
            // arrange
            string json      = $@"{{
  'unit': '{expectedUnit.Abbreviation}'
}}";
            var    converter = new LengthUnitJsonConverter();

            // act
            var result = JsonConvert.DeserializeObject <SomeUnitOwner <LengthUnit> >(json, converter);

            // assert
            result.Unit.Should().Be(expectedUnit);
        }
示例#4
0
        public void DeserializeCustomUnit_ShouldReturnValidResult()
        {
            // arrange
            string json      = @"{
  'name': 'some unit',
  'abbreviation': 'su',
  'valueInMetres': 123.456
}";
            var    converter = new LengthUnitJsonConverter();

            // act
            var result = JsonConvert.DeserializeObject <LengthUnit>(json, converter);

            // assert
            result.Name.Should().Be("some unit");
            result.Abbreviation.Should().Be("su");
            result.ValueInMetres.Should().Be((number)123.456m);
        }
示例#5
0
        public void SerializeAndDeserialize_ShouldBeIdempotent(LinearUnitJsonSerializationFormat serializationFormat)
        {
            // arrange
            var obj = new SomeUnitOwner <LengthUnit> {
                Unit = Fixture.Create <LengthUnit>()
            };
            var converter = new LengthUnitJsonConverter(serializationFormat);

            // act
            string serializedObj1   = JsonConvert.SerializeObject(obj, converter);
            var    deserializedObj1 = JsonConvert.DeserializeObject <SomeUnitOwner <LengthUnit> >(serializedObj1, converter);
            string serializedObj2   = JsonConvert.SerializeObject(deserializedObj1, converter);
            var    deserializedObj2 = JsonConvert.DeserializeObject <SomeUnitOwner <LengthUnit> >(serializedObj2, converter);

            // assert
            deserializedObj1.Unit.Should().Be(obj.Unit);
            deserializedObj2.Unit.Should().Be(obj.Unit);

            deserializedObj2.Unit.Should().Be(deserializedObj1.Unit);
            serializedObj2.Should().Be(serializedObj1);
        }