Pyro

A dynamically-typed, garbage-collected scripting language.

Version 0.16.14

Unit Tests



Pyro has builtin support for running unit tests using the test command. You can view the helptext for the test command by running:

pyro test --help

Specify a single file to test:

pyro test script.pyro

Specify multiple files to test:

pyro test *.pyro

Test Functions

For each input file specified on the command line, Pyro first executes the file, then runs any test functions it contains — i.e. functions whose name begins with $test_.

You can use an assert statement to make a test file or function panic if a test fails, e.g.

def $test_addition() {
    assert 1 + 2 == 3;
}

The syntax for an assert statement is:

assert <expression>;

An assert statement passes if its operand expression evaluates as truthy or fails (i.e. panics) if it evaluates as falsey.

(In Pyro, the values false, null, and err are falsey; all other values are truthy.)

Alternatively, you can make a test fail by calling the builtin $panic() function directly, e.g.

def $test_result_type() {
    let result = foo(123, 456);
    if !$is_i64(result) {
        $panic("expected i64, got {}", $type(result));
    }
}

Module-Level Tests

You don't need to use test functions for simple tests — you can put assert statements at global-scope in a file, e.g.

assert "foo" + "bar" == "foobar";

The test command will register the file as passing if it executes without panicking, or as failing if any of the assert statements at global-scope fail.

Import Roots

When you run a script file using the test command, Pyro uses the same default list of import roots it would use if you'd run the script directly — i.e. the directory containing the script file will be added to the list of import roots, along with a modules directory alongside the script file.

Use the -i/--import-root option to add custom directories to the list of import roots.

Command Flags

Tutorial

You can find a unit-testing tutorial here.