home · contact · privacy
Add testing of ledger_raw template. master
authorChristian Heller <c.heller@plomlompom.de>
Sun, 11 Jan 2026 18:13:55 +0000 (19:13 +0100)
committerChristian Heller <c.heller@plomlompom.de>
Sun, 11 Jan 2026 18:13:55 +0000 (19:13 +0100)
src/ledgplom/http.py
src/ledgplom/ledger.py
src/ledgplom/testing.py
src/templates/ledger_raw.tmpl
src/templates/ledger_structured.tmpl
src/tests/empty.html [deleted file]
src/tests/empty.ledger_raw [new file with mode: 0644]
src/tests/empty.ledger_structured [new file with mode: 0644]
src/tests/full.html [deleted file]
src/tests/full.ledger_raw [new file with mode: 0644]
src/tests/full.ledger_structured [new file with mode: 0644]

index 85d4aa3cca655edb1d30daa81ccfe9e7ae49eaa6..1938525b13638dc15af4fdb8e95265f3459bfbc1 100644 (file)
@@ -18,7 +18,7 @@ _TOK_RAW = 'raw'
 _TOK_STRUCTURED = 'structured'
 _PAGENAME_EDIT_RAW = f'{_PREFIX_EDIT}{_TOK_RAW}'
 _PAGENAME_EDIT_STRUCTURED = f'{_PREFIX_EDIT}{_TOK_STRUCTURED}'
 _TOK_STRUCTURED = 'structured'
 _PAGENAME_EDIT_RAW = f'{_PREFIX_EDIT}{_TOK_RAW}'
 _PAGENAME_EDIT_STRUCTURED = f'{_PREFIX_EDIT}{_TOK_STRUCTURED}'
-_PAGENAME_LEDGER_RAW = f'{_PREFIX_LEDGER}{_TOK_RAW}'
+PAGENAME_LEDGER_RAW = f'{_PREFIX_LEDGER}{_TOK_RAW}'
 PAGENAME_LEDGER_STRUCTURED = f'{_PREFIX_LEDGER}{_TOK_STRUCTURED}'
 
 
 PAGENAME_LEDGER_STRUCTURED = f'{_PREFIX_LEDGER}{_TOK_STRUCTURED}'
 
 
@@ -116,7 +116,7 @@ class _Handler(PlomHttpHandler):
         elif self.pagename.startswith(_PREFIX_EDIT):
             self.get_edit(ctx, self.pagename == _PAGENAME_EDIT_RAW)
         elif self.pagename.startswith(_PREFIX_LEDGER):
         elif self.pagename.startswith(_PREFIX_EDIT):
             self.get_edit(ctx, self.pagename == _PAGENAME_EDIT_RAW)
         elif self.pagename.startswith(_PREFIX_LEDGER):
-            self.get_ledger(ctx, self.pagename == _PAGENAME_LEDGER_RAW)
+            self.get_ledger(ctx, self.pagename == PAGENAME_LEDGER_RAW)
         else:
             self.get_ledger(ctx, False)
         ### end = time_ns()
         else:
             self.get_ledger(ctx, False)
         ### end = time_ns()
@@ -193,4 +193,4 @@ class _Handler(PlomHttpHandler):
         ctx['has_redundant_empty_lines'] =\
             self.server.ledger.has_redundant_empty_lines
         self._send_rendered(
         ctx['has_redundant_empty_lines'] =\
             self.server.ledger.has_redundant_empty_lines
         self._send_rendered(
-            _PAGENAME_LEDGER_RAW if raw else PAGENAME_LEDGER_STRUCTURED, ctx)
+            PAGENAME_LEDGER_RAW if raw else PAGENAME_LEDGER_STRUCTURED, ctx)
index 5e6b00b2049da9229d85f870cea697cd9b7e1fb8..d7b13dae1532e8c6168569c2f8a812b04f94b87b 100644 (file)
@@ -603,11 +603,9 @@ class Ledger:
                     booking_lines += [_TransferLine.from_dat(dat_line)]
             else:  # enter new gap -> ready to start next block
                 if booking_lines:
                     booking_lines += [_TransferLine.from_dat(dat_line)]
             else:  # enter new gap -> ready to start next block
                 if booking_lines:
-                    ### i_block = i_block.next = DatBlock(_Booking(booking_lines))
                     i_block.next = DatBlock(_Booking(booking_lines))
                     i_block = i_block.next
                     i_block.next = DatBlock(_Booking(booking_lines))
                     i_block = i_block.next
-                    ### booking_lines.clear()
-                    booking_lines = [] # .clear()
+                    booking_lines = []
                 i_block.gap.add([_GapLine.from_dat(dat_line)])
         self.last_save_hash = self._hash_dat_lines()
 
                 i_block.gap.add([_GapLine.from_dat(dat_line)])
         self.last_save_hash = self._hash_dat_lines()
 
index 0bcb54548c1c1b8e437f9a38a24c14fda41d25a2..cf91c0817cb57d986ff16b6929e0ea13aeb659e6 100644 (file)
@@ -7,12 +7,12 @@ from typing import Optional
 from jinja2 import (Environment as JinjaEnv,
                     FileSystemLoader as JinjaFSLoader)
 # ourselves
 from jinja2 import (Environment as JinjaEnv,
                     FileSystemLoader as JinjaFSLoader)
 # ourselves
-from ledgplom.http import PAGENAME_LEDGER_STRUCTURED, PATH_TEMPLATES
+from ledgplom.http import (PAGENAME_LEDGER_RAW, PAGENAME_LEDGER_STRUCTURED,
+                           PATH_TEMPLATES)
 from ledgplom.ledger import Ledger
 
 
 _EXT_DAT = '.dat'
 from ledgplom.ledger import Ledger
 
 
 _EXT_DAT = '.dat'
-_EXT_HTML = '.html'
 _PATH_TESTS = Path('tests')
 
 
 _PATH_TESTS = Path('tests')
 
 
@@ -24,26 +24,33 @@ def run_tests() -> None:
         print(f'{msg_prefix} FAILED – {abort_msg}')
         sys_exit(1)
 
         print(f'{msg_prefix} FAILED – {abort_msg}')
         sys_exit(1)
 
-    tmpl = JinjaEnv(loader=JinjaFSLoader(PATH_TEMPLATES),
-                    autoescape=True,
-                    trim_blocks=True,
-                    ).get_template(f'{PAGENAME_LEDGER_STRUCTURED}.tmpl')
+    jinja = JinjaEnv(loader=JinjaFSLoader(PATH_TEMPLATES),
+                     autoescape=True,
+                     trim_blocks=True)
+    templates = {item: jinja.get_template(f'{item}.tmpl')
+                 for item in (PAGENAME_LEDGER_RAW, PAGENAME_LEDGER_STRUCTURED)}
     for path in [p for p in _PATH_TESTS.iterdir()
                  if p.parts[-1].endswith(_EXT_DAT)]:
     for path in [p for p in _PATH_TESTS.iterdir()
                  if p.parts[-1].endswith(_EXT_DAT)]:
-        with Path(str(path)[:-len(_EXT_DAT)] + _EXT_HTML
-                  ).open('r', encoding='utf8') as f:
-            lines_expected = [line.rstrip('\n') for line in f.readlines()]
-        lines_rendered = tmpl.render(blocks=Ledger(path).blocks).split('\n')
-        msg_prefix = f'test for {path}:'
-        for idx0, line in enumerate(lines_rendered):
-            idx1 = idx0 + 1
-            abort_msg = ''
-            if idx1 > len(lines_expected):
-                abort_msg = f'only {idx0} lines expected'
-            elif lines_expected[idx0] != line:
-                abort_msg = f'line differs, expected: [{lines_expected[idx0]}]'
-            if abort_msg:
-                fail(abort_msg, msg_prefix, idx1)
-        if len(lines_expected) > idx1:
-            fail(f'more lines expected line {idx1}', msg_prefix, None)
-        print(f'{msg_prefix} passed')
+        for key, template in templates.items():
+            test_path = Path(str(path)[:-len(_EXT_DAT)] + f'.{key}')
+            if not test_path.exists():
+                continue
+            with test_path.open('r', encoding='utf8') as f:
+                lines_expected = [line.rstrip('\n')
+                                  for line in f.readlines()]
+            lines_rendered = template.render(blocks=Ledger(path).blocks
+                                             ).split('\n')
+            msg_prefix = f'test for {test_path}:'
+            for idx0, line in enumerate(lines_rendered):
+                idx1 = idx0 + 1
+                abort_msg = ''
+                if idx1 > len(lines_expected):
+                    abort_msg = f'only {idx0} lines expected'
+                elif lines_expected[idx0] != line:
+                    abort_msg = ('line differs, expected: '
+                                 f'[{lines_expected[idx0]}]')
+                if abort_msg:
+                    fail(abort_msg, msg_prefix, idx1)
+            if len(lines_expected) > idx1:
+                fail(f'more lines expected line {idx1}', msg_prefix, None)
+            print(f'{msg_prefix} passed')
index 5f129fb8535719633a3f860da78e753e044b46af..76f3a3f7c0eae06aa87d2755ad16fc1447d34d51 100644 (file)
@@ -16,11 +16,13 @@ table {
 {{ macros.ledger_empty_lines_fix(has_redundant_empty_lines) -}}
 <table class="alternating">
 {% for block in blocks %}
 {{ macros.ledger_empty_lines_fix(has_redundant_empty_lines) -}}
 <table class="alternating">
 {% for block in blocks %}
-    {{ macros.ledger_block_columns('raw', block) }}
+{{ macros.ledger_block_columns('raw', block) -}}
 {##}{% for line in block.lines %}
 {##}{% for line in block.lines %}
-        <tr>
-        <td class="{{ 'critical' if line.errors }}">{{line.raw}}&nbsp;</td>
-        </tr>
+    <tr>{# -#}
+        <td{{ ' class="critical"' if line.errors }}>
+            {{-line.raw}}&nbsp;{# -#}
+        </td>{# -#}
+    </tr>
 {##}{% endfor %}
 {% endfor %}
 </table>
 {##}{% endfor %}
 {% endfor %}
 </table>
index aeae2ba5859848e75bb7c062209f4ed23a800840..9ec839e4fd754be174275cb52e9db54c4f4ff085 100644 (file)
@@ -17,8 +17,8 @@
 {{ macros.ledger_block_columns('structured', block) -}}
 {##}{% if block.booking %}
     <tr>
 {{ macros.ledger_block_columns('structured', block) -}}
 {##}{% if block.booking %}
     <tr>
-        <td colspan=3 class="{{ 'critical'
-                                if block.booking.intro_line.errors }}">
+        <td colspan=3{{ ' class="critical"'
+                        if block.booking.intro_line.errors }}>
             {{- block.booking.date }} {{ block.booking.target -}}
         </td>
         <td>{{ block.booking.intro_line.comment }}</td>
             {{- block.booking.date }} {{ block.booking.target -}}
         </td>
         <td>{{ block.booking.intro_line.comment }}</td>
@@ -31,7 +31,7 @@
         <td class="currency{{ ' critical' if line.errors }}">
             {{- macros.currency_short(line.currency) -}}
         </td>
         <td class="currency{{ ' critical' if line.errors }}">
             {{- macros.currency_short(line.currency) -}}
         </td>
-        <td class="{{ 'critical' if line.errors }}">
+        <td{{ ' class="critical"' if line.errors }}>
             {{- line.account -}}
         </td>
         <td>{{ line.comment }}</td>
             {{- line.account -}}
         </td>
         <td>{{ line.comment }}</td>
diff --git a/src/tests/empty.html b/src/tests/empty.html
deleted file mode 100644 (file)
index b173595..0000000
+++ /dev/null
@@ -1,94 +0,0 @@
-<!DOCTYPE html>
-<html>
-<head>
-<meta charset="UTF-8">
-<script>
-</script>
-<style>
-html {
-    scroll-padding-top: 2em;
-}
-body {
-    background: #ffffff;
-    font-family: sans-serif;
-    text-align: left;
-    margin: 0;
-    padding: 0;
-}
-#header {
-    background: #ffffff;
-    position: sticky;
-    top: 0;
-    padding-left: 0.5em;
-    padding-bottom: 0.25em;
-    border-bottom: 1px solid black;
-}
-table.alternating > tbody > tr:nth-child(odd) {
-    background-color: #dcdcdc;
-}
-table.alternating > tbody > tr:nth-child(even) {
-    background: #ffffff;
-}
-td {
-    vertical-align: top;
-}
-.critical {
-    background: #ff6666 !important;
-}
-td.block_column {
-    background: #ffffff;
-}
-td.amount {
-    text-align: right;
-}
-td.amount,
-td.currency {
-    font-family: monospace;
-    font-size: 1.25em;
-}
-</style>
-</head>
-<body>
-<div id="header">
-    <form action="" method="POST">
-        <span class="disable_on_change">
-            ledger <a href="/ledger_structured">structured</a>
-            / <a href="/ledger_raw">raw</a>
-            · <a href="/balance">balance</a>
-            · <input type="submit"name="file_load" value="reload" />
-        </span>
-    </form>
-</div>
-<form action="/ledger_structured" method="POST">
-<table class="alternating">
-    <tr></tr><!-- keep the background-color alternation in proper order -->
-    <tr id="block_0">
-        <td rowspan=2 class="block_column">
-            <input type="submit"
-                   name="ledger_moveup_0"
-                   value="^"
-                   disabled
-                   />
-            <br />
-            <input type="submit"
-                   name="ledger_movedown_0"
-                   value="v"
-                   disabled
-                   />
-            <br />
-            <input type="submit" name="ledger_copy_0" value="C"/>
-        </td>
-        <td rowspan=2 class="block_column">
-            [<a href="#block_0">#</a>]<br />
-            [<a href="/balance?up_incl=0">b</a>]<br />
-            [<a href="/edit_structured/0">e</a>]
-        </td>
-    </tr>
-    <tr>
-        <td colspan=4>&nbsp;</td>
-    </tr>
-</table>
-<input type="submit" name="add_booking" value="add booking" />
-</form>
-</body>
-</html>
diff --git a/src/tests/empty.ledger_raw b/src/tests/empty.ledger_raw
new file mode 100644 (file)
index 0000000..6c66658
--- /dev/null
@@ -0,0 +1,86 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="UTF-8">
+<script>
+</script>
+<style>
+html {
+    scroll-padding-top: 2em;
+}
+body {
+    background: #ffffff;
+    font-family: sans-serif;
+    text-align: left;
+    margin: 0;
+    padding: 0;
+}
+#header {
+    background: #ffffff;
+    position: sticky;
+    top: 0;
+    padding-left: 0.5em;
+    padding-bottom: 0.25em;
+    border-bottom: 1px solid black;
+}
+table.alternating > tbody > tr:nth-child(odd) {
+    background-color: #dcdcdc;
+}
+table.alternating > tbody > tr:nth-child(even) {
+    background: #ffffff;
+}
+td {
+    vertical-align: top;
+}
+.critical {
+    background: #ff6666 !important;
+}
+td.block_column {
+    background: #ffffff;
+}
+table {
+    font-family: monospace;
+}
+</style>
+</head>
+<body>
+<div id="header">
+    <form action="" method="POST">
+        <span class="disable_on_change">
+            ledger <a href="/ledger_structured">structured</a>
+            / <a href="/ledger_raw">raw</a>
+            · <a href="/balance">balance</a>
+            · <input type="submit"name="file_load" value="reload" />
+        </span>
+    </form>
+</div>
+<form action="/ledger_raw" method="POST">
+<table class="alternating">
+    <tr></tr><!-- keep the background-color alternation in proper order -->
+    <tr id="block_0">
+        <td rowspan=2 class="block_column">
+            <input type="submit"
+                   name="ledger_moveup_0"
+                   value="^"
+                   disabled
+                   />
+            <br />
+            <input type="submit"
+                   name="ledger_movedown_0"
+                   value="v"
+                   disabled
+                   />
+            <br />
+            <input type="submit" name="ledger_copy_0" value="C"/>
+        </td>
+        <td rowspan=2 class="block_column">
+            [<a href="#block_0">#</a>]<br />
+            [<a href="/balance?up_incl=0">b</a>]<br />
+            [<a href="/edit_raw/0">e</a>]
+        </td>
+    </tr>
+    <tr><td>&nbsp;</td></tr>
+</table>
+</form>
+</body>
+</html>
diff --git a/src/tests/empty.ledger_structured b/src/tests/empty.ledger_structured
new file mode 100644 (file)
index 0000000..b173595
--- /dev/null
@@ -0,0 +1,94 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="UTF-8">
+<script>
+</script>
+<style>
+html {
+    scroll-padding-top: 2em;
+}
+body {
+    background: #ffffff;
+    font-family: sans-serif;
+    text-align: left;
+    margin: 0;
+    padding: 0;
+}
+#header {
+    background: #ffffff;
+    position: sticky;
+    top: 0;
+    padding-left: 0.5em;
+    padding-bottom: 0.25em;
+    border-bottom: 1px solid black;
+}
+table.alternating > tbody > tr:nth-child(odd) {
+    background-color: #dcdcdc;
+}
+table.alternating > tbody > tr:nth-child(even) {
+    background: #ffffff;
+}
+td {
+    vertical-align: top;
+}
+.critical {
+    background: #ff6666 !important;
+}
+td.block_column {
+    background: #ffffff;
+}
+td.amount {
+    text-align: right;
+}
+td.amount,
+td.currency {
+    font-family: monospace;
+    font-size: 1.25em;
+}
+</style>
+</head>
+<body>
+<div id="header">
+    <form action="" method="POST">
+        <span class="disable_on_change">
+            ledger <a href="/ledger_structured">structured</a>
+            / <a href="/ledger_raw">raw</a>
+            · <a href="/balance">balance</a>
+            · <input type="submit"name="file_load" value="reload" />
+        </span>
+    </form>
+</div>
+<form action="/ledger_structured" method="POST">
+<table class="alternating">
+    <tr></tr><!-- keep the background-color alternation in proper order -->
+    <tr id="block_0">
+        <td rowspan=2 class="block_column">
+            <input type="submit"
+                   name="ledger_moveup_0"
+                   value="^"
+                   disabled
+                   />
+            <br />
+            <input type="submit"
+                   name="ledger_movedown_0"
+                   value="v"
+                   disabled
+                   />
+            <br />
+            <input type="submit" name="ledger_copy_0" value="C"/>
+        </td>
+        <td rowspan=2 class="block_column">
+            [<a href="#block_0">#</a>]<br />
+            [<a href="/balance?up_incl=0">b</a>]<br />
+            [<a href="/edit_structured/0">e</a>]
+        </td>
+    </tr>
+    <tr>
+        <td colspan=4>&nbsp;</td>
+    </tr>
+</table>
+<input type="submit" name="add_booking" value="add booking" />
+</form>
+</body>
+</html>
diff --git a/src/tests/full.html b/src/tests/full.html
deleted file mode 100644 (file)
index 8f3b3b2..0000000
+++ /dev/null
@@ -1,260 +0,0 @@
-<!DOCTYPE html>
-<html>
-<head>
-<meta charset="UTF-8">
-<script>
-</script>
-<style>
-html {
-    scroll-padding-top: 2em;
-}
-body {
-    background: #ffffff;
-    font-family: sans-serif;
-    text-align: left;
-    margin: 0;
-    padding: 0;
-}
-#header {
-    background: #ffffff;
-    position: sticky;
-    top: 0;
-    padding-left: 0.5em;
-    padding-bottom: 0.25em;
-    border-bottom: 1px solid black;
-}
-table.alternating > tbody > tr:nth-child(odd) {
-    background-color: #dcdcdc;
-}
-table.alternating > tbody > tr:nth-child(even) {
-    background: #ffffff;
-}
-td {
-    vertical-align: top;
-}
-.critical {
-    background: #ff6666 !important;
-}
-td.block_column {
-    background: #ffffff;
-}
-td.amount {
-    text-align: right;
-}
-td.amount,
-td.currency {
-    font-family: monospace;
-    font-size: 1.25em;
-}
-</style>
-</head>
-<body>
-<div id="header">
-    <form action="" method="POST">
-        <span class="disable_on_change">
-            ledger <a href="/ledger_structured">structured</a>
-            / <a href="/ledger_raw">raw</a>
-            · <a href="/balance">balance</a>
-            · <input type="submit"name="file_load" value="reload" />
-        </span>
-    </form>
-</div>
-<form action="/ledger_structured" method="POST">
-<table class="alternating">
-    <tr></tr><!-- keep the background-color alternation in proper order -->
-    <tr id="block_0">
-        <td rowspan=1 class="block_column">
-            <input type="submit"
-                   name="ledger_moveup_0"
-                   value="^"
-                   disabled
-                   />
-            <br />
-            <input type="submit"
-                   name="ledger_movedown_0"
-                   value="v"
-                   disabled
-                   />
-            <br />
-            <input type="submit" name="ledger_copy_0" value="C"/>
-        </td>
-        <td rowspan=1 class="block_column">
-            [<a href="#block_0">#</a>]<br />
-            [<a href="/balance?up_incl=0">b</a>]<br />
-            [<a href="/edit_structured/0">e</a>]
-        </td>
-    </tr>
-    <tr></tr><!-- keep the background-color alternation in proper order -->
-    <tr id="block_1">
-        <td rowspan=5 class="block_column">
-            <input type="submit"
-                   name="ledger_moveup_1"
-                   value="^"
-                   disabled
-                   />
-            <br />
-            <input type="submit"
-                   name="ledger_movedown_1"
-                   value="v"
-                   disabled
-                   />
-            <br />
-            <input type="submit" name="ledger_copy_1" value="C"/>
-        </td>
-        <td rowspan=5 class="block_column">
-            [<a href="#block_1">#</a>]<br />
-            [<a href="/balance?up_incl=1">b</a>]<br />
-            [<a href="/edit_structured/1">e</a>]
-        </td>
-    </tr>
-    <tr>
-        <td colspan=3 class="">2001-01-01 test</td>
-        <td>foo</td>
-    </tr>
-    <tr>
-        <td class="amount">10.00</td>
-        <td class="currency">€</td>
-        <td class="">foo</td>
-        <td></td>
-    </tr>
-    <tr>
-        <td class="amount">-10.00</td>
-        <td class="currency">€</td>
-        <td class="">bar</td>
-        <td></td>
-    </tr>
-    <tr>
-        <td colspan=4>&nbsp;</td>
-    </tr>
-    <tr></tr><!-- keep the background-color alternation in proper order -->
-    <tr id="block_2">
-        <td rowspan=6 class="block_column">
-            <input type="submit"
-                   name="ledger_moveup_2"
-                   value="^"
-                   disabled
-                   />
-            <br />
-            <input type="submit"
-                   name="ledger_movedown_2"
-                   value="v"
-                   />
-            <br />
-            <input type="submit" name="ledger_copy_2" value="C"/>
-        </td>
-        <td rowspan=6 class="block_column">
-            [<a href="#block_2">#</a>]<br />
-            [<a href="/balance?up_incl=2">b</a>]<br />
-            [<a href="/edit_structured/2">e</a>]
-        </td>
-    </tr>
-    <tr>
-        <td colspan=3 class="">2001-01-02 test</td>
-        <td></td>
-    </tr>
-    <tr>
-        <td class="amount">-10.00</td>
-        <td class="currency">€</td>
-        <td class="">bar</td>
-        <td>bar</td>
-    </tr>
-    <tr>
-        <td class="amount">10.00</td>
-        <td class="currency">€</td>
-        <td class="">baz</td>
-        <td></td>
-    </tr>
-    <tr>
-        <td colspan=4>&nbsp;</td>
-    </tr>
-    <tr>
-        <td colspan=4>&nbsp;</td>
-    </tr>
-    <tr></tr><!-- keep the background-color alternation in proper order -->
-    <tr id="block_3">
-        <td rowspan=5 class="block_column">
-            <input type="submit"
-                   name="ledger_moveup_3"
-                   value="^"
-                   />
-            <br />
-            <input type="submit"
-                   name="ledger_movedown_3"
-                   value="v"
-                   disabled
-                   />
-            <br />
-            <input type="submit" name="ledger_copy_3" value="C"/>
-        </td>
-        <td rowspan=5 class="block_column">
-            [<a href="#block_3">#</a>]<br />
-            [<a href="/balance?up_incl=3">b</a>]<br />
-            [<a href="/edit_structured/3">e</a>]
-        </td>
-    </tr>
-    <tr>
-        <td colspan=3 class="">2001-01-02 test</td>
-        <td></td>
-    </tr>
-    <tr>
-        <td class="amount">20.00</td>
-        <td class="currency">€</td>
-        <td class="">bar</td>
-        <td></td>
-    </tr>
-    <tr>
-        <td class="amount">-20.00</td>
-        <td class="currency">€</td>
-        <td class="">baz</td>
-        <td>baz</td>
-    </tr>
-    <tr>
-        <td colspan=4>&nbsp;</td>
-    </tr>
-    <tr></tr><!-- keep the background-color alternation in proper order -->
-    <tr id="block_4">
-        <td rowspan=5 class="block_column critical">
-            <input type="submit"
-                   name="ledger_moveup_4"
-                   value="^"
-                   disabled
-                   />
-            <br />
-            <input type="submit"
-                   name="ledger_movedown_4"
-                   value="v"
-                   disabled
-                   />
-            <br />
-            <input type="submit" name="ledger_copy_4" value="C"/>
-        </td>
-        <td rowspan=5 class="block_column">
-            [<a href="#block_4">#</a>]<br />
-            [<a href="/balance?up_incl=4">b</a>]<br />
-            [<a href="/edit_structured/4">e</a>]
-        </td>
-    </tr>
-    <tr>
-        <td colspan=3 class="">2001-01-01 test</td>
-        <td></td>
-    </tr>
-    <tr>
-        <td class="amount">10.00</td>
-        <td class="currency">€</td>
-        <td class="">foo</td>
-        <td></td>
-    </tr>
-    <tr>
-        <td class="amount">-10.00</td>
-        <td class="currency">€</td>
-        <td class="">bar</td>
-        <td></td>
-    </tr>
-    <tr>
-        <td colspan=4>&nbsp;</td>
-    </tr>
-</table>
-<input type="submit" name="add_booking" value="add booking" />
-</form>
-</body>
-</html>
diff --git a/src/tests/full.ledger_raw b/src/tests/full.ledger_raw
new file mode 100644 (file)
index 0000000..09d2075
--- /dev/null
@@ -0,0 +1,192 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="UTF-8">
+<script>
+</script>
+<style>
+html {
+    scroll-padding-top: 2em;
+}
+body {
+    background: #ffffff;
+    font-family: sans-serif;
+    text-align: left;
+    margin: 0;
+    padding: 0;
+}
+#header {
+    background: #ffffff;
+    position: sticky;
+    top: 0;
+    padding-left: 0.5em;
+    padding-bottom: 0.25em;
+    border-bottom: 1px solid black;
+}
+table.alternating > tbody > tr:nth-child(odd) {
+    background-color: #dcdcdc;
+}
+table.alternating > tbody > tr:nth-child(even) {
+    background: #ffffff;
+}
+td {
+    vertical-align: top;
+}
+.critical {
+    background: #ff6666 !important;
+}
+td.block_column {
+    background: #ffffff;
+}
+table {
+    font-family: monospace;
+}
+</style>
+</head>
+<body>
+<div id="header">
+    <form action="" method="POST">
+        <span class="disable_on_change">
+            ledger <a href="/ledger_structured">structured</a>
+            / <a href="/ledger_raw">raw</a>
+            · <a href="/balance">balance</a>
+            · <input type="submit"name="file_load" value="reload" />
+        </span>
+    </form>
+</div>
+<form action="/ledger_raw" method="POST">
+<table class="alternating">
+    <tr></tr><!-- keep the background-color alternation in proper order -->
+    <tr id="block_0">
+        <td rowspan=1 class="block_column">
+            <input type="submit"
+                   name="ledger_moveup_0"
+                   value="^"
+                   disabled
+                   />
+            <br />
+            <input type="submit"
+                   name="ledger_movedown_0"
+                   value="v"
+                   disabled
+                   />
+            <br />
+            <input type="submit" name="ledger_copy_0" value="C"/>
+        </td>
+        <td rowspan=1 class="block_column">
+            [<a href="#block_0">#</a>]<br />
+            [<a href="/balance?up_incl=0">b</a>]<br />
+            [<a href="/edit_raw/0">e</a>]
+        </td>
+    </tr>
+    <tr></tr><!-- keep the background-color alternation in proper order -->
+    <tr id="block_1">
+        <td rowspan=5 class="block_column">
+            <input type="submit"
+                   name="ledger_moveup_1"
+                   value="^"
+                   disabled
+                   />
+            <br />
+            <input type="submit"
+                   name="ledger_movedown_1"
+                   value="v"
+                   disabled
+                   />
+            <br />
+            <input type="submit" name="ledger_copy_1" value="C"/>
+        </td>
+        <td rowspan=5 class="block_column">
+            [<a href="#block_1">#</a>]<br />
+            [<a href="/balance?up_incl=1">b</a>]<br />
+            [<a href="/edit_raw/1">e</a>]
+        </td>
+    </tr>
+    <tr><td>2001-01-01 test ; foo&nbsp;</td></tr>
+    <tr><td>  foo  10 €&nbsp;</td></tr>
+    <tr><td>  bar  -10 €&nbsp;</td></tr>
+    <tr><td>&nbsp;</td></tr>
+    <tr></tr><!-- keep the background-color alternation in proper order -->
+    <tr id="block_2">
+        <td rowspan=6 class="block_column">
+            <input type="submit"
+                   name="ledger_moveup_2"
+                   value="^"
+                   disabled
+                   />
+            <br />
+            <input type="submit"
+                   name="ledger_movedown_2"
+                   value="v"
+                   />
+            <br />
+            <input type="submit" name="ledger_copy_2" value="C"/>
+        </td>
+        <td rowspan=6 class="block_column">
+            [<a href="#block_2">#</a>]<br />
+            [<a href="/balance?up_incl=2">b</a>]<br />
+            [<a href="/edit_raw/2">e</a>]
+        </td>
+    </tr>
+    <tr><td>2001-01-02 test&nbsp;</td></tr>
+    <tr><td>  bar  -10 € ; bar&nbsp;</td></tr>
+    <tr><td>  baz  10 €&nbsp;</td></tr>
+    <tr><td>&nbsp;</td></tr>
+    <tr><td>&nbsp;</td></tr>
+    <tr></tr><!-- keep the background-color alternation in proper order -->
+    <tr id="block_3">
+        <td rowspan=5 class="block_column">
+            <input type="submit"
+                   name="ledger_moveup_3"
+                   value="^"
+                   />
+            <br />
+            <input type="submit"
+                   name="ledger_movedown_3"
+                   value="v"
+                   disabled
+                   />
+            <br />
+            <input type="submit" name="ledger_copy_3" value="C"/>
+        </td>
+        <td rowspan=5 class="block_column">
+            [<a href="#block_3">#</a>]<br />
+            [<a href="/balance?up_incl=3">b</a>]<br />
+            [<a href="/edit_raw/3">e</a>]
+        </td>
+    </tr>
+    <tr><td>2001-01-02 test&nbsp;</td></tr>
+    <tr><td>  bar  20 €&nbsp;</td></tr>
+    <tr><td>  baz  -20 € ; baz&nbsp;</td></tr>
+    <tr><td>&nbsp;</td></tr>
+    <tr></tr><!-- keep the background-color alternation in proper order -->
+    <tr id="block_4">
+        <td rowspan=5 class="block_column critical">
+            <input type="submit"
+                   name="ledger_moveup_4"
+                   value="^"
+                   disabled
+                   />
+            <br />
+            <input type="submit"
+                   name="ledger_movedown_4"
+                   value="v"
+                   disabled
+                   />
+            <br />
+            <input type="submit" name="ledger_copy_4" value="C"/>
+        </td>
+        <td rowspan=5 class="block_column">
+            [<a href="#block_4">#</a>]<br />
+            [<a href="/balance?up_incl=4">b</a>]<br />
+            [<a href="/edit_raw/4">e</a>]
+        </td>
+    </tr>
+    <tr><td>2001-01-01 test&nbsp;</td></tr>
+    <tr><td>  foo  10 €&nbsp;</td></tr>
+    <tr><td>  bar  -10 €&nbsp;</td></tr>
+    <tr><td>&nbsp;</td></tr>
+</table>
+</form>
+</body>
+</html>
diff --git a/src/tests/full.ledger_structured b/src/tests/full.ledger_structured
new file mode 100644 (file)
index 0000000..ee98fa9
--- /dev/null
@@ -0,0 +1,260 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="UTF-8">
+<script>
+</script>
+<style>
+html {
+    scroll-padding-top: 2em;
+}
+body {
+    background: #ffffff;
+    font-family: sans-serif;
+    text-align: left;
+    margin: 0;
+    padding: 0;
+}
+#header {
+    background: #ffffff;
+    position: sticky;
+    top: 0;
+    padding-left: 0.5em;
+    padding-bottom: 0.25em;
+    border-bottom: 1px solid black;
+}
+table.alternating > tbody > tr:nth-child(odd) {
+    background-color: #dcdcdc;
+}
+table.alternating > tbody > tr:nth-child(even) {
+    background: #ffffff;
+}
+td {
+    vertical-align: top;
+}
+.critical {
+    background: #ff6666 !important;
+}
+td.block_column {
+    background: #ffffff;
+}
+td.amount {
+    text-align: right;
+}
+td.amount,
+td.currency {
+    font-family: monospace;
+    font-size: 1.25em;
+}
+</style>
+</head>
+<body>
+<div id="header">
+    <form action="" method="POST">
+        <span class="disable_on_change">
+            ledger <a href="/ledger_structured">structured</a>
+            / <a href="/ledger_raw">raw</a>
+            · <a href="/balance">balance</a>
+            · <input type="submit"name="file_load" value="reload" />
+        </span>
+    </form>
+</div>
+<form action="/ledger_structured" method="POST">
+<table class="alternating">
+    <tr></tr><!-- keep the background-color alternation in proper order -->
+    <tr id="block_0">
+        <td rowspan=1 class="block_column">
+            <input type="submit"
+                   name="ledger_moveup_0"
+                   value="^"
+                   disabled
+                   />
+            <br />
+            <input type="submit"
+                   name="ledger_movedown_0"
+                   value="v"
+                   disabled
+                   />
+            <br />
+            <input type="submit" name="ledger_copy_0" value="C"/>
+        </td>
+        <td rowspan=1 class="block_column">
+            [<a href="#block_0">#</a>]<br />
+            [<a href="/balance?up_incl=0">b</a>]<br />
+            [<a href="/edit_structured/0">e</a>]
+        </td>
+    </tr>
+    <tr></tr><!-- keep the background-color alternation in proper order -->
+    <tr id="block_1">
+        <td rowspan=5 class="block_column">
+            <input type="submit"
+                   name="ledger_moveup_1"
+                   value="^"
+                   disabled
+                   />
+            <br />
+            <input type="submit"
+                   name="ledger_movedown_1"
+                   value="v"
+                   disabled
+                   />
+            <br />
+            <input type="submit" name="ledger_copy_1" value="C"/>
+        </td>
+        <td rowspan=5 class="block_column">
+            [<a href="#block_1">#</a>]<br />
+            [<a href="/balance?up_incl=1">b</a>]<br />
+            [<a href="/edit_structured/1">e</a>]
+        </td>
+    </tr>
+    <tr>
+        <td colspan=3>2001-01-01 test</td>
+        <td>foo</td>
+    </tr>
+    <tr>
+        <td class="amount">10.00</td>
+        <td class="currency">€</td>
+        <td>foo</td>
+        <td></td>
+    </tr>
+    <tr>
+        <td class="amount">-10.00</td>
+        <td class="currency">€</td>
+        <td>bar</td>
+        <td></td>
+    </tr>
+    <tr>
+        <td colspan=4>&nbsp;</td>
+    </tr>
+    <tr></tr><!-- keep the background-color alternation in proper order -->
+    <tr id="block_2">
+        <td rowspan=6 class="block_column">
+            <input type="submit"
+                   name="ledger_moveup_2"
+                   value="^"
+                   disabled
+                   />
+            <br />
+            <input type="submit"
+                   name="ledger_movedown_2"
+                   value="v"
+                   />
+            <br />
+            <input type="submit" name="ledger_copy_2" value="C"/>
+        </td>
+        <td rowspan=6 class="block_column">
+            [<a href="#block_2">#</a>]<br />
+            [<a href="/balance?up_incl=2">b</a>]<br />
+            [<a href="/edit_structured/2">e</a>]
+        </td>
+    </tr>
+    <tr>
+        <td colspan=3>2001-01-02 test</td>
+        <td></td>
+    </tr>
+    <tr>
+        <td class="amount">-10.00</td>
+        <td class="currency">€</td>
+        <td>bar</td>
+        <td>bar</td>
+    </tr>
+    <tr>
+        <td class="amount">10.00</td>
+        <td class="currency">€</td>
+        <td>baz</td>
+        <td></td>
+    </tr>
+    <tr>
+        <td colspan=4>&nbsp;</td>
+    </tr>
+    <tr>
+        <td colspan=4>&nbsp;</td>
+    </tr>
+    <tr></tr><!-- keep the background-color alternation in proper order -->
+    <tr id="block_3">
+        <td rowspan=5 class="block_column">
+            <input type="submit"
+                   name="ledger_moveup_3"
+                   value="^"
+                   />
+            <br />
+            <input type="submit"
+                   name="ledger_movedown_3"
+                   value="v"
+                   disabled
+                   />
+            <br />
+            <input type="submit" name="ledger_copy_3" value="C"/>
+        </td>
+        <td rowspan=5 class="block_column">
+            [<a href="#block_3">#</a>]<br />
+            [<a href="/balance?up_incl=3">b</a>]<br />
+            [<a href="/edit_structured/3">e</a>]
+        </td>
+    </tr>
+    <tr>
+        <td colspan=3>2001-01-02 test</td>
+        <td></td>
+    </tr>
+    <tr>
+        <td class="amount">20.00</td>
+        <td class="currency">€</td>
+        <td>bar</td>
+        <td></td>
+    </tr>
+    <tr>
+        <td class="amount">-20.00</td>
+        <td class="currency">€</td>
+        <td>baz</td>
+        <td>baz</td>
+    </tr>
+    <tr>
+        <td colspan=4>&nbsp;</td>
+    </tr>
+    <tr></tr><!-- keep the background-color alternation in proper order -->
+    <tr id="block_4">
+        <td rowspan=5 class="block_column critical">
+            <input type="submit"
+                   name="ledger_moveup_4"
+                   value="^"
+                   disabled
+                   />
+            <br />
+            <input type="submit"
+                   name="ledger_movedown_4"
+                   value="v"
+                   disabled
+                   />
+            <br />
+            <input type="submit" name="ledger_copy_4" value="C"/>
+        </td>
+        <td rowspan=5 class="block_column">
+            [<a href="#block_4">#</a>]<br />
+            [<a href="/balance?up_incl=4">b</a>]<br />
+            [<a href="/edit_structured/4">e</a>]
+        </td>
+    </tr>
+    <tr>
+        <td colspan=3>2001-01-01 test</td>
+        <td></td>
+    </tr>
+    <tr>
+        <td class="amount">10.00</td>
+        <td class="currency">€</td>
+        <td>foo</td>
+        <td></td>
+    </tr>
+    <tr>
+        <td class="amount">-10.00</td>
+        <td class="currency">€</td>
+        <td>bar</td>
+        <td></td>
+    </tr>
+    <tr>
+        <td colspan=4>&nbsp;</td>
+    </tr>
+</table>
+<input type="submit" name="add_booking" value="add booking" />
+</form>
+</body>
+</html>