def test_HTMLJinjaTableBlock_insert_additional_html_concat(): dummy_html1 = '<style></style>' formatter1 = abtf.TableFormatter() formatter1.insert_additional_html = MagicMock(return_value=dummy_html1) dummy_html2 = '<div></div>' formatter2 = abtf.TableFormatter() formatter2.insert_additional_html = MagicMock(return_value=dummy_html2) table = abt.HTMLJinjaTableBlock(df, formatters=[formatter1, formatter2], use_default_formatters=False) res = table.insert_additional_html() assert res == dummy_html1 + dummy_html2
def test_TableFormatter__is_selected_cell(): # Expected behaviour: # 1) rows, columns is None, apply_to_header_and_index is True (default) => Work on all cells # 2) rows, columns is None, apply_to_header_and_index is False => Work on data cells # 3) rows, columns is not None, apply_to_header_and_index is False => Work on selected cells, including header,index # 4) rows, columns is not None, apply_to_header_and_index is True => Work on selected cells; header,index always # Check case 1) tf = pbtf.TableFormatter(rows=None, columns=None) assert tf._is_selected_cell('a', 'aa') == True assert tf._is_selected_cell('a', pbtf.INDEX_COL_NAME) == True assert tf._is_selected_cell(pbtf.HEADER_ROW_NAME, 'aa') == True assert tf._is_selected_cell(pbtf.HEADER_ROW_NAME, pbtf.INDEX_COL_NAME) == True # Check case 2) tf = pbtf.TableFormatter(rows=None, columns=None, apply_to_header_and_index=False) assert tf._is_selected_cell('a', 'aa') == True assert tf._is_selected_cell('a', pbtf.INDEX_COL_NAME) == False assert tf._is_selected_cell(pbtf.HEADER_ROW_NAME, 'aa') == False assert tf._is_selected_cell(pbtf.HEADER_ROW_NAME, pbtf.INDEX_COL_NAME) == False # Check case3) row_names = ['a', pbtf.HEADER_ROW_NAME] column_names = ['aa', pbtf.INDEX_COL_NAME] tf = pbtf.TableFormatter(rows=row_names, columns=column_names, apply_to_header_and_index=False) assert tf._is_selected_cell('a', 'aa') == True assert tf._is_selected_cell('a', 'bb') == False assert tf._is_selected_cell('b', 'aa') == False assert tf._is_selected_cell('a', pbtf.INDEX_COL_NAME) == True assert tf._is_selected_cell('b', pbtf.INDEX_COL_NAME) == False assert tf._is_selected_cell(pbtf.HEADER_ROW_NAME, 'aa') == True assert tf._is_selected_cell(pbtf.HEADER_ROW_NAME, 'bb') == False assert tf._is_selected_cell(pbtf.HEADER_ROW_NAME, pbtf.INDEX_COL_NAME) == True assert tf._is_selected_cell('a', 'cc') == False # Check case4) tf = pbtf.TableFormatter(rows=['b'], columns=['bb'], apply_to_header_and_index=True) assert tf._is_selected_cell('b', 'bb') == True assert tf._is_selected_cell('b', 'aa') == False assert tf._is_selected_cell('a', 'bb') == False assert tf._is_selected_cell('a', pbtf.INDEX_COL_NAME) == True assert tf._is_selected_cell('b', pbtf.INDEX_COL_NAME) == True assert tf._is_selected_cell(pbtf.HEADER_ROW_NAME, 'aa') == True assert tf._is_selected_cell(pbtf.HEADER_ROW_NAME, 'bb') == True assert tf._is_selected_cell(pbtf.HEADER_ROW_NAME, pbtf.INDEX_COL_NAME) == True
def test_HTMLJinjaTableBlock_constructor_df_formatter(mock_formatter): mock_formatter.return_value = (df - 1) formatter = abtf.TableFormatter() table = abt.HTMLJinjaTableBlock(df, formatters=[formatter], use_default_formatters=False) mock_formatter.assert_called_with(df) assert table.df.equals(df - 1) # NotImplementedError should be handled mock_formatter.side_effect = NotImplementedError formatter = abtf.TableFormatter() table = abt.HTMLJinjaTableBlock(df, formatters=[formatter], use_default_formatters=False) mock_formatter.assert_called_with(df)
def test__aggregate_css_formatters_concatenation(): css1 = 'aaaaa' formatter1 = abtf.TableFormatter() formatter1.dummy_function = MagicMock(return_value=css1) css2 = 'bbbbb' formatter2 = abtf.TableFormatter() formatter2.dummy_function = MagicMock(return_value=css2) table = abt.HTMLJinjaTableBlock(df, formatters=[formatter1, formatter2], use_default_formatters=False) res = table._aggregate_css_formatters('dummy_function') res = res.replace(' ', '') res = res.replace("'", '"') assert res == 'style="aaaaa;bbbbb"'
def test_HTMLJinjaTableBlock_modify_cell_content_not_implemented(mock_formatter): mock_formatter.side_effect = NotImplementedError formatter = abtf.TableFormatter() table = abt.HTMLJinjaTableBlock(df, formatters=[formatter], use_default_formatters=False) res = table.modify_cell_content(42., None, None) assert mock_formatter.call_count == 1 assert res == 42.
def test_HTMLJinjaTableBlock_modify_cell_content(mock_formatter): mock_formatter.return_value = 1234 formatter = abtf.TableFormatter() table = abt.HTMLJinjaTableBlock(df, formatters=[formatter], use_default_formatters=False) res = table.modify_cell_content(None, None, None) assert mock_formatter.call_count == 1 assert res == 1234
def test_HTMLJinjaTableBlock_insert_additional_html_not_implemented(mock_formatter): mock_formatter.side_effect = NotImplementedError formatter = abtf.TableFormatter() table = abt.HTMLJinjaTableBlock(df, formatters=[formatter], use_default_formatters=False) res = table.insert_additional_html() mock_formatter.assert_called_once_with() assert res == ''
def test__aggregate_css_formatters_not_implemented(): formatter = abtf.TableFormatter() formatter.dummy_function = MagicMock(side_effect=NotImplementedError()) table = abt.HTMLJinjaTableBlock(df, formatters=[formatter], use_default_formatters=False) res = table._aggregate_css_formatters('dummy_function') assert res == 'style=""'
def test_HTMLJinjaTableBlock_constructor_formatters_list(): table = abt.HTMLJinjaTableBlock(df, formatters=None, use_default_formatters=False) assert table.formatters == [] table = abt.HTMLJinjaTableBlock(df, formatters=None, use_default_formatters=True) assert table.formatters == abtf.DEFAULT_FORMATTERS + abtf.DEFAULT_DECIMALS_FORMATTER formatter = abtf.TableFormatter() table = abt.HTMLJinjaTableBlock(df, formatters=[formatter], use_default_formatters=True) assert table.formatters == abtf.DEFAULT_FORMATTERS + [formatter] + abtf.DEFAULT_DECIMALS_FORMATTER
def test__aggregate_css_formatters_no_args(): dummy_css = 'dummy_css' formatter = abtf.TableFormatter() formatter.dummy_function = MagicMock(return_value='dummy_css') table = abt.HTMLJinjaTableBlock(df, formatters=[formatter], use_default_formatters=False) res = table._aggregate_css_formatters('dummy_function') assert res == 'style="' + dummy_css + '"' formatter.dummy_function.assert_called_once_with()
def test__aggregate_css_formatters_args(): dummy_css = 'dummy_css' dummy_parameter = '42' formatter = abtf.TableFormatter() formatter.dummy_function = MagicMock(side_effect=lambda x: dummy_css + x) table = abt.HTMLJinjaTableBlock(df, formatters=[formatter], use_default_formatters=False) res = table._aggregate_css_formatters('dummy_function', fmt_args=[dummy_parameter]) assert res == 'style="' + dummy_css + dummy_parameter + '"' formatter.dummy_function.assert_called_once_with(dummy_parameter)
def test_TableFormatter__get_row_and_column_index(): tf = pbtf.TableFormatter() df = pd.DataFrame(index=[pbtf.HEADER_ROW_NAME, 'a', 'b'], columns=[pbtf.INDEX_COL_NAME, 'aa', 'bb']) indices = tf._get_row_and_column_index('b', 'bb', df) assert indices.row == 2 assert indices.column == 2 indices = tf._get_row_and_column_index(pbtf.HEADER_ROW_NAME, pbtf.INDEX_COL_NAME, df) assert indices.row == -1 assert indices.column == -1
def test_TableFormatter_create_cell_level_css(): row_names = ['a'] column_names = ['aa'] tf = pbtf.TableFormatter(rows=row_names, columns=column_names, apply_to_header_and_index=False) cell_content = 1. tf._create_cell_level_css = lambda data: TEST_STRING data = FormatterData(cell_content, 'a', 'aa', df) res = tf.create_cell_level_css(data) assert res == TEST_STRING data = FormatterData(cell_content, 'b', 'aa', df) res = tf.create_cell_level_css(data) assert res is None
def test_TableFormatter_modify_cell_content(): row_names = ['a'] column_names = ['aa'] tf = pbtf.TableFormatter(rows=row_names, columns=column_names, apply_to_header_and_index=False) cell_content = 1. tf._modify_cell_content = lambda data: TEST_STRING data = FormatterData(cell_content, 'a', 'aa', df) res = tf.modify_cell_content(data) assert res == TEST_STRING data = FormatterData(cell_content, 'b', 'aa', df) res = tf.modify_cell_content(data) assert res == cell_content
def test__jinja_header_row_name(): df = pd.DataFrame( [["first", 2, 3], ["second", 5, 6]], columns=['a', 'b', 'c'], ).set_index("a") formatter = abtf.TableFormatter() formatter._create_row_level_css = MagicMock(return_value=None) table = abt.HTMLJinjaTableBlock(df, formatters=[formatter], use_default_formatters=False) container = MagicMock() actual_cfg = MagicMock() table._write_contents(MagicMock(), MagicMock()) names = [ args[0][0].name for args in formatter._create_row_level_css.call_args_list ] assert names[0] == abtf.HEADER_ROW_NAME assert names[1] == "first" assert names[2] == "second"
def test__jinja_calls_formatters_correctly(): df = pd.DataFrame(columns=['a', 'b', 'c'], index=['x', 'y', 'z']) formatter = abtf.TableFormatter() formatter.create_cell_level_css = MagicMock( side_effect=NotImplementedError) table = abt.HTMLJinjaTableBlock(df, formatters=[formatter], use_default_formatters=False) container = MagicMock() actual_cfg = MagicMock() table._write_contents(container, actual_cfg) row_names = { args[0][0][1] for args in formatter.create_cell_level_css.call_args_list } col_names = { args[0][0][2] for args in formatter.create_cell_level_css.call_args_list } assert row_names == set(df.index) | {abtf.HEADER_ROW_NAME} assert col_names == set(df.columns) | {abtf.INDEX_COL_NAME}
def test_TableFormatter__is_selected_cell(): # Expected behaviour: # 1) rows, columns is None, apply_to_header_and_index is True (default) => Work on all cells # 2) rows, columns is None, apply_to_header_and_index is False => Work on data cells # 3) rows, columns is not None, apply_to_header_and_index is False => Work on selected cells, including header,index # 4) rows, columns is not None, apply_to_header_and_index is True => Work on selected cells; header,index always # 5) rows, columns is None, apply_to_header_and_index is False, apply_to_header is True, apply_to_index is True # => Work on all cells (same as case 1)) # 6) rows, columns is None, apply_to_header_and_index is False, apply_to_header is False, apply_to_index is True # => Work on all cells excluding header (note header includes top left corner) # 7) rows, columns is None, apply_to_header_and_index is False, apply_to_header is True, apply_to_index is False # => Work on all cells excluding index (note index does not include top left corner) # 8) rows, columns is not None, apply_to_header_and_index is False, apply_to_header is False, apply_to_index is True # => Work on selected cells; index always (note index does not include top left corner) # 9) rows, columns is not None, apply_to_header_and_index is False, apply_to_header is True, apply_to_index is False # => Work on selected cells; header always (note header includes top left corner) # Check case 1) tf = pbtf.TableFormatter(rows=None, columns=None) assert tf._is_selected_cell('a', 'aa') == True assert tf._is_selected_cell('a', pbtf.INDEX_COL_NAME) == True assert tf._is_selected_cell(pbtf.HEADER_ROW_NAME, 'aa') == True assert tf._is_selected_cell(pbtf.HEADER_ROW_NAME, pbtf.INDEX_COL_NAME) == True # Check case 2) tf = pbtf.TableFormatter(rows=None, columns=None, apply_to_header_and_index=False) assert tf._is_selected_cell('a', 'aa') == True assert tf._is_selected_cell('a', pbtf.INDEX_COL_NAME) == False assert tf._is_selected_cell(pbtf.HEADER_ROW_NAME, 'aa') == False assert tf._is_selected_cell(pbtf.HEADER_ROW_NAME, pbtf.INDEX_COL_NAME) == False # Check case 3) row_names = ['a', pbtf.HEADER_ROW_NAME] column_names = ['aa', pbtf.INDEX_COL_NAME] tf = pbtf.TableFormatter(rows=row_names, columns=column_names, apply_to_header_and_index=False) assert tf._is_selected_cell('a', 'aa') == True assert tf._is_selected_cell('a', 'bb') == False assert tf._is_selected_cell('b', 'aa') == False assert tf._is_selected_cell('a', pbtf.INDEX_COL_NAME) == True assert tf._is_selected_cell('b', pbtf.INDEX_COL_NAME) == False assert tf._is_selected_cell(pbtf.HEADER_ROW_NAME, 'aa') == True assert tf._is_selected_cell(pbtf.HEADER_ROW_NAME, 'bb') == False assert tf._is_selected_cell(pbtf.HEADER_ROW_NAME, pbtf.INDEX_COL_NAME) == True assert tf._is_selected_cell('a', 'cc') == False # Check case 4) tf = pbtf.TableFormatter(rows=['b'], columns=['bb'], apply_to_header_and_index=True) assert tf._is_selected_cell('b', 'bb') == True assert tf._is_selected_cell('b', 'aa') == False assert tf._is_selected_cell('a', 'bb') == False assert tf._is_selected_cell('a', pbtf.INDEX_COL_NAME) == True assert tf._is_selected_cell('b', pbtf.INDEX_COL_NAME) == True assert tf._is_selected_cell(pbtf.HEADER_ROW_NAME, 'aa') == True assert tf._is_selected_cell(pbtf.HEADER_ROW_NAME, 'bb') == True assert tf._is_selected_cell(pbtf.HEADER_ROW_NAME, pbtf.INDEX_COL_NAME) == True # Check case 5) tf = pbtf.TableFormatter(rows=None, columns=None, apply_to_header_and_index=(True, True)) assert tf._is_selected_cell('a', 'aa') == True assert tf._is_selected_cell('a', pbtf.INDEX_COL_NAME) == True assert tf._is_selected_cell(pbtf.HEADER_ROW_NAME, 'aa') == True assert tf._is_selected_cell(pbtf.HEADER_ROW_NAME, pbtf.INDEX_COL_NAME) == True # Check case 6) tf = pbtf.TableFormatter(rows=None, columns=None, apply_to_header_and_index=(False, True)) assert tf._is_selected_cell('a', 'aa') == True assert tf._is_selected_cell('a', pbtf.INDEX_COL_NAME) == True assert tf._is_selected_cell(pbtf.HEADER_ROW_NAME, 'aa') == False assert tf._is_selected_cell(pbtf.HEADER_ROW_NAME, pbtf.INDEX_COL_NAME) == False # Check case 7) tf = pbtf.TableFormatter(rows=None, columns=None, apply_to_header_and_index=(True, False)) assert tf._is_selected_cell('a', 'aa') == True assert tf._is_selected_cell('a', pbtf.INDEX_COL_NAME) == False assert tf._is_selected_cell(pbtf.HEADER_ROW_NAME, 'aa') == True assert tf._is_selected_cell(pbtf.HEADER_ROW_NAME, pbtf.INDEX_COL_NAME) == True # Check case 8) tf = pbtf.TableFormatter(rows=['b'], columns=['bb'], apply_to_header_and_index=(False, True)) assert tf._is_selected_cell('b', 'bb') == True assert tf._is_selected_cell('b', 'aa') == False assert tf._is_selected_cell('a', 'bb') == False assert tf._is_selected_cell('a', pbtf.INDEX_COL_NAME) == True assert tf._is_selected_cell('b', pbtf.INDEX_COL_NAME) == True assert tf._is_selected_cell(pbtf.HEADER_ROW_NAME, 'aa') == False assert tf._is_selected_cell(pbtf.HEADER_ROW_NAME, 'bb') == False assert tf._is_selected_cell(pbtf.HEADER_ROW_NAME, pbtf.INDEX_COL_NAME) == False # Check case 9) tf = pbtf.TableFormatter(rows=['b'], columns=['bb'], apply_to_header_and_index=(True, False)) assert tf._is_selected_cell('b', 'bb') == True assert tf._is_selected_cell('b', 'aa') == False assert tf._is_selected_cell('a', 'bb') == False assert tf._is_selected_cell('a', pbtf.INDEX_COL_NAME) == False assert tf._is_selected_cell('b', pbtf.INDEX_COL_NAME) == False assert tf._is_selected_cell(pbtf.HEADER_ROW_NAME, 'aa') == True assert tf._is_selected_cell(pbtf.HEADER_ROW_NAME, 'bb') == True assert tf._is_selected_cell(pbtf.HEADER_ROW_NAME, pbtf.INDEX_COL_NAME) == True