public void ParseValue_With_Noncoordinate_Throws()
        {
            var type = new GeoJSONPositionScalar();
            var item = "this is not a coordinate";

            Assert.Throws <ArgumentException>(() => type.ParseValue(item));
        }
        public void ParseValue_With_Null()
        {
            var type   = new GeoJSONPositionScalar();
            var result = type.ParseValue(null);

            Assert.Null(Assert.IsType <NullValueNode>(result).Value);
        }
        public void ParseLiteral_With_Invalid_Coordinates_Throws()
        {
            var type       = new GeoJSONPositionScalar();
            var coordinate = new StringValueNode("2.2");

            Assert.Throws <ScalarSerializationException>(() => type.ParseLiteral(coordinate));
        }
        public void ParseLiteral_Null_Throws()
        {
            var        type       = new GeoJSONPositionScalar();
            IValueNode coordinate = null;

            Assert.Throws <ArgumentNullException>(() => type.ParseLiteral(coordinate));
        }
        public void ParseLiteral_NullType_Null()
        {
            var type       = new GeoJSONPositionScalar();
            var coordinate = NullValueNode.Default;

            object result = type.ParseLiteral(coordinate);

            Assert.Null(result);
        }
        public void ParseValue_With_2Valid_Coordinates()
        {
            var type       = new GeoJSONPositionScalar();
            var coordinate = new Coordinate(1.1, 2.2);

            var result = type.ParseValue(coordinate);

            Assert.Equal("1.10", Assert.IsType <ListValueNode>(result).Items[0].Value);
            Assert.Equal("2.20", Assert.IsType <ListValueNode>(result).Items[1].Value);
        }
        public void TryDeserialize_With_Null()
        {
            var    type  = new GeoJSONPositionScalar();
            object input = null;

            var result = type.TryDeserialize(input, out var value);

            Assert.True(result);
            Assert.Null(value);
        }
        public void TryDeserialize_With_Non_List()
        {
            var type  = new GeoJSONPositionScalar();
            var input = "not null and not a list";

            var result = type.TryDeserialize(input, out var value);

            Assert.False(result);
            Assert.Null(value);
        }
        public void TrySerialize_With_Invalid_Object()
        {
            var type  = new GeoJSONPositionScalar();
            var input = "not a coordinate";

            var result = type.TrySerialize(input, out var value);

            Assert.False(result);
            Assert.Null(value);
        }
        public void TrySerialize_With_Nan_3dCoordinate()
        {
            var type  = new GeoJSONPositionScalar();
            var input = new CoordinateZ(1, 2, double.NaN);

            var result = type.TrySerialize(input, out var value);

            Assert.True(result);
            Assert.Equal(2, Assert.IsType <double[]>(value).Length);
            Assert.Equal(new [] { 1D, 2D }, Assert.IsType <double[]>(value));
        }
        public void IsInstanceOfType_Invalid2ElementCoordinate_False()
        {
            // arrange
            var type       = new GeoJSONPositionScalar();
            var coordinate = new ListValueNode(new StringValueNode("1"), new FloatValueNode(1.2));

            // act
            bool result = type.IsInstanceOfType(coordinate);

            // assert
            Assert.False(result);
        }
        public void IsInstanceOfType_NullType_True()
        {
            // arrange
            var type       = new GeoJSONPositionScalar();
            var coordinate = NullValueNode.Default;

            // act
            bool result = type.IsInstanceOfType(coordinate);

            // assert
            Assert.True(result);
        }
        public void TryDeserialize_With_Invalid_3rdElement_Type3()
        {
            var type  = new GeoJSONPositionScalar();
            var input = new List <object>()
            {
                1, 2, double.NegativeInfinity
            };

            var result = type.TryDeserialize(input, out var value);

            Assert.False(result);
            Assert.Null(value);
        }
        public void TryDeserialize_With_Invalid_Element_Type2()
        {
            var type  = new GeoJSONPositionScalar();
            var input = new List <object>()
            {
                1, DateTime.Now
            };

            var result = type.TryDeserialize(input, out var value);

            Assert.False(result);
            Assert.Null(value);
        }
        public void TryDeserialize_With_Too_Few_Elements()
        {
            var type  = new GeoJSONPositionScalar();
            var input = new List <object>()
            {
                1
            };

            var result = type.TryDeserialize(input, out var value);

            Assert.False(result);
            Assert.Null(value);
        }
        public void ParseLiteral_With_2Valid_Coordinates()
        {
            var type       = new GeoJSONPositionScalar();
            var coordinate = new ListValueNode(
                new FloatValueNode(1.0),
                new IntValueNode(2)
                );

            var result = type.ParseLiteral(coordinate);

            Assert.Equal(1.0, Assert.IsType <Coordinate>(result).X);
            Assert.Equal(2, Assert.IsType <Coordinate>(result).Y);
        }
        public void IsInstanceOfType_Valid3ElementCoordinate_True()
        {
            // arrange
            var type       = new GeoJSONPositionScalar();
            var coordinate = new ListValueNode(
                new IntValueNode(1), new FloatValueNode(1.2), new FloatValueNode(3.2));

            // act
            bool result = type.IsInstanceOfType(coordinate);

            // assert
            Assert.True(result);
        }
        public void TryDeserialize_With_Valid_2Elements()
        {
            var type  = new GeoJSONPositionScalar();
            var input = new List <object>()
            {
                1, 2
            };

            var result = type.TryDeserialize(input, out var value);

            Assert.True(result);
            Assert.Equal(1, Assert.IsType <Coordinate>(value).X);
            Assert.Equal(2, Assert.IsType <Coordinate>(value).Y);
        }
        public void IsInstanceOfType_2ListElementCoordinate_False()
        {
            // arrange
            var type       = new GeoJSONPositionScalar();
            var coordinate = new ListValueNode(
                new ListValueNode(new FloatValueNode(1.1), new FloatValueNode(1.2)),
                new ListValueNode(new FloatValueNode(1.1), new FloatValueNode(1.2)));

            // act
            var result = type.IsInstanceOfType(coordinate);

            // assert
            Assert.False(result);
        }
        public void IsInstanceOfType_Invalid4ElementCoordinate_False()
        {
            var type       = new GeoJSONPositionScalar();
            var coordinate = new ListValueNode(
                new IntValueNode(1),
                new IntValueNode(2),
                new IntValueNode(3),
                new IntValueNode(4)
                );

            bool result = type.IsInstanceOfType(coordinate);

            Assert.False(result);
        }