示例#1
0
        public void ClassWithOneNullInnerClassContentsShouldReturnVariance()
        {
            // Arrange
            var inner = new ImmutableClass(2, "test");
            var c1    = new MutableClass
            {
                Int1       = 1,
                String1    = "test",
                Immutable1 = inner
            };

            var c2 = new MutableClass
            {
                Int1       = 1,
                String1    = "test",
                Immutable1 = null
            };

            // Act
            List <ObjectVariance> variances = ObjectComparer.GetObjectVariances(c1, c2).ToList();

            // Assert
            Assert.NotEmpty(variances);
            Assert.Equal(1, variances.Count);
            Assert.Equal("Immutable1", variances[0].PropertyName);
            Assert.Equal(inner, variances[0].PropertyValue1);
            Assert.Null(variances[0].PropertyValue2);

            // Parent
            Assert.NotNull(variances[0].ParentVariance);
            Assert.Null(variances[0].ParentVariance.PropertyName);
            Assert.Equal(c1, variances[0].ParentVariance.PropertyValue1);
            Assert.Equal(c2, variances[0].ParentVariance.PropertyValue2);
            Assert.Null(variances[0].ParentVariance.ParentVariance);
        }
示例#2
0
        public void ClassWithOneNullStringShouldReturnVariance()
        {
            // Assert
            var c1 = new MutableClass
            {
                Int1    = 1,
                String1 = null
            };

            var c2 = new MutableClass
            {
                Int1    = 1,
                String1 = "test"
            };

            // Act
            List <ObjectVariance> variances = ObjectComparer.GetObjectVariances(c1, c2).ToList();

            // Assert
            Assert.NotEmpty(variances);
            Assert.Equal(1, variances.Count);
            Assert.Equal("String1", variances[0].PropertyName);
            Assert.Null(variances[0].PropertyValue1);
            Assert.Equal("test", variances[0].PropertyValue2);

            // Parent
            Assert.NotNull(variances[0].ParentVariance);
            Assert.Null(variances[0].ParentVariance.PropertyName);
            Assert.Equal(c1, variances[0].ParentVariance.PropertyValue1);
            Assert.Equal(c2, variances[0].ParentVariance.PropertyValue2);
            Assert.Null(variances[0].ParentVariance.ParentVariance);
        }
示例#3
0
        static void Main()
        {
#if InvalidCode
            // これは許されない。c は readonly なので、c 自体の書き換えはできない
            c = new MutableClass();
#endif

            // けども、c の中身までは保証してない
            // 書き換え放題
            c.X = 1;
            c.Y = 2;
            c.M(3);
        }
示例#4
0
        public void ClassWithTwoDifferencesShouldReturnTwoVariances()
        {
            // Arrange
            var c1 = new MutableClass
            {
                Int1    = 1,
                String1 = "Tast"
            };

            var c2 = new MutableClass
            {
                Int1    = 2,
                String1 = "Test"
            };

            // Act
            List <ObjectVariance> variances = ObjectComparer.GetObjectVariances(c1, c2).ToList();

            // Assert
            Assert.NotEmpty(variances);
            Assert.Equal(2, variances.Count);

            // First variance
            Assert.Equal("Int1", variances[0].PropertyName);
            Assert.Equal(1, variances[0].PropertyValue1);
            Assert.Equal(2, variances[0].PropertyValue2);

            // First's parent
            Assert.NotNull(variances[0].ParentVariance);
            Assert.Null(variances[0].ParentVariance.PropertyName);
            Assert.Equal(c1, variances[0].ParentVariance.PropertyValue1);
            Assert.Equal(c2, variances[0].ParentVariance.PropertyValue2);

            // Second variance
            Assert.Equal("String1", variances[1].PropertyName);
            Assert.Equal("Tast", variances[1].PropertyValue1);
            Assert.Equal("Test", variances[1].PropertyValue2);

            // Second's parent
            Assert.NotNull(variances[1].ParentVariance);
            Assert.Null(variances[1].ParentVariance.PropertyName);
            Assert.Equal(c1, variances[1].ParentVariance.PropertyValue1);
            Assert.Equal(c2, variances[1].ParentVariance.PropertyValue2);
            Assert.Null(variances[1].ParentVariance.ParentVariance);
        }
示例#5
0
        public void ClassWithNullStringsShouldReturnNoVariance()
        {
            // Assert
            var c1 = new MutableClass
            {
                Int1    = 1,
                String1 = null
            };

            var c2 = new MutableClass
            {
                Int1    = 1,
                String1 = null
            };

            // Act
            List <ObjectVariance> variances = ObjectComparer.GetObjectVariances(c1, c2).ToList();

            // Assert
            Assert.Empty(variances);
        }
示例#6
0
        public void ClassWithSameInnerClassContentsShouldReturnNoVariance()
        {
            // Arrange
            var c1 = new MutableClass
            {
                Int1       = 1,
                String1    = "test",
                Immutable1 = new ImmutableClass(2, "test2")
            };

            var c2 = new MutableClass
            {
                Int1       = 1,
                String1    = "test",
                Immutable1 = new ImmutableClass(2, "test2")
            };

            // Act
            List <ObjectVariance> variances = ObjectComparer.GetObjectVariances(c1, c2).ToList();

            // Arrange
            Assert.Empty(variances);
        }
示例#7
0
 public void IncrementInstanceField2(MutableClass m)
 {
     m.Field++;
 }
示例#8
0
 public int PostIncrementInstanceField2(MutableClass m)
 {
     return(m.Field++);
 }
示例#9
0
 public int PreIncrementInstanceField2(MutableClass m)
 {
     return(++m.Field);
 }