def test_references(self): string_constant_1 = 'string constant 1' reference_1 = TypeWithStrRenderingSymbolReference( 'symbol_1_name', is_any_type_w_str_rendering()) reference_2 = TypeWithStrRenderingSymbolReference( 'symbol_2_name', OrReferenceRestrictions([])) cases = [ ( 'no fragments', sut.StringSdv(()), asrt.is_empty_sequence, ), ( 'single string constant fragment', sut.StringSdv((impl.ConstantStringFragmentSdv(' value'), )), asrt.is_empty_sequence, ), ( 'multiple fragments of different types', sut.StringSdv(( impl.SymbolStringFragmentSdv(reference_1.reference), impl.ConstantStringFragmentSdv(string_constant_1), impl.SymbolStringFragmentSdv(reference_2.reference), )), asrt.matches_sequence([ reference_1.reference_assertion, reference_2.reference_assertion, ]), ), ] for test_name, string_sdv, expected_references_assertion in cases: with self.subTest(test_name=test_name): actual = string_sdv.references expected_references_assertion.apply_without_message( self, actual)
def test(self): untransformed = impl.ConstantStringFragmentSdv('constant') expected = impl.ConstantStringFragmentSdv('CONSTANT') actual = impl.TransformedStringFragmentSdv(untransformed, str.upper) equals_string_fragment_sdv(expected).apply_without_message( self, actual)
class TestConstantStringFragmentResolver(unittest.TestCase): string_constant = 'string constant' fragment = impl.ConstantStringFragmentSdv(string_constant) def test_should_be_string_constant(self): self.assertTrue(self.fragment.is_string_constant) def test_should_have_no_references(self): self.assertEqual((), self.fragment.references) def test_string_constant(self): string_constant = 'string constant' fragment = impl.ConstantStringFragmentSdv(string_constant) self.assertEqual(string_constant, fragment.string_constant) def test_resolve_should_give_string_constant(self): # ARRANGE # string_constant = 'string constant' fragment = impl.ConstantStringFragmentSdv(string_constant) # ACT # actual = fragment.resolve(empty_symbol_table()) # ASSERT # assertion = equals_string_fragment_ddv( csv.ConstantFragmentDdv(string_constant)) assertion.apply_without_message(self, actual)
def test_resolve_should_give_string_constant(self): # ARRANGE # string_constant = 'string constant' fragment = impl.ConstantStringFragmentSdv(string_constant) # ACT # actual = fragment.resolve(empty_symbol_table()) # ASSERT # assertion = equals_string_fragment_ddv( csv.ConstantFragmentDdv(string_constant)) assertion.apply_without_message(self, actual)
def test_fragments(self): # ARRANGE # fragment_1 = impl.ConstantStringFragmentSdv('fragment 1 value') fragment_2 = impl.SymbolStringFragmentSdv( data_references.reference_to__on_direct_and_indirect( 'symbol_name')) sdv = sut.StringSdv((fragment_1, fragment_2)) # ACT # actual = sdv.fragments # ASSERT # assertion = equals_string_fragments([fragment_1, fragment_2]) assertion.apply_without_message(self, actual)
def test_string_constant(self): string_constant = 'string constant' fragment = impl.ConstantStringFragmentSdv(string_constant) self.assertEqual(string_constant, fragment.string_constant)
def sdv_with_single_constant_fragment(fragment_value: str) -> sut.StringSdv: return sut.StringSdv((impl.ConstantStringFragmentSdv(fragment_value), ))
def test_resolve(self): string_constant_1 = 'string constant 1' string_constant_2 = 'string constant 2' string_symbol = StringConstantSymbolContext('string_symbol_name', 'string symbol value') path_symbol = ConstantSuffixPathDdvSymbolContext( 'path_symbol_name', RelOptionType.REL_ACT, 'file-name') list_symbol = ListConstantSymbolContext( 'list_symbol_name', ['list element 1', 'list element 2']) cases = [ ( 'no fragments', sut.StringSdv(()), empty_symbol_table(), csv.StringDdv(()), ), ( 'single string constant fragment', sut.StringSdv( (impl.ConstantStringFragmentSdv(string_constant_1), )), empty_symbol_table(), csv.StringDdv((csv.ConstantFragmentDdv(string_constant_1), )), ), ( 'multiple single string constant fragments', sut.StringSdv( (impl.ConstantStringFragmentSdv(string_constant_1), impl.ConstantStringFragmentSdv(string_constant_2))), empty_symbol_table(), csv.StringDdv((csv.ConstantFragmentDdv(string_constant_1), csv.ConstantFragmentDdv(string_constant_2))), ), ( 'single symbol fragment/symbol is a string', sut.StringSdv((impl.SymbolStringFragmentSdv( string_symbol.reference__w_str_rendering), )), string_symbol.symbol_table, csv.StringDdv( (csv.ConstantFragmentDdv(string_symbol.str_value), )), ), ( 'single symbol fragment/symbol is a path', sut.StringSdv((impl.SymbolStringFragmentSdv( path_symbol.reference__w_str_rendering), )), path_symbol.symbol_table, csv.StringDdv((csv.PathFragmentDdv(path_symbol.ddv), )), ), ( 'single symbol fragment/symbol is a list', sut.StringSdv((impl.SymbolStringFragmentSdv( list_symbol.reference__w_str_rendering), )), list_symbol.symbol_table, csv.StringDdv((csv.ListFragmentDdv(list_symbol.ddv), )), ), ( 'multiple fragments of different types', sut.StringSdv(( impl.SymbolStringFragmentSdv( string_symbol.reference__w_str_rendering), impl.ConstantStringFragmentSdv(string_constant_1), impl.SymbolStringFragmentSdv( path_symbol.reference__w_str_rendering), impl.SymbolStringFragmentSdv( list_symbol.reference__w_str_rendering), )), SymbolContext.symbol_table_of_contexts([ string_symbol, path_symbol, list_symbol, ]), csv.StringDdv(( csv.ConstantFragmentDdv(string_symbol.str_value), csv.ConstantFragmentDdv(string_constant_1), csv.PathFragmentDdv(path_symbol.ddv), csv.ListFragmentDdv(list_symbol.ddv), )), ), ] for test_name, string_value, symbol_table, expected in cases: with self.subTest(test_name=test_name): actual = string_value.resolve(symbol_table) assertion = equals_string_ddv(expected) assertion.apply_without_message(self, actual)
def str_fragment(constant: str) -> StringFragmentSdv: return _impl.ConstantStringFragmentSdv(constant)