22using FluentAssertions ;
33using HandlebarsDotNet . Helpers . Helpers ;
44using Moq ;
5+ using Newtonsoft . Json . Linq ;
6+ using System ;
57using Xunit ;
68
79namespace HandlebarsDotNet . Helpers . Tests . Helpers ;
@@ -39,4 +41,207 @@ public void ToStringWithNullValue()
3941 // Assert
4042 result . Should ( ) . Be ( string . Empty ) ;
4143 }
44+
45+ [ CulturedTheory ( "en-us" ) ]
46+ [ InlineData ( nameof ( ObjectHelpers . Equal ) , "2000-01-01 0:00:00" , "2000-01-01 0:00:00" , true ) ]
47+ [ InlineData ( nameof ( ObjectHelpers . Equal ) , "1999-01-01 0:00:00" , "2000-01-01 0:00:00" , false ) ]
48+ [ InlineData ( nameof ( ObjectHelpers . Equal ) , "2000-01-01 0:00:00" , "1999-01-01 0:00:00" , false ) ]
49+ [ InlineData ( nameof ( ObjectHelpers . NotEqual ) , "2000-01-01 0:00:00" , "2000-01-01 0:00:00" , false ) ]
50+ [ InlineData ( nameof ( ObjectHelpers . NotEqual ) , "1999-01-01 0:00:00" , "2000-01-01 0:00:00" , true ) ]
51+ [ InlineData ( nameof ( ObjectHelpers . NotEqual ) , "2000-01-01 0:00:00" , "1999-01-01 0:00:00" , true ) ]
52+ [ InlineData ( nameof ( ObjectHelpers . GreaterThan ) , "2000-01-01 0:00:00" , "2000-01-01 0:00:00" , false ) ]
53+ [ InlineData ( nameof ( ObjectHelpers . GreaterThan ) , "1999-01-01 0:00:00" , "2000-01-01 0:00:00" , false ) ]
54+ [ InlineData ( nameof ( ObjectHelpers . GreaterThan ) , "2000-01-01 0:00:00" , "1999-01-01 0:00:00" , true ) ]
55+ [ InlineData ( nameof ( ObjectHelpers . GreaterThanEqual ) , "2000-01-01 0:00:00" , "2000-01-01 0:00:00" , true ) ]
56+ [ InlineData ( nameof ( ObjectHelpers . GreaterThanEqual ) , "1999-01-01 0:00:00" , "2000-01-01 0:00:00" , false ) ]
57+ [ InlineData ( nameof ( ObjectHelpers . GreaterThanEqual ) , "2000-01-01 0:00:00" , "1999-01-01 0:00:00" , true ) ]
58+ [ InlineData ( nameof ( ObjectHelpers . LowerThan ) , "2000-01-01 0:00:00" , "2000-01-01 0:00:00" , false ) ]
59+ [ InlineData ( nameof ( ObjectHelpers . LowerThan ) , "1999-01-01 0:00:00" , "2000-01-01 0:00:00" , true ) ]
60+ [ InlineData ( nameof ( ObjectHelpers . LowerThan ) , "2000-01-01 0:00:00" , "1999-01-01 0:00:00" , false ) ]
61+ [ InlineData ( nameof ( ObjectHelpers . LowerThanEqual ) , "2000-01-01 0:00:00" , "2000-01-01 0:00:00" , true ) ]
62+ [ InlineData ( nameof ( ObjectHelpers . LowerThanEqual ) , "1999-01-01 0:00:00" , "2000-01-01 0:00:00" , true ) ]
63+ [ InlineData ( nameof ( ObjectHelpers . LowerThanEqual ) , "2000-01-01 0:00:00" , "1999-01-01 0:00:00" , false ) ]
64+ public void All_Compare_Using_DateTime ( string method , string value1 , string value2 , bool expected )
65+ {
66+ // Act
67+ var result = ActTestCompare ( method , DateTime . Parse ( value1 ) , DateTime . Parse ( value2 ) ) ;
68+
69+ // Assert
70+ result . Should ( ) . Be ( expected ) ;
71+ }
72+
73+ [ Theory ]
74+ [ InlineData ( nameof ( ObjectHelpers . Equal ) , 0 , 0 , true ) ]
75+ [ InlineData ( nameof ( ObjectHelpers . Equal ) , 1 , 0 , false ) ]
76+ [ InlineData ( nameof ( ObjectHelpers . Equal ) , 0 , 1 , false ) ]
77+ [ InlineData ( nameof ( ObjectHelpers . NotEqual ) , 0 , 0 , false ) ]
78+ [ InlineData ( nameof ( ObjectHelpers . NotEqual ) , 1 , 0 , true ) ]
79+ [ InlineData ( nameof ( ObjectHelpers . NotEqual ) , 0 , 1 , true ) ]
80+ [ InlineData ( nameof ( ObjectHelpers . GreaterThan ) , 0 , 0 , false ) ]
81+ [ InlineData ( nameof ( ObjectHelpers . GreaterThan ) , 1 , 0 , true ) ]
82+ [ InlineData ( nameof ( ObjectHelpers . GreaterThan ) , 0 , 1 , false ) ]
83+ [ InlineData ( nameof ( ObjectHelpers . GreaterThanEqual ) , 0 , 0 , true ) ]
84+ [ InlineData ( nameof ( ObjectHelpers . GreaterThanEqual ) , 1 , 0 , true ) ]
85+ [ InlineData ( nameof ( ObjectHelpers . GreaterThanEqual ) , 0 , 1 , false ) ]
86+ [ InlineData ( nameof ( ObjectHelpers . LowerThan ) , 0 , 0 , false ) ]
87+ [ InlineData ( nameof ( ObjectHelpers . LowerThan ) , 1 , 0 , false ) ]
88+ [ InlineData ( nameof ( ObjectHelpers . LowerThan ) , 0 , 1 , true ) ]
89+ [ InlineData ( nameof ( ObjectHelpers . LowerThanEqual ) , 0 , 0 , true ) ]
90+ [ InlineData ( nameof ( ObjectHelpers . LowerThanEqual ) , 1 , 0 , false ) ]
91+ [ InlineData ( nameof ( ObjectHelpers . LowerThanEqual ) , 0 , 1 , true ) ]
92+ public void All_Compare_Using_Int ( string method , object value1 , object value2 , bool expected )
93+ {
94+ // Act
95+ var result = ActTestCompare ( method , value1 , value2 ) ;
96+
97+ // Assert
98+ result . Should ( ) . Be ( expected ) ;
99+ }
100+
101+ [ Theory ]
102+ [ InlineData ( nameof ( ObjectHelpers . Equal ) , 0 , 0 , true ) ]
103+ [ InlineData ( nameof ( ObjectHelpers . Equal ) , 1 , 0 , false ) ]
104+ [ InlineData ( nameof ( ObjectHelpers . Equal ) , 0 , 1 , false ) ]
105+ [ InlineData ( nameof ( ObjectHelpers . NotEqual ) , 0 , 0 , false ) ]
106+ [ InlineData ( nameof ( ObjectHelpers . NotEqual ) , 1 , 0 , true ) ]
107+ [ InlineData ( nameof ( ObjectHelpers . NotEqual ) , 0 , 1 , true ) ]
108+ [ InlineData ( nameof ( ObjectHelpers . GreaterThan ) , 0 , 0 , false ) ]
109+ [ InlineData ( nameof ( ObjectHelpers . GreaterThan ) , 1 , 0 , true ) ]
110+ [ InlineData ( nameof ( ObjectHelpers . GreaterThan ) , 0 , 1 , false ) ]
111+ [ InlineData ( nameof ( ObjectHelpers . GreaterThanEqual ) , 0 , 0 , true ) ]
112+ [ InlineData ( nameof ( ObjectHelpers . GreaterThanEqual ) , 1 , 0 , true ) ]
113+ [ InlineData ( nameof ( ObjectHelpers . GreaterThanEqual ) , 0 , 1 , false ) ]
114+ [ InlineData ( nameof ( ObjectHelpers . LowerThan ) , 0 , 0 , false ) ]
115+ [ InlineData ( nameof ( ObjectHelpers . LowerThan ) , 1 , 0 , false ) ]
116+ [ InlineData ( nameof ( ObjectHelpers . LowerThan ) , 0 , 1 , true ) ]
117+ [ InlineData ( nameof ( ObjectHelpers . LowerThanEqual ) , 0 , 0 , true ) ]
118+ [ InlineData ( nameof ( ObjectHelpers . LowerThanEqual ) , 1 , 0 , false ) ]
119+ [ InlineData ( nameof ( ObjectHelpers . LowerThanEqual ) , 0 , 1 , true ) ]
120+ public void All_Compare_Using_Custom_Object ( string method , int value1 , int value2 , bool expected )
121+ {
122+ // Act
123+ var result = ActTestCompare ( method , new CustomObject ( value1 ) , new CustomObject ( value2 ) ) ;
124+
125+ // Assert
126+ result . Should ( ) . Be ( expected ) ;
127+ }
128+
129+ [ Theory ]
130+ [ InlineData ( nameof ( ObjectHelpers . Equal ) , "a" , "a" , true ) ]
131+ [ InlineData ( nameof ( ObjectHelpers . Equal ) , "a" , "b" , false ) ]
132+ [ InlineData ( nameof ( ObjectHelpers . Equal ) , "b" , "a" , false ) ]
133+ [ InlineData ( nameof ( ObjectHelpers . NotEqual ) , "a" , "a" , false ) ]
134+ [ InlineData ( nameof ( ObjectHelpers . NotEqual ) , "a" , "b" , true ) ]
135+ [ InlineData ( nameof ( ObjectHelpers . NotEqual ) , "b" , "a" , true ) ]
136+ [ InlineData ( nameof ( ObjectHelpers . GreaterThan ) , "a" , "a" , false ) ]
137+ [ InlineData ( nameof ( ObjectHelpers . GreaterThan ) , "a" , "b" , false ) ]
138+ [ InlineData ( nameof ( ObjectHelpers . GreaterThan ) , "b" , "a" , true ) ]
139+ [ InlineData ( nameof ( ObjectHelpers . GreaterThanEqual ) , "a" , "a" , true ) ]
140+ [ InlineData ( nameof ( ObjectHelpers . GreaterThanEqual ) , "a" , "b" , false ) ]
141+ [ InlineData ( nameof ( ObjectHelpers . GreaterThanEqual ) , "b" , "a" , true ) ]
142+ [ InlineData ( nameof ( ObjectHelpers . LowerThan ) , "a" , "a" , false ) ]
143+ [ InlineData ( nameof ( ObjectHelpers . LowerThan ) , "a" , "b" , true ) ]
144+ [ InlineData ( nameof ( ObjectHelpers . LowerThan ) , "b" , "a" , false ) ]
145+ [ InlineData ( nameof ( ObjectHelpers . LowerThanEqual ) , "a" , "a" , true ) ]
146+ [ InlineData ( nameof ( ObjectHelpers . LowerThanEqual ) , "a" , "b" , true ) ]
147+ [ InlineData ( nameof ( ObjectHelpers . LowerThanEqual ) , "b" , "a" , false ) ]
148+ public void All_Compare_Using_String ( string method , object value1 , object value2 , bool expected )
149+ {
150+ // Act
151+ var result = ActTestCompare ( method , value1 , value2 ) ;
152+
153+ // Assert
154+ result . Should ( ) . Be ( expected ) ;
155+ }
156+
157+ [ Theory ]
158+ [ InlineData ( nameof ( ObjectHelpers . Equal ) , null , null , true ) ]
159+ [ InlineData ( nameof ( ObjectHelpers . Equal ) , "a" , null , false ) ]
160+ [ InlineData ( nameof ( ObjectHelpers . Equal ) , null , "a" , false ) ]
161+ [ InlineData ( nameof ( ObjectHelpers . NotEqual ) , null , null , false ) ]
162+ [ InlineData ( nameof ( ObjectHelpers . NotEqual ) , "a" , null , true ) ]
163+ [ InlineData ( nameof ( ObjectHelpers . NotEqual ) , null , "a" , true ) ]
164+ [ InlineData ( nameof ( ObjectHelpers . GreaterThan ) , null , null , false ) ]
165+ [ InlineData ( nameof ( ObjectHelpers . GreaterThan ) , "a" , null , false ) ]
166+ [ InlineData ( nameof ( ObjectHelpers . GreaterThan ) , null , "a" , false ) ]
167+ [ InlineData ( nameof ( ObjectHelpers . GreaterThanEqual ) , null , null , true ) ]
168+ [ InlineData ( nameof ( ObjectHelpers . GreaterThanEqual ) , "a" , null , false ) ]
169+ [ InlineData ( nameof ( ObjectHelpers . GreaterThanEqual ) , null , "a" , false ) ]
170+ [ InlineData ( nameof ( ObjectHelpers . LowerThan ) , null , null , false ) ]
171+ [ InlineData ( nameof ( ObjectHelpers . LowerThan ) , "a" , null , false ) ]
172+ [ InlineData ( nameof ( ObjectHelpers . LowerThan ) , null , "a" , false ) ]
173+ [ InlineData ( nameof ( ObjectHelpers . LowerThanEqual ) , null , null , true ) ]
174+ [ InlineData ( nameof ( ObjectHelpers . LowerThanEqual ) , "a" , null , false ) ]
175+ [ InlineData ( nameof ( ObjectHelpers . LowerThanEqual ) , null , "a" , false ) ]
176+ public void All_Compare_Using_Null ( string method , object value1 , object value2 , bool expected )
177+ {
178+ // Act
179+ var result = ActTestCompare ( method , value1 , value2 ) ;
180+
181+ // Assert
182+ result . Should ( ) . Be ( expected ) ;
183+ }
184+
185+ [ Theory ]
186+ [ InlineData ( 0 , 0 , 0 ) ]
187+ [ InlineData ( 1 , 0 , 1 ) ]
188+ [ InlineData ( 0 , 1 , - 1 ) ]
189+ [ InlineData ( null , null , 0 ) ]
190+ [ InlineData ( 1 , null , 0 ) ]
191+ [ InlineData ( null , 1 , 0 ) ]
192+ public void CompareTo ( object value1 , object value2 , int ? expected )
193+ {
194+ // Act
195+ var result = _sut . CompareTo ( value1 , value2 ) ;
196+
197+ // Assert
198+ result . Should ( ) . Be ( expected ) ;
199+ }
200+
201+ [ Fact ]
202+ public void CompareTo_Using_Uncomparable_Obj ( )
203+ {
204+ Assert . Throws < ArgumentException > ( ( ) => _sut . CompareTo ( new { } , new { } ) ) ;
205+ }
206+
207+ // Aux Methods / Classes
208+ private bool ActTestCompare ( string method , object value1 , object value2 )
209+ {
210+ return method switch
211+ {
212+ nameof ( ObjectHelpers . Equal ) => _sut . Equal ( value1 , value2 ) ,
213+ nameof ( ObjectHelpers . NotEqual ) => _sut . NotEqual ( value1 , value2 ) ,
214+ nameof ( ObjectHelpers . GreaterThan ) => _sut . GreaterThan ( value1 , value2 ) ,
215+ nameof ( ObjectHelpers . GreaterThanEqual ) => _sut . GreaterThanEqual ( value1 , value2 ) ,
216+ nameof ( ObjectHelpers . LowerThan ) => _sut . LowerThan ( value1 , value2 ) ,
217+ nameof ( ObjectHelpers . LowerThanEqual ) => _sut . LowerThanEqual ( value1 , value2 ) ,
218+
219+ _ => throw new ArgumentException ( "Invalid method name." )
220+ } ;
221+ }
222+
223+ private class CustomObject : IComparable
224+ {
225+ public CustomObject ( int value )
226+ {
227+ Value = value ;
228+ }
229+
230+ public int Value { get ; set ; }
231+
232+ public int CompareTo ( object ? other )
233+ {
234+ if ( other is null || other is not CustomObject comparable )
235+ {
236+ return 0 ;
237+ }
238+
239+ return Value == comparable ? . Value ? 0 : Value > comparable ? . Value ? 1 : - 1 ;
240+ }
241+
242+ public override bool Equals ( object ? obj )
243+ {
244+ return obj is CustomObject @object && Value == @object . Value ;
245+ }
246+ }
42247}
0 commit comments