summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorAlexis Roda <alexis.roda.villalonga@gmail.com>2019-08-06 21:59:00 +0200
committerJuan J. Martínez <jjm@usebox.net>2019-08-06 20:59:00 +0100
commit2faf74953a23837e02ad0977f870c94b5f8c37d8 (patch)
treea4f0b0f0c03a4e0823c06acddf413ada9cc746e5 /tests
parent5b7817484b8bf1d0b52f9c3f8d5e3a3e8b16be46 (diff)
downloadz80count-2faf74953a23837e02ad0977f870c94b5f8c37d8.tar.gz
z80count-2faf74953a23837e02ad0977f870c94b5f8c37d8.zip
Improved comment alignment (#13)
Diffstat (limited to 'tests')
-rw-r--r--tests/test_format_line.py151
-rw-r--r--tests/test_update_counters.py22
2 files changed, 173 insertions, 0 deletions
diff --git a/tests/test_format_line.py b/tests/test_format_line.py
new file mode 100644
index 0000000..d73b25e
--- /dev/null
+++ b/tests/test_format_line.py
@@ -0,0 +1,151 @@
+# -*- coding: utf-8 -*-
+
+import pytest
+
+from z80count.z80count import comment_alignment
+from z80count.z80count import format_line
+from z80count.z80count import line_length
+
+
+##########################################################################
+# test support funtions #
+##########################################################################
+
+@pytest.mark.parametrize("line,tab_width,expected", (
+ ("", 8, 0),
+ (" ", 8, 1),
+ ("a", 8, 1),
+ ("á", 8, 1),
+
+ ("\t", 8, 8),
+ (" \t", 8, 8),
+ (" \t", 8, 8),
+ ("\t ", 8, 9),
+ ("\t\t", 8, 16),
+ ("\t \t", 8, 16),
+
+ ("\t", 3, 3),
+ (" \t", 3, 3),
+ (" \t", 3, 3),
+ ("\t ", 3, 4),
+ ("\t\t", 3, 6),
+ ("\t \t", 3, 6),
+
+ ("\tadd hl,de", 4, 13),
+))
+def test_line_length(line, tab_width, expected):
+ assert line_length(line, tab_width) == expected
+
+
+@pytest.mark.parametrize("line,column,expected", (
+ ("foo", 8, " "),
+ (" foo", 8, " "),
+ ("foo ", 8, " "),
+ ("foo\t", 8, " "),
+ ("foo ", 8, " "),
+
+ ("foo", 9, "\t"),
+ (" foo", 9, "\t"),
+ ("foo ", 9, "\t"),
+ ("foo\t", 9, " "),
+ ("foo ", 9, " "),
+
+ ("longer than tab stop", 9, " "),
+))
+def test_comment_alignment_with_tabs(line, column, expected):
+ assert comment_alignment(line, column, use_tabs=True, tab_width=8) == expected
+
+
+def test_comment_alignment_bug_001():
+ line = "\tld hl,PLY_Interruption_Convert"
+ out = comment_alignment(line, column=50, use_tabs=True, tab_width=4)
+ assert out == "\t\t\t\t"
+
+
+def test_comment_alignment_bug_002():
+ line = "\tadd hl,de"
+ out = comment_alignment(line, column=50, use_tabs=True, tab_width=4)
+ assert out == "\t\t\t\t\t\t\t\t\t"
+
+
+def test_comment_alignment_bug_003():
+ line = "\tjp #bce0"
+ out = comment_alignment(line, column=50, use_tabs=True, tab_width=4)
+ assert out == "\t\t\t\t\t\t\t\t\t"
+
+
+@pytest.mark.parametrize("line,column,expected", (
+ ("foo", 8, " "),
+ (" foo", 8, " "),
+ ("foo ", 8, " "),
+ ("foo\t", 8, " "),
+ ("foo ", 8, " "),
+ ("foo ", 8, " "),
+
+ ("foo", 9, " "),
+ (" foo", 9, " "),
+ ("foo ", 9, " "),
+ ("foo\t", 9, " "),
+ ("foo ", 9, " "),
+ ("foo ", 9, " "),
+ ("foo ", 9, " "),
+
+ ("longer than tab stop", 9, " "),
+))
+def test_comment_alignment_with_spaces(line, column, expected):
+ assert comment_alignment(line, column, use_tabs=False, tab_width=8) == expected
+
+
+##########################################################################
+# test format_line #
+##########################################################################
+
+
+def _make_entry(cycles, case=""):
+ return {
+ "cycles": cycles,
+ "case": case,
+ }
+
+
+def _run(line, cycles, total=0, total_cond=0, case="", subt=False,
+ update=False, column=15, debug=False, use_tabs=False,
+ tab_width=4):
+ entry = _make_entry(cycles, case)
+ return format_line(line, entry, total, total_cond, subt, update,
+ column, debug, use_tabs, tab_width)
+
+
+def test_adds_comment():
+ out = _run(" OPCODE", "5")
+ assert out == " OPCODE ; [5]\n"
+
+
+def test_subtotal_unconditional_opcode():
+ out = _run(" OPCODE", "5", total=42, total_cond=0, subt=True)
+ assert out == " OPCODE ; [5 .. 42]\n"
+
+
+def test_subtotal_conditional_opcode():
+ out = _run(" OPCODE", "7/5", total=42, total_cond=40, subt=True)
+ assert out == " OPCODE ; [7/5 .. 40/42]\n"
+
+
+def test_adds_case_if_debug_is_True():
+ out = _run(" OPCODE", "5", debug=True, case="foo")
+ assert out == " OPCODE ; [5] case{foo}\n"
+
+
+def test_adds_cycles_in_previous_comment_if_update_is_False():
+ out = _run(" OPCODE ; [3] comment ", "5", update=False)
+ assert out == " OPCODE ; [5] [3] comment\n"
+
+
+def test_updates_cycles_in_previous_comment_if_update_is_True():
+ out = _run(" OPCODE ; [3] comment ", "5", update=True)
+ assert out == " OPCODE ; [5] comment\n"
+
+
+def test_line_longer_than_comment_column():
+ out = _run(" A VERY LONG LINE", "5", update=True)
+ assert out == " A VERY LONG LINE ; [5]\n"
diff --git a/tests/test_update_counters.py b/tests/test_update_counters.py
new file mode 100644
index 0000000..517e165
--- /dev/null
+++ b/tests/test_update_counters.py
@@ -0,0 +1,22 @@
+# -*- coding: utf-8 -*-
+
+from z80count.z80count import update_counters
+
+
+def _make_entry(states, states_met=0):
+ return {
+ "_t_states_met": states_met,
+ "_t_states_or_not_met": states,
+ }
+
+
+def test_unconditional_instruction():
+ total, total_cond = update_counters(_make_entry(3), 8)
+ assert total == 11
+ assert total_cond == 0
+
+
+def test_conditional_instruction():
+ total, total_cond = update_counters(_make_entry(7, 5), 35)
+ assert total == 42
+ assert total_cond == 40