@@ -39,6 +39,58 @@ public void CanGetAsString(Variant v, Variant s)
39
39
Assert . AreEqual ( value , v . ToString ( ) ) ;
40
40
}
41
41
42
+ [ Test ]
43
+ public void VariantDoesntStoreVariant ( )
44
+ {
45
+ Variant a = new ( "hi" ) ;
46
+ Variant b = new ( a ) ;
47
+
48
+ Assert . AreEqual ( a , b ) ;
49
+ Assert . AreEqual ( typeof ( string ) , b . Type ) ;
50
+ }
51
+
52
+ [ Test ]
53
+ public void VariantAssignmentHasReferenceSemantics ( )
54
+ {
55
+ // Variant should use reference semantics with reference types
56
+ // so that it behaves like object in these cases.
57
+ //
58
+ // e.g. since:
59
+ // List<string> list = new List<string> { "1" };
60
+ // object oa = list;
61
+ // object ob = oa;
62
+ // list[0] = "2";
63
+ //
64
+ // Assert.AreEqual("2", list[0]);
65
+ // Assert.AreEqual("2", ((List<string>)oa)[0]);
66
+ // Assert.AreEqual("2", ((List<string>)ob)[0]);
67
+ //
68
+ // Variant should do the same.
69
+ // The following test validates this functionality.
70
+
71
+ List < string > list = new List < string > { "1" } ;
72
+ Variant a = new ( list ) ;
73
+
74
+ Assert . AreEqual ( "1" , list [ 0 ] ) ;
75
+ Assert . AreEqual ( "1" , a . As < List < string > > ( ) [ 0 ] ) ;
76
+
77
+ list [ 0 ] = "2" ;
78
+
79
+ Assert . AreEqual ( "2" , list [ 0 ] ) ;
80
+ Assert . AreEqual ( "2" , a . As < List < string > > ( ) [ 0 ] ) ;
81
+
82
+ Variant b = new ( a ) ;
83
+
84
+ Assert . AreEqual ( a , b ) ;
85
+ Assert . AreEqual ( "2" , b . As < List < string > > ( ) [ 0 ] ) ;
86
+
87
+ list [ 0 ] = "3" ;
88
+
89
+ Assert . AreEqual ( "3" , list [ 0 ] ) ;
90
+ Assert . AreEqual ( "3" , a . As < List < string > > ( ) [ 0 ] ) ;
91
+ Assert . AreEqual ( "3" , b . As < List < string > > ( ) [ 0 ] ) ;
92
+ }
93
+
42
94
#region Helpers
43
95
public static IEnumerable < Variant [ ] > VariantValues ( )
44
96
{
0 commit comments