def test_semicolon_data_items_are_assigned(self, mocker): contents = [ "_data_name_1", ";", "very long semicolon text field with many words", ";", "_data_name_2 data_value_2", "_data_name_3", ";", "semicolon text field with", "two lines of text", ";" "_data_name_4 data_value_4", "_data_name_5", ";", "semicolon text ; field containing ;;; semicolons", ";" ] data_block = DataBlock('data_block_header', "\n".join(contents)) semicolon_data_items = OrderedDict([ ("data_name_1", "very long semicolon text field with many words"), ("data_name_3", "semicolon text field with\ntwo lines of text"), ("data_name_5", "semicolon text ; field containing ;;; semicolons")]) strip_quotes_mock = mocker.patch("diffraction.cif.cif.strip_quotes", side_effect=lambda data_value: data_value) data_block.extract_data_items(SEMICOLON_DATA_ITEM) expected_calls = [mock.call(data_value) for data_value in semicolon_data_items.values()] assert strip_quotes_mock.call_args_list == expected_calls assert data_block.data_items == semicolon_data_items
def test_inline_declared_variables_are_stripped_out(self): contents = [ "_data_name_1 value", "_DatA_name-two another_value", "loop_", "_loop_data_name_A", "_loop_data_name_B", "value_A1 'value A2'", "value-B1 value_B2", "_one_more_data_item_ one_more_data_value" ] data_block = DataBlock('data_block_header', "\n".join(contents)) expected_remaining_data = "\n" + "\n".join(contents[2:7]) data_block.extract_data_items(INLINE_DATA_ITEM) assert data_block.raw_data == expected_remaining_data
def test_inline_declared_variables_are_assigned(self, mocker): data_items = OrderedDict([ ("data_name", "value"), ("four_word_data_name", "four_word_data_value"), ("data_name-with_hyphens-in-it", "some_data_value"), ("data_name_4", "'data value inside single quotes'"), ("data_name_5", '"data value inside double quotes"')]) contents = ['_{} {}'.format(data_name, data_value) for data_name, data_value in data_items.items()] data_block = DataBlock('data_block_header', "\n".join(contents)) strip_quotes_mock = mocker.patch("diffraction.cif.cif.strip_quotes", side_effect=lambda data_value: data_value) data_block.extract_data_items(INLINE_DATA_ITEM) expected_calls = [mock.call(data_value) for data_value in data_items.values()] assert strip_quotes_mock.call_args_list == expected_calls assert data_block.data_items == data_items
def test_semicolon_data_items_are_stripped_out(self): contents = [ "_data_name_1 data_value_1", "_data_name_2", ";", "semicolon text field ", ";", "_data_name_3 data_value_3", "_data_name_4", ";", "semicolon text field with", "two lines of text", ";" ] data_block = DataBlock('data_block_header', "\n".join(contents)) expected_remaining_data = "\n".join([contents[0], contents[5]]) data_block.extract_data_items(SEMICOLON_DATA_ITEM) assert data_block.raw_data == expected_remaining_data
def test_variables_declared_in_loop_are_assigned(self, mocker): data_items = { "number": ["1", "2222", "3456789"], "symbol": [".", "-", "?"], "number_and_symbol": ["-1.0", "2.0(3)", "3.0e10"], "letter": ["a", "bbb", "cdefghi"], "letter_and_symbol": ["x?*", "abc_(rt)", "sin(3*10^3)"], "single_quotes": ["'x y z'", "'s = 3.2(3)'", "'x -y+2/3 z-0.876'"], "double_quotes": ['"a b c"', '"s = 4.6(1)"', '"x-1/3 y+0.34 -z"'] } # convert the data items into corresponding CIF input contents = ["loop_"] data_names = data_items.keys() contents.extend('_' + data_name for data_name in data_names) contents.extend('{} {} {} {} {} {} {}'.format( *[data_items[data_name][i] for data_name in data_names]) for i in range(3)) data_block = DataBlock('data_block_header', "\n".join(contents)) strip_quotes_mock = mocker.patch("diffraction.cif.cif.strip_quotes", side_effect=lambda data_value: data_value) data_block.extract_loop_data_items() assert strip_quotes_mock.call_count == 21 assert data_block.data_items == data_items