@@ -96,10 +96,18 @@ describe("statements", function () {
9696 assert . equal ( s . version_removed , "2" ) ;
9797 } ) ;
9898
99- it ( "returns false for undefined" , function ( ) {
100- const s = new SupportStatement ( { version_added : "1" } ) ;
99+ it ( "returns false" , function ( ) {
100+ const s = new SupportStatement ( {
101+ version_added : "1" ,
102+ version_removed : false ,
103+ } ) ;
101104 assert . equal ( s . version_removed , false ) ;
102105 } ) ;
106+
107+ it ( "returns undefined" , function ( ) {
108+ const s = new SupportStatement ( { version_added : "1" } ) ;
109+ assert . equal ( s . version_removed , undefined ) ;
110+ } ) ;
103111 } ) ;
104112 } ) ;
105113
@@ -163,6 +171,7 @@ describe("statements", function () {
163171 ) ;
164172 } ) ;
165173 } ) ;
174+
166175 describe ( "#supportedBy" , function ( ) {
167176 it ( "returns an array of releases represented by the statement" , function ( ) {
168177 const st = new RealSupportStatement (
@@ -186,5 +195,148 @@ describe("statements", function () {
186195 assert . equal ( rels . length , browser ( "chrome" ) . releases . length - 10 ) ;
187196 } ) ;
188197 } ) ;
198+
199+ describe ( "supportedIn()" , function ( ) {
200+ it ( "throws when browser is undefined" , function ( ) {
201+ const cr = browser ( "chrome" ) ;
202+ const statement = new RealSupportStatement ( { version_added : "1" } ) ;
203+ assert . throws ( ( ) => statement . supportedIn ( cr . current ( ) ) , Error ) ;
204+ } ) ;
205+
206+ it ( "throws when release does not correspond to the statement's browser" , function ( ) {
207+ const statement = new RealSupportStatement (
208+ { version_added : "1" } ,
209+ browser ( "chrome" ) ,
210+ ) ;
211+ assert . throws (
212+ ( ) => statement . supportedIn ( browser ( "firefox" ) . current ( ) ) ,
213+ Error ,
214+ ) ;
215+ } ) ;
216+
217+ it ( "returns supported when release is on after version_added" , function ( ) {
218+ const cr = browser ( "chrome" ) ;
219+ const unranged = new RealSupportStatement ( { version_added : "100" } , cr ) ;
220+ const ranged = new RealSupportStatement ( { version_added : "≤100" } , cr ) ;
221+
222+ assert . equal ( unranged . supportedIn ( cr . version ( "100" ) ) . supported , true ) ;
223+ assert . equal ( unranged . supportedIn ( cr . version ( "101" ) ) . supported , true ) ;
224+ assert . equal ( unranged . supportedIn ( cr . current ( ) ) . supported , true ) ;
225+ assert . equal (
226+ unranged . supportedIn ( cr . releases . at ( - 1 ) as any ) . supported ,
227+ true ,
228+ ) ;
229+
230+ assert . equal ( ranged . supportedIn ( cr . version ( "99" ) ) . supported , null ) ;
231+ assert . equal ( ranged . supportedIn ( cr . version ( "100" ) ) . supported , true ) ;
232+ assert . equal ( ranged . supportedIn ( cr . version ( "101" ) ) . supported , true ) ;
233+ assert . equal ( ranged . supportedIn ( cr . current ( ) ) . supported , true ) ;
234+ assert . equal (
235+ ranged . supportedIn ( cr . releases . at ( - 1 ) as any ) . supported ,
236+ true ,
237+ ) ;
238+ } ) ;
239+
240+ it ( "returns supported when release is on after version_added and before version_removed" , function ( ) {
241+ const cr = browser ( "chrome" ) ;
242+ const unranged = new RealSupportStatement (
243+ { version_added : "100" , version_removed : "125" } ,
244+ cr ,
245+ ) ;
246+ const ranged = new RealSupportStatement (
247+ { version_added : "≤100" , version_removed : "125" } ,
248+ cr ,
249+ ) ;
250+
251+ assert . equal ( unranged . supportedIn ( cr . version ( "99" ) ) . supported , false ) ;
252+ assert . equal ( unranged . supportedIn ( cr . version ( "100" ) ) . supported , true ) ;
253+ assert . equal ( unranged . supportedIn ( cr . version ( "101" ) ) . supported , true ) ;
254+ assert . equal ( unranged . supportedIn ( cr . version ( "124" ) ) . supported , true ) ;
255+ assert . equal ( unranged . supportedIn ( cr . version ( "125" ) ) . supported , false ) ;
256+
257+ assert . equal ( ranged . supportedIn ( cr . version ( "99" ) ) . supported , null ) ;
258+ assert . equal ( ranged . supportedIn ( cr . version ( "100" ) ) . supported , true ) ;
259+ assert . equal ( ranged . supportedIn ( cr . version ( "101" ) ) . supported , true ) ;
260+ assert . equal ( ranged . supportedIn ( cr . version ( "124" ) ) . supported , true ) ;
261+ assert . equal ( unranged . supportedIn ( cr . version ( "125" ) ) . supported , false ) ;
262+ } ) ;
263+
264+ it ( "returns unknown support when release is before ranged version_added" , function ( ) {
265+ const cr = browser ( "chrome" ) ;
266+ const rangedOpen = new RealSupportStatement (
267+ { version_added : "≤100" } ,
268+ cr ,
269+ ) ;
270+ const rangedClosed = new RealSupportStatement (
271+ { version_added : "≤100" , version_removed : "125" } ,
272+ cr ,
273+ ) ;
274+
275+ assert . equal ( rangedOpen . supportedIn ( cr . version ( "99" ) ) . supported , null ) ;
276+ assert . equal (
277+ rangedClosed . supportedIn ( cr . version ( "99" ) ) . supported ,
278+ null ,
279+ ) ;
280+ } ) ;
281+
282+ it ( "returns unknown support when release is after version_added and before ranged version_removed" , function ( ) {
283+ const cr = browser ( "chrome" ) ;
284+ const rangedEnd = new RealSupportStatement (
285+ { version_added : "100" , version_removed : "≤125" } ,
286+ cr ,
287+ ) ;
288+
289+ assert . equal ( rangedEnd . supportedIn ( cr . version ( "100" ) ) . supported , true ) ;
290+ assert . equal ( rangedEnd . supportedIn ( cr . version ( "101" ) ) . supported , null ) ;
291+ assert . equal ( rangedEnd . supportedIn ( cr . version ( "124" ) ) . supported , null ) ;
292+ assert . equal ( rangedEnd . supportedIn ( cr . version ( "125" ) ) . supported , false ) ;
293+ } ) ;
294+
295+ it ( "returns unsupported when statement is version_added false" , function ( ) {
296+ const cr = browser ( "chrome" ) ;
297+ const statement = new RealSupportStatement (
298+ { version_added : false } ,
299+ cr ,
300+ ) ;
301+
302+ for ( const release of cr . releases ) {
303+ assert . equal ( statement . supportedIn ( release ) . supported , false ) ;
304+ }
305+ } ) ;
306+
307+ it ( "returns unsupported when release is before fixed version_added" , function ( ) {
308+ const cr = browser ( "chrome" ) ;
309+ const unranged = new RealSupportStatement ( { version_added : "100" } , cr ) ;
310+ assert . equal ( unranged . supportedIn ( cr . version ( "99" ) ) . supported , false ) ;
311+ } ) ;
312+
313+ it ( "returns unsupported when release is on or after version_removed" , function ( ) {
314+ const cr = browser ( "chrome" ) ;
315+
316+ const unranged = new RealSupportStatement (
317+ { version_added : "1" , version_removed : "10" } ,
318+ cr ,
319+ ) ;
320+ assert . equal ( unranged . supportedIn ( cr . version ( "10" ) ) . supported , false ) ;
321+ assert . equal ( unranged . supportedIn ( cr . version ( "11" ) ) . supported , false ) ;
322+ assert . equal ( unranged . supportedIn ( cr . current ( ) ) . supported , false ) ;
323+ assert . equal (
324+ unranged . supportedIn ( cr . releases . at ( - 1 ) as any ) . supported ,
325+ false ,
326+ ) ;
327+
328+ const ranged = new RealSupportStatement (
329+ { version_added : "≤5" , version_removed : "10" } ,
330+ cr ,
331+ ) ;
332+ assert . equal ( ranged . supportedIn ( cr . version ( "10" ) ) . supported , false ) ;
333+ assert . equal ( ranged . supportedIn ( cr . version ( "11" ) ) . supported , false ) ;
334+ assert . equal ( ranged . supportedIn ( cr . current ( ) ) . supported , false ) ;
335+ assert . equal (
336+ ranged . supportedIn ( cr . releases . at ( - 1 ) as any ) . supported ,
337+ false ,
338+ ) ;
339+ } ) ;
340+ } ) ;
189341 } ) ;
190342} ) ;
0 commit comments