def it_supports_ignoring_values_with_anything(): def _fails(): expect({ 'foo': 2, 'bar': None }) == { 'foo': 1, 'bar': expect.anything } with pytest.raises(AssertionError): _fails() assert "'bar': <anything>" in fail_msg(_fails), fail_msg(_fails)
def it_shows_diff_when_strings_differ(): def _fails(): expect('foo\nbar') == 'foo\nbaz' with pytest.raises(AssertionError): _fails() assert fail_msg(_fails) == ( "Expected 'foo\\nbaz' but got 'foo\\nbar'\n" "Diff:\n" "@@ -1,2 +1,2 @@\n" " foo\n" "-baz\n" "+bar"), fail_msg(_fails)
def they_adjust_failure_message_for_expectation_name(): def can_do_something(thing): return False def will_do_something(thing): return False for predicate in [can_do_something, will_do_something]: add_expectation(predicate) assert fail_msg(expect('walrus').can_do_something) == ( "Expected that 'walrus' can do something, but it can't") assert fail_msg(expect('walrus').will_do_something) == ( "Expected that 'walrus' will do something, but it won't")
def they_have_default_failure_message(): def predicate_with_bad_name(thing): return False add_expectation(predicate_with_bad_name) assert fail_msg(expect('walrus').predicate_with_bad_name) == ( "Expected that 'walrus' predicate with bad name, but got False")
def it_can_expect_equality(): expect(2) == 1 + 1 def _fails(): expect(1) == 2 with pytest.raises(AssertionError): _fails() assert fail_msg(_fails) == 'Expected 2 but got 1'
def it_can_expect_inequality(): expect(1) != 2 def _fails(): expect(1) != 1 with pytest.raises(AssertionError): _fails() assert fail_msg(_fails) == 'Expected anything except 1 but got it'
def it_can_expect_containment(): expect([1]).contains(1) def _fails(): expect([2]).contains(1) with pytest.raises(AssertionError): _fails() assert fail_msg(_fails) == ("Expected [2] to contain 1 but it didn't")
def it_can_expect_exclusion(): expect([1]).excludes(0) def _fails(): expect([1]).excludes(1) with pytest.raises(AssertionError): _fails() assert fail_msg(_fails) == ("Expected [1] to exclude 1 but it didn't")
def it_can_expect_non_containment(): expect([1]).does_not_contain(0) def _fails(): expect([1]).does_not_contain(1) with pytest.raises(AssertionError): _fails() assert fail_msg(_fails) == ("Expected [1] not to contain 1 but it did")
def it_can_expect_less_than(): expect(1) < 2 def _fails(): expect(1) < 0 with pytest.raises(AssertionError): _fails() assert fail_msg(_fails) == 'Expected something less than 0 but got 1'
def it_can_expect_identity_with_true(): expect(1 < 2).is_(True) def _fails(): expect(1 > 2).is_(True) with pytest.raises(AssertionError): _fails() assert fail_msg(_fails) == ( "Expected condition to be True, but it was False")
def it_can_require_failure_messages(): def _fails(): with expect.raises(ValueError, 'my message'): raise ValueError('wrong message') with pytest.raises(AssertionError): _fails() assert fail_msg(_fails) == ( "Expected ValueError('my message') but got ValueError('wrong message')" )
def it_requires_exceptions_to_be_raised(): def _expects_raise_but_doesnt_get_it(): with expect.raises(KeyError): pass with pytest.raises(AssertionError): _expects_raise_but_doesnt_get_it() assert fail_msg(_expects_raise_but_doesnt_get_it) == ( 'Expected an exception of type KeyError but got none')
def it_can_expect_greater_than(): expect(2) > 1 def _fails(): expect(0) > 1 with pytest.raises(AssertionError): _fails() assert fail_msg(_fails) == ( 'Expected something greater than 1 but got 0')
def they_can_fail(): add_expectation(is_a_potato) def _fails(): expect('not a potato').is_a_potato() with pytest.raises(AssertionError): _fails() assert fail_msg(_fails) == ( "Expected that 'not a potato' is a potato, but it isn't")
def it_can_expect_startswith(): expect("fooBar").startswith("foo") def _fails(): expect("fooBar").startswith("Foo") with pytest.raises(AssertionError): _fails() assert fail_msg(_fails) == ( "Expected 'fooBar' to start with 'Foo' but it didn't")
def it_can_expect_nonidentity_with_false(): expect(1 < 2).is_not(False) def _fails(): expect(1 > 2).is_not(False) with pytest.raises(AssertionError): _fails() assert fail_msg(_fails) == ( "Expected condition to not be False, but it was")
def it_can_expect_endswith(): expect("fooBar").endswith("Bar") def _fails(): expect("fooBar").endswith("bar") with pytest.raises(AssertionError): _fails() assert fail_msg(_fails) == ( "Expected 'fooBar' to end with 'bar' but it didn't")
def it_shows_optimized_diff_for_ordereddict_on_python36(): actual = [OrderedDict(a=1, b=2, c=3, d=4, e=5, f=6)] expected = [dict(a=1, b=22, c=3, d=4, f=6, g=7)] expect.MIN_DIFF_SIZE = 10 def _fails(): expect(actual) == expected with pytest.raises(AssertionError): _fails() assert fail_msg(_fails) == ( "Expected " "[{'a': 1, 'b': 22, 'c': 3, 'd': 4, 'f': 6, 'g': 7}] but got " "[{'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 5, 'f': 6}]\n" "Diff:\n" "@@ -1 +1 @@\n" "-[{'a': 1, 'b': 22, 'c': 3, 'd': 4, 'f': 6, 'g': 7}]\n" "+[{'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 5, 'f': 6}]" ), fail_msg(_fails)
def it_can_expect_endswith_ignoring_case(): expect("fooBar").iendswith("bar") def _fails(): expect("fooBar").iendswith("qux") with pytest.raises(AssertionError): _fails() assert fail_msg(_fails) == ( "Expected 'fooBar' to end with 'qux' (ignoring case) but it didn't" )
def it_can_expect_exclusion_ignoring_case(): expect([1]).iexcludes(0) def _fails(): expect([1]).iexcludes(1) with pytest.raises(AssertionError): _fails() assert fail_msg(_fails) == ( "Expected [1] to exclude 1 (ignoring case) but it didn't" )
def it_can_expect_identity_with_none(): data = {'a': 1} expect(data.get('b')).is_(None) def _fails(): expect(data.get('a')).is_(None) with pytest.raises(AssertionError): _fails() assert fail_msg(_fails) == ("Expected value to be None, but it was 1")
def it_can_expect_instance_for_multiple_types(): expect('str').isinstance((str, bytes)) def _fails(): expect('str').isinstance((int, tuple)) with pytest.raises(AssertionError): _fails() assert fail_msg(_fails) == ( 'Expected an instance of int or tuple but got an instance of str' )
def it_can_expect_containment_ignoring_case(): expect("fooBar").icontains("FooBAR") def _fails(): expect("fooBar").icontains("Qux") with pytest.raises(AssertionError): _fails() assert fail_msg(_fails) == ( "Expected 'fooBar' to contain 'Qux' (ignoring case) but it didn't" )
def it_can_expect_instance(): expect(1).isinstance(int) def _fails(): expect(1).isinstance(str) with pytest.raises(AssertionError): _fails() assert fail_msg(_fails) == ( 'Expected an instance of str but got an instance of int' )
def it_can_expect_greater_than_or_equal(): expect(1) >= 1 expect(2) >= 1 def _fails(): expect(1) >= 2 with pytest.raises(AssertionError): _fails() assert fail_msg(_fails) == ( 'Expected something greater than or equal to 2 but got 1')
def it_can_expect_less_than_or_equal(): expect(1) <= 1 expect(1) <= 2 def _fails(): expect(2) <= 1 with pytest.raises(AssertionError): _fails() assert fail_msg(_fails) == ( 'Expected something less than or equal to 1 but got 2')
def it_shows_diff_for_large_reprs(): sequence = list(range(1000, 1050)) big_list = sequence[:20] + [1019] + sequence[20:] def _fails(): expect(big_list) == sequence with pytest.raises(AssertionError): _fails() assert fail_msg(_fails) == ("Expected {0} but got {1}\n" "Diff:\n" "@@ -17,6 +17,7 @@\n" " 1016,\n" " 1017,\n" " 1018,\n" "+ 1019,\n" " 1019,\n" " 1020,\n" " 1021,").format( repr(sequence), repr(big_list)), fail_msg(_fails)
def it_optimizes_exclusion_message_for_multiline_strings(): expect("<p>\nHello, world!\n</p>\n").excludes("Foobar") def _fails(): expect("<p>\nHello, world!\n</p>\n").excludes("Hello") with pytest.raises(AssertionError): _fails() assert fail_msg(_fails) == ( "Given text:\n\n" "<p>\nHello, world!\n</p>\n\n" "Expected to exclude 'Hello' but didn't" )
def it_optimizes_non_containment_message_for_multiline_strings(): expect("<p>\nHello, world!\n</p>\n").does_not_contain("Foobar") def _fails(): expect("<p>\nHello, world!\n</p>\n").does_not_contain("Hello") with pytest.raises(AssertionError): _fails() assert fail_msg(_fails) == ( "Given text:\n\n" "<p>\nHello, world!\n</p>\n\n" "Expected not to contain 'Hello' but did" )