def test_matches(self):
     expected_string = 'expected string'
     cases = [
         NEA('default/False',
             expected=
             sut.is_pre_formatted_string_detail(),
             actual=
             sut.PreFormattedStringDetail('anything', False),
             ),
         NEA('default/True',
             expected=
             sut.is_pre_formatted_string_detail(),
             actual=
             sut.PreFormattedStringDetail('anything', True),
             ),
         NEA('object_with_to_string',
             expected=
             sut.is_pre_formatted_string_detail(to_string_object=asrt_to_string.equals(expected_string)),
             actual=
             sut.PreFormattedStringDetail(expected_string, True)
             ),
         NEA('string is line ended',
             expected=
             sut.is_pre_formatted_string_detail(string_is_line_ended=asrt.equals(True)),
             actual=
             sut.PreFormattedStringDetail('anything', True),
             ),
     ]
     for case in cases:
         with self.subTest(case.name):
             case.expected.apply_without_message(self, case.actual)
 def test_matches(self):
     cases = [
         sut.StringDetail('s'),
         sut.PreFormattedStringDetail('pre-formatted', True),
         sut.HeaderAndValueDetail('header', ()),
         sut.TreeDetail(sut.Node('header', None, (), ())),
     ]
     for line_object in cases:
         with self.subTest(str(type(line_object))):
             sut.is_any_detail().apply_without_message(self, line_object)
 def test_not_matches(self):
     cases = [
         NEA('unexpected object type',
             expected=
             sut.is_pre_formatted_string_detail(),
             actual=
             sut.StringDetail('s'),
             ),
         NEA('string',
             expected=
             sut.is_pre_formatted_string_detail(to_string_object=asrt_to_string.equals('expected')),
             actual=
             sut.PreFormattedStringDetail('actual', True),
             ),
         NEA('string is line ended',
             expected=
             sut.is_pre_formatted_string_detail(string_is_line_ended=asrt.equals(True)),
             actual=
             sut.PreFormattedStringDetail('anything', False),
             ),
     ]
     for case in cases:
         with self.subTest(case.name):
             assert_that_assertion_fails(case.expected, case.actual)
 def test_not_matches(self):
     cases = [
         NEA('unexpected object type',
             expected=
             sut.is_indented_detail(),
             actual=
             sut.PreFormattedStringDetail('s'),
             ),
         NEA('details',
             expected=
             sut.is_indented_detail(details=asrt.is_empty_sequence),
             actual=
             sut.IndentedDetail((StringDetail('a value'),)),
             ),
     ]
     for case in cases:
         with self.subTest(case.name):
             assert_that_assertion_fails(case.expected, case.actual)
 def test_not_matches(self):
     cases = [
         NEA('unexpected object type',
             expected=
             sut.is_string_detail(),
             actual=
             sut.PreFormattedStringDetail('s'),
             ),
         NEA('string',
             expected=
             sut.is_string_detail(to_string_object=asrt_to_string.equals('expected')),
             actual=
             sut.StringDetail('actual'),
             ),
     ]
     for case in cases:
         with self.subTest(case.name):
             assert_that_assertion_fails(case.expected, case.actual)
 def test_not_matches(self):
     cases = [
         NEA('unexpected object type',
             expected=
             sut.is_header_and_value_detail(),
             actual=
             sut.PreFormattedStringDetail('s'),
             ),
         NEA('header',
             expected=
             sut.is_header_and_value_detail(header=asrt.equals('expected header')),
             actual=
             sut.HeaderAndValueDetail('actual header', ()),
             ),
         NEA('values',
             expected=
             sut.is_header_and_value_detail(values=asrt.is_empty_sequence),
             actual=
             sut.HeaderAndValueDetail('header', (StringDetail('a value'),)),
             ),
     ]
     for case in cases:
         with self.subTest(case.name):
             assert_that_assertion_fails(case.expected, case.actual)
class TestEqualsDetail(unittest.TestCase):
    DETAILS = [
        _EqDetailCase(
            sut.StringDetail(S_e),
            [
                NameAndValue('unexpected type',
                             sut.PreFormattedStringDetail(S_e)
                             ),
                NameAndValue('unexpected value',
                             sut.StringDetail(S_ue)
                             ),
            ]
        ),
        _EqDetailCase(
            sut.PreFormattedStringDetail(S_e),
            [
                NameAndValue('unexpected type',
                             sut.StringDetail(S_e)
                             ),
                NameAndValue('unexpected value',
                             sut.PreFormattedStringDetail('unexpected')
                             ),
            ]
        ),
        _EqDetailCase(
            sut.HeaderAndValueDetail(HEADER_e, ()),
            [
                NameAndValue('unexpected type',
                             sut.StringDetail(HEADER_e)
                             ),
                NameAndValue('unexpected header',
                             sut.HeaderAndValueDetail(HEADER_ue, ())
                             ),
                NameAndValue('unexpected details',
                             sut.HeaderAndValueDetail(HEADER_e, [sut.StringDetail(S_e)])
                             ),
            ]
        ),
        _EqDetailCase(
            sut.IndentedDetail([sut.StringDetail(S_e)]),
            [
                NameAndValue('unexpected type',
                             sut.StringDetail(HEADER_e)
                             ),
                NameAndValue('unexpected number of children',
                             sut.IndentedDetail([])
                             ),
                NameAndValue('unexpected child',
                             sut.IndentedDetail([sut.StringDetail(S_ue)])
                             ),
            ]
        ),
        _EqDetailCase(
            sut.TreeDetail(sut.Node(HEADER_e, None, [STRING_DETAIL_e], [])),
            [
                NameAndValue('unexpected type',
                             sut.StringDetail(HEADER_e)
                             ),
                NameAndValue('unexpected header',
                             sut.TreeDetail(sut.Node(HEADER_ue, None, [STRING_DETAIL_e], []))
                             ),
                NameAndValue('unexpected number of details',
                             sut.TreeDetail(sut.Node(HEADER_e, None, [], []))
                             ),
                NameAndValue('unexpected child detail',
                             sut.TreeDetail(sut.Node(HEADER_e, None, [STRING_DETAIL_ue], []))
                             ),
            ]
        ),
    ]

    def test_not_equals(self):
        for case in self.DETAILS:
            assertion = sut.equals_detail(case.expected)
            for unexpected in case.unexpected:
                with self.subTest(type=type(case.expected),
                                  unexpected=unexpected.name):
                    assert_that_assertion_fails(assertion, unexpected.value)