@@ -412,3 +412,73 @@ def test_list_of_dicts():
412412class Person :
413413 def __init__ (self , name ):
414414 self .name = name
415+
416+
417+ class TestContainsExactly :
418+ def test_list (self ):
419+ assert_that ([1 , 2 , 3 ]).contains_exactly (1 , 2 , 3 )
420+
421+ def test_tuple (self ):
422+ assert_that ((1 , 2 , 3 )).contains_exactly (1 , 2 , 3 )
423+
424+ def test_string_chars (self ):
425+ assert_that ("abc" ).contains_exactly ("a" , "b" , "c" )
426+
427+ def test_wrong_order_failure (self ):
428+ with pytest .raises (AssertionError ) as exc_info :
429+ assert_that ([1 , 2 , 3 ]).contains_exactly (1 , 3 , 2 )
430+ assert_that (str (exc_info .value )).contains ("to contain exactly" )
431+
432+ def test_missing_items_failure (self ):
433+ with pytest .raises (AssertionError ) as exc_info :
434+ assert_that ([1 , 2 , 3 ]).contains_exactly (1 , 2 )
435+ assert_that (str (exc_info .value )).contains ("to contain exactly" )
436+
437+ def test_extra_items_failure (self ):
438+ with pytest .raises (AssertionError ) as exc_info :
439+ assert_that ([1 , 2 ]).contains_exactly (1 , 2 , 3 )
440+ assert_that (str (exc_info .value )).contains ("to contain exactly" )
441+
442+ def test_empty_args_failure (self ):
443+ with pytest .raises (ValueError ) as exc_info :
444+ assert_that ([1 ]).contains_exactly ()
445+ assert_that (str (exc_info .value )).is_equal_to ("one or more args must be given" )
446+
447+ def test_not_iterable_failure (self ):
448+ with pytest .raises (TypeError ) as exc_info :
449+ assert_that (42 ).contains_exactly (1 )
450+ assert_that (str (exc_info .value )).is_equal_to ("val is not iterable" )
451+
452+
453+ class TestContainsInOrder :
454+ def test_all_present (self ):
455+ assert_that ([1 , 5 , 2 , 8 , 3 ]).contains_in_order (1 , 2 , 3 )
456+
457+ def test_contiguous (self ):
458+ assert_that ([1 , 2 , 3 ]).contains_in_order (1 , 2 , 3 )
459+
460+ def test_strings (self ):
461+ assert_that (["a" , "x" , "b" , "y" , "c" ]).contains_in_order ("a" , "b" , "c" )
462+
463+ def test_single_item (self ):
464+ assert_that ([1 , 2 , 3 ]).contains_in_order (2 )
465+
466+ def test_wrong_order_failure (self ):
467+ with pytest .raises (AssertionError ) as exc_info :
468+ assert_that ([1 , 2 , 3 ]).contains_in_order (3 , 1 )
469+ assert_that (str (exc_info .value )).contains ("in order, but did not" )
470+
471+ def test_missing_item_failure (self ):
472+ with pytest .raises (AssertionError ) as exc_info :
473+ assert_that ([1 , 2 , 3 ]).contains_in_order (1 , 4 )
474+ assert_that (str (exc_info .value )).contains ("in order, but did not" )
475+
476+ def test_empty_args_failure (self ):
477+ with pytest .raises (ValueError ) as exc_info :
478+ assert_that ([1 ]).contains_in_order ()
479+ assert_that (str (exc_info .value )).is_equal_to ("one or more args must be given" )
480+
481+ def test_not_iterable_failure (self ):
482+ with pytest .raises (TypeError ) as exc_info :
483+ assert_that (42 ).contains_in_order (1 )
484+ assert_that (str (exc_info .value )).is_equal_to ("val is not iterable" )
0 commit comments