Commit graph

19 commits

Author SHA1 Message Date
Manlio Perillo
e4e096c680 build: make literal paths portable
Use fs.path.sep_str instead of a slash, in literal paths.
2023-05-09 11:11:11 +02:00
Manlio Perillo
728402c64f tests: remove the missing functions from RunStep
Use directly the RunStep.addCheck method, instead.
2023-05-09 11:11:11 +02:00
Manlio Perillo
1dd5852bec build: use multiline string literals when necessary
Update the output and hint fields in the `exercises` slice to use a
multiline string literal when the string have multiple lines or use the
`"` character.  This will greatly improve readability.
Additionally, remove the trailing whitespace on each line and check it
in the validate_exercises function.

Update the output comparison logic in ZiglingStep, since the current
code assumes that the string has only one line.

Update test/tests.zig to use the new `CheckNamedStep` in test case 1,
since RunStep.StdIo.Check is no longer able to correctly check the
output.

Fixes #283
2023-05-06 18:12:04 +02:00
Manlio Perillo
be43e2d010 build: make Exercise.hint optional
Use an optional type, instead of an empty string, since it is more
idiomatic.
2023-05-06 11:50:42 +02:00
Manlio Perillo
0cd86d2f9b build: add the healed-path option
This is necessary in the unit tests, to ensure each test case use a
different exercises directory.

Update test/tests.zig to use the new healed-path option, ensuring that
each temp directory is removed.

In test case 3, 4 and 5, move case_step as the first step in the
dependency chain.  This will improve the build summary tree.

In test case 5, remove the dependency to heal_step, since it is not
necessary.
2023-05-05 16:22:50 +02:00
Manlio Perillo
eda73b2fa8 test: remove obsolete comment in the heal function
Remove the comment about using POSIX patch variant, since we now use the
-s option.
2023-05-04 19:01:48 +02:00
Manlio Perillo
277c95db7a test: fix doc-comments
CheckStep, FailStep, fail, HealStep and heal incorrectly used a normal
comment, instead of a doc-comment.

Additionally, improve the documentation for FailStep and HealStep.
2023-05-04 18:48:35 +02:00
Manlio Perillo
5c488a1402 test: improve test case 1 and 2
In test case 1 and 2, remove the `i` variable and use `ex.number()`
instead.

In test case 2, when checking the exercise output from stderr, also
check that stdout is empty and vice versa.
2023-05-04 16:34:17 +02:00
Manlio Perillo
74b48192e4 test: don't run heal during configuration phase
In order to simplify the code, the heal function is called during the
configuration phase, thus resulting in the function being always called
when the build.zig file is run.

This behavior unfortunately causes a serious issue when the user fix a
broken exercise and, during the next step, the heal function tries to heal
the fixed exercise resulting in GNU patch assuming an attempt to reverse
a patch, waiting for input from the terminal.

Run the heal function from the new HealStep step, so that it is called
only during tests.

Rename the outdir constant to work_path, for consistency with build.zig.

Fixes #272
2023-05-02 11:13:25 +02:00
Manlio Perillo
5c20e2b553 build: rename Exercise.baseName to name
The name "baseName" is confusing, since it refers to the UNIX basename
command, and not to the basename function in some programming languages
including Zig.

Use the std.fs.path.stem function to remove the file extension, instead
of slicing.

Remove the use of the assertion, since it is no longer necessary.
Instead, add a check to ensure that the exercise must be a Zig source
file in the validate_exercises function.

Update the validate_exercises function to check the last exercise, too.
2023-05-01 18:39:54 +02:00
Manlio Perillo
11d2279f4f test: make the patch command silent
The POSIX standard says that the patch command should not use stdout,
but GNU patch writes the message:
patching file patches/healed/xxx.zig (read from exercises/xxx.zig).

Add the -s flag to suppress these messages.

Note that the heal function from test/tests.zig is called when running
`zig build -Dhealed` because it is executed in the configure phase.
2023-04-29 16:50:28 +02:00
Manlio Perillo
4b1e292ae4 test: fix deadlock on windows when running tests
The deadlock was caused by setting stdout behavior to ignore, when
spawning the patch command.  When the patch command writes to devnull it
causes some errors and a deadlock.

The cause of the bug is probably Zig using `\Device\Null` from `ntdll`
while git-bash uses `NUL` from `kernel32`.
2023-04-29 16:25:58 +02:00
Manlio Perillo
4f690b074a test: add a test for zig build -Dn=1
Add a test for `zig build -Dn=1` in order to test that a broken exercise
will print an hint.
2023-04-24 13:03:52 +02:00
Manlio Perillo
5b2e842157 test: change the order of zig build options
In test case 1 and 2, move the -Dhealed option before the -Dn option,
for consistency.

Fix a typo in cmd.setName in test case 1 and 2.

Remove a confusing comment in test case 1.
2023-04-24 12:19:00 +02:00
Manlio Perillo
131772edd7 test: add test for zig build and zig build -Dn=1 start
Add tests for `zig build` and `zig build -Dn=1 start`, in order to test
that the all the exercises are processed in the correct order.
2023-04-24 11:59:08 +02:00
Manlio Perillo
cec0aa51db test: fix incorrect cleanup code
The current cleanup code is incorrect, since it may delete the healed
directory while one test case is running.

The solution is to make each test case isolate, with its own setup and
teardown.  Unfortunately it is currently not possible, since each test
case modify the same directory.

Disable the cleanup step, until a better solution is found.
2023-04-24 10:32:08 +02:00
Manlio Perillo
108c145bdd test: refactorize the code
Currently, if there is an error when creating the patches/healed
directory, the error message will be printed on stderr, but the build
runner will report the test as being successful.

Add the fail function and the FailStep, so that the error will be
correctly handled by the build runner.

Remove the PatchStep, and instead add the heal function so that all the
exercises are healed before starting the tests.

The heal function executes at the configuration phase, but the possible
error is handled by the build runner.
2023-04-24 10:31:06 +02:00
Manlio Perillo
647a24afae build: improve PrintStep, SkipStep and PatchStep names
Use lover case for the step names.

Add the exercise name for the SkipStep and PatchStep step name.
2023-04-11 12:45:55 +02:00
Manlio Perillo
c656536d3f build: simplify code and add tests
Simplify the code finding the exercise number from the exercise index,
when the -Dn option is set.  This is now possible since the exercise
numbers have no holes.

Add the validate_exercises function to check that exercise number are in
the correct order, and call it at the start of the build function.

Add tests, with 2 test cases.
2023-04-11 12:45:55 +02:00