@@ -97,6 +97,93 @@ public void Add_DoesNothing_GivenInvalidState()
9797 value . Should ( ) . BeEquivalentTo ( new string [ ] { "foo" , "bar" } ) ;
9898 }
9999
100+ [ Fact ]
101+ public void AddSorted_CreatesSingleItem_GivenEmptyStruct ( )
102+ {
103+ var oneOrMany = new OneOrMany < string > ( ) ;
104+ oneOrMany . AddSorted ( "foo" , Comparer < string > . Default ) ;
105+
106+ var value = Accessors . ValueOf ( ref oneOrMany ) ;
107+ value . Should ( ) . BeOfType < string > ( ) ;
108+ value . Should ( ) . Be ( "foo" ) ;
109+ }
110+
111+ [ Fact ]
112+ public void AddSorted_InsertsInPosition_GivenSingleItem ( )
113+ {
114+ var oneOrMany = new OneOrMany < string > ( ) ;
115+ Accessors . ValueOf ( ref oneOrMany ) = "foo";
116+
117+ oneOrMany . AddSorted ( "bar" , Comparer < string > . Default ) ;
118+
119+ var value = Accessors . ValueOf ( ref oneOrMany ) ;
120+ value . Should ( ) . BeOfType < List < string > > ( ) ;
121+ value . Should ( ) . BeEquivalentTo ( new List < string > { "bar" , "foo" } ) ;
122+ }
123+
124+ [ Fact ]
125+ public void AddSorted_AddsToTheEnd_GivenSingleItem ( )
126+ {
127+ var oneOrMany = new OneOrMany < string > ( ) ;
128+ Accessors . ValueOf ( ref oneOrMany ) = "bar";
129+
130+ oneOrMany . AddSorted ( "foo" , Comparer < string > . Default ) ;
131+
132+ var value = Accessors . ValueOf ( ref oneOrMany ) ;
133+ value . Should ( ) . BeOfType < List < string > > ( ) ;
134+ value . Should ( ) . BeEquivalentTo ( new List < string > { "bar" , "foo" } ) ;
135+ }
136+
137+ [ Fact ]
138+ public void AddSorted_InsertsInPosition_GivenTwoItems ( )
139+ {
140+ var oneOrMany = new OneOrMany < string > ( ) ;
141+ Accessors . ValueOf ( ref oneOrMany ) = new List < string > { "bar" , "foo" } ;
142+
143+ oneOrMany . AddSorted ( "baz" , Comparer < string > . Default ) ;
144+
145+ var value = Accessors . ValueOf ( ref oneOrMany ) ;
146+ value . Should ( ) . BeOfType < List < string > > ( ) ;
147+ value . Should ( ) . BeEquivalentTo ( new List < string > { "bar" , "baz" , "foo" } ) ;
148+ }
149+
150+ [ Fact ]
151+ public void AddSorted_AddsToTheEnd_GivenTwoItems ( )
152+ {
153+ var oneOrMany = new OneOrMany < string > ( ) ;
154+ Accessors . ValueOf ( ref oneOrMany ) = new List < string > { "bar" , "baz" } ;
155+
156+ oneOrMany . AddSorted ( "foo" , Comparer < string > . Default ) ;
157+
158+ var value = Accessors . ValueOf ( ref oneOrMany ) ;
159+ value . Should ( ) . BeOfType < List < string > > ( ) ;
160+ value . Should ( ) . BeEquivalentTo ( new List < string > { "bar" , "baz" , "foo" } ) ;
161+ }
162+
163+ [ Fact ]
164+ public void AddSorted_ThrowsArgumentNullException_GivenNullComparer ( )
165+ {
166+ var oneOrMany = new OneOrMany < string > ( ) ;
167+ Accessors . ValueOf ( ref oneOrMany ) = new List < string > { "bar" , "baz" } ;
168+
169+ var action = ( ) => oneOrMany . AddSorted ( "foo" , null ! ) ;
170+
171+ action . Should ( ) . Throw < ArgumentNullException > ( ) ;
172+ }
173+
174+ [ Fact ]
175+ public void AddSorted_DoesNothing_GivenInvalidState ( )
176+ {
177+ var oneOrMany = new OneOrMany < string > ( ) ;
178+ Accessors . ValueOf ( ref oneOrMany ) = new string [ ] { "foo" , "bar" } ;
179+
180+ oneOrMany . AddSorted ( "baz" , Comparer < string > . Default ) ;
181+
182+ var value = Accessors . ValueOf ( ref oneOrMany ) ;
183+ value . Should ( ) . BeOfType < string [ ] > ( ) ;
184+ value . Should ( ) . BeEquivalentTo ( new string [ ] { "foo" , "bar" } ) ;
185+ }
186+
100187 [ Fact ]
101188 public void Single_ReturnsSingleItem_GivenSingleItem ( )
102189 {
@@ -125,6 +212,32 @@ public void Single_Throws_GivenMultipleItems()
125212 action . Should ( ) . Throw < InvalidOperationException > ( ) ;
126213 }
127214
215+ [ Fact ]
216+ public void SingleOrDefault_ReturnsSingleItem_GivenSingleItem ( )
217+ {
218+ var oneOrMany = new OneOrMany < string > ( ) ;
219+ Accessors . ValueOf ( ref oneOrMany ) = "foo";
220+
221+ oneOrMany . SingleOrDefault . Should ( ) . Be ( "foo" ) ;
222+ }
223+
224+ [ Fact ]
225+ public void SingleOrDefault_ReturnsDefault_GivenEmptyStruct ( )
226+ {
227+ var oneOrMany = new OneOrMany < string > ( ) ;
228+
229+ oneOrMany . SingleOrDefault . Should ( ) . BeNull ( ) ;
230+ }
231+
232+ [ Fact ]
233+ public void SingleOrDefault_ReturnsDefault_GivenMultipleItems ( )
234+ {
235+ var oneOrMany = new OneOrMany < string > ( ) ;
236+ Accessors . ValueOf ( ref oneOrMany ) = new string [ ] { "foo" , "bar" } ;
237+
238+ oneOrMany . SingleOrDefault . Should ( ) . BeNull ( ) ;
239+ }
240+
128241 [ Fact ]
129242 public void Values_ReturnsEmpty_GivenEmptyStruct ( )
130243 {
0 commit comments