示例#1
0
        public void ClonedValueTypeIsCorrectType()
        {
            var s1 = new MS1 {
                i = 42
            };
            var s2 = s1;

            Assert.IsTrue((object)s2 is MS1);
        }
示例#2
0
        public void CloningValueTypeWithNamedDefaultConstructorWorks()
        {
            var s1 = new MS1 {
                i = 42
            };
            var s2 = s1;

            Assert.AreEqual(s2.i, 42);
            Assert.IsTrue((object)s2 is MS1);
        }
示例#3
0
        public void PropertiesWithFieldImplementationAreClonedWhenValueTypeIsCopied()
        {
            var s1 = new MS1 {
                P2 = 42
            };
            var s2 = s1;

            Assert.AreEqual(s2.P2, 42);
            s2.P2 = 43;
            Assert.AreEqual(s1.P2, 42);
            Assert.AreEqual(s2.P2, 43);
        }
示例#4
0
        public void AutoPropertyBackingFieldsAreClonedWhenValueTypeIsCopied()
        {
            var s1 = new MS1 {
                P1 = "hello"
            };
            var s2 = s1;

            Assert.AreEqual(s2.P1, "hello");
            s2.P1 = "world";
            Assert.AreEqual(s1.P1, "hello");
            Assert.AreEqual(s2.P1, "world");
        }
示例#5
0
        public void FieldsAreClonedWhenValueTypeIsCopied()
        {
            var s1 = new MS1 {
                i = 42
            };
            var s2 = s1;

            Assert.AreEqual(s2.i, 42);
            s2.i = 43;
            Assert.AreEqual(s1.i, 42);
            Assert.AreEqual(s2.i, 43);
        }
示例#6
0
        public void CloningNullableValueTypesWorks()
        {
            MS1?s1 = null;
            MS1?s2 = new MS1 {
                i = 42
            };
            var s3 = s1;
            var s4 = s2;

            Assert.IsTrue(Script.IsNull(s3), "s3 should be null");
            Assert.AreEqual(s4.Value.i, 42, "s4.i should be 42");
            Assert.IsFalse(ReferenceEquals(s2, s4), "s2 and s4 should not be the same object");
        }
示例#7
0
        public void NestedStructsAreClonedWhenValueTypeIsCopied()
        {
            var s1 = new MS1 {
                N = new MS2 {
                    i = 42
                }
            };
            var s2 = s1;

            Assert.AreEqual(s2.N.i, 42);
            s2.N.i = 43;

            Assert.AreEqual(s1.N.i, 42);
            Assert.AreEqual(s2.N.i, 43);
        }
示例#8
0
        public void AutoEventBackingFieldsAreClonedWhenValueTypeIsCopied()
        {
            int    count = 0;
            Action a     = () => count++;
            var    s1    = new MS1();

            s1.E += a;
            var s2 = s1;

            s2.E += a;

            s1.RaiseE();
            Assert.AreEqual(count, 1);

            s2.RaiseE();
            Assert.AreEqual(count, 3);
        }
示例#9
0
        public void AutoEventBackingFieldsAreClonedWhenValueTypeIsCopied_SPI_1612()
        {
            int    count = 0;
            Action a     = () => count++;
            var    s1    = new MS1();

            s1.E += a;
            var s2 = s1;

            s2.E += a;

            s1.RaiseE();
            Assert.AreEqual(1, count);

            s2.RaiseE();
            // #1612
            Assert.AreEqual(3, count);
        }
示例#10
0
        public void NestedStructsAreClonedWhenValueTypeIsCopied_SPI_1613()
        {
            var s1 = new MS1
            {
                N = new MS2
                {
                    i = 42
                }
            };
            var s2 = s1;

            Assert.AreEqual(42, s2.N.i);
            s2.N.i = 43;
            // #1613
            Assert.AreEqual(42, s1.N.i);

            Assert.AreEqual(43, s2.N.i);
        }