First attempt at Python port, expand tests.

This commit is contained in:
Joshua Bemenderfer
2023-02-07 16:38:23 -05:00
parent ac821e448d
commit e72ff2eccf
11 changed files with 365 additions and 82 deletions

View File

@@ -28,29 +28,30 @@ async function loadTests(path) {
const propertyLevel = level()
if (match('input')) {
// TODO: Find a way to handle newlines better.
if (tail().startsWith('literal')) {
if (tail()) {
test.input = tail()
.split('literal ').join('')
.replaceAll('\\n', '\n')
.replaceAll('\\t', '\t')
continue
}
while (await next(propertyLevel)) test.input.push(line(propertyLevel))
test.input = test.input.join('\n').trim()
while (await next(propertyLevel)) test.input.push(line(propertyLevel + 1))
test.input = test.input.join('\n').trimEnd()
}
if (match('output')) {
// TODO: Find a way to handle newlines better.
if (tail().startsWith('literal')) {
test.output = tail().split('literal ').join('').replace('\\n', '\n')
continue
}
while (await next(propertyLevel)) test.output.push(line())
while (await next(propertyLevel)) test.output.push(line(propertyLevel + 1))
}
}
test.output = test.output.join('\n').trim()
test.input = test.input
.replaceAll('\\n', '\n')
.replaceAll('\\t', '\t')
.replaceAll('\\s', ' ')
test.output = test.output.join('\n').trimEnd()
.replaceAll('\\n', '\n')
.replaceAll('\\t', '\t')
.replaceAll('\\s', ' ')
}
}
@@ -64,6 +65,7 @@ function callTest(pkg, name, input) {
input
})
// TODO: Find a way to clean all this trimming up. Most caused by VSCode happily trimming empty spaces off the ends of lines.
resolve(stdout.toString().trim())
})
}
@@ -80,4 +82,4 @@ for (const [name, tests] of Object.entries(descriptions)) {
})
}
})
}
}

View File

@@ -1,54 +1,130 @@
#schema test
describe LineData
it Handles a blank line at indent level 0
key linedata:basic
packages js
input literal \n
output
level: 0 | head: | tail: | line:
it Handles a blank line at indent level 0
key linedata:basic
packages js python
input \n
output
| level 0 | indent | offsetHead 0 | offsetTail 0 | line |
it Handles a blank line with a single space at indent level 1
key linedata:basic
packages js
input literal \n
output
level: 1 | head: | tail: | line:
it Handles a blank line with a single space
key linedata:basic
packages js python
input \s
output
| level 1 | indent | offsetHead 1 | offsetTail 1 | line |
it Handles a blank line with two spaces
key linedata:basic
packages js
input literal \n
output
level: 2 | head: | tail: | line:
it Handles a blank line with two spaces
key linedata:basic
packages js python
input \s\s
output
| level 2 | indent | offsetHead 2 | offsetTail 2 | line |
it Handles a normal line at indent level 1
key linedata:basic
packages js
input literal line 1
output
level: 1 | head: line | tail: 1 | line: line 1
it Handles a normal line at indent level 0
key linedata:basic
packages js python
input
line 1
output
| level 0 | indent | offsetHead 0 | offsetTail 4 | line line 1 |
it Handles a normal line at indent level 1 indented with tabs
key linedata:tabs
packages js
input literal \tline 1
output
level: 1 | head: line | tail: 1 | line: line 1
it Handles a normal line at indent level 1
key linedata:basic
packages js python
input
line 1
output
| level 1 | indent | offsetHead 1 | offsetTail 5 | line line 1 |
it Handles a normal line at indent level 2 indented with tabs
key linedata:tabs
packages js
input literal \t\tline 1
output
level: 2 | head: line | tail: 1 | line: line 1
it Handles a normal line at indent level 2
key linedata:basic
packages js python
input
line 1
output
| level 2 | indent | offsetHead 2 | offsetTail 6 | line line 1 |
it Nests a normal line under a preceding normal line
key linedata:basic
packages js
input
line 1
line 2
output
level: 0 | head: line | tail: 1 | line: line 1
level: 1 | head: line | tail: 2 | line: line 2
it Handles a normal line at indent level 1 indented with tabs
key linedata:tabs
packages js python
input
\tline 1
output
| level 1 | indent \t | offsetHead 1 | offsetTail 5 | line \tline 1 |
it Handles a normal line at indent level 2 indented with tabs
key linedata:tabs
packages js python
input
\t\tline 1
output
| level 2 | indent \t | offsetHead 2 | offsetTail 6 | line \t\tline 1 |
it Nests a normal line under a preceding normal line
key linedata:basic
packages js python
input
line 1
line 2
output
| level 0 | indent | offsetHead 0 | offsetTail 4 | line line 1 |
| level 1 | indent | offsetHead 1 | offsetTail 5 | line line 2 |
it Nests multiple normal lines under a preceding normal line
key linedata:basic
packages js python
input
line 1
line 2
line 3
line 4
output
| level 0 | indent | offsetHead 0 | offsetTail 4 | line line 1 |
| level 1 | indent | offsetHead 1 | offsetTail 5 | line line 2 |
| level 1 | indent | offsetHead 1 | offsetTail 5 | line line 3 |
| level 1 | indent | offsetHead 1 | offsetTail 5 | line line 4 |
it Does not nest an empty line under a preceding normal line
key linedata:basic
packages js python
comment Two newlines are needed here. A single newline will look to readline as if the input is finished.
input line 1\n\n
output
| level 0 | indent | offsetHead 0 | offsetTail 4 | line line 1 |
| level 0 | indent | offsetHead 0 | offsetTail 0 | line |
it Does not nest multiple empty lines under a preceding normal line
key linedata:basic
packages js python
comment Four newlines are needed here. A single newline will look to readline as if the input is finished.
input line 1\n\n\n\n
output
| level 0 | indent | offsetHead 0 | offsetTail 4 | line line 1 |
| level 0 | indent | offsetHead 0 | offsetTail 0 | line |
| level 0 | indent | offsetHead 0 | offsetTail 0 | line |
| level 0 | indent | offsetHead 0 | offsetTail 0 | line |
it Handles head and tail matching for lines with head and tail
key linedata:head-tail
packages js python
input
head1 tail1 tail2 tail3
output
| head head1 | tail tail1 tail2 tail3 |
it Handles head and tail matching for lines with head but no tail
key linedata:head-tail
packages js python
input
head1
output
| head head1 | tail |
it Handles head and tail matching for lines with head and trailing space
key linedata:head-tail
packages js python
input head1 \n
output
| head head1 | tail |