Skip to content

emcfarlane/starlarkassert

Repository files navigation

starlarkassert

Go Reference

Package starlarkassert binds starlark scripts to go's testing framework. Create tests in starlark files by prefixing starlark functions with test_ that take one arg t. Each function will be bound to go's test runner. Set the test files in a root Go project and provide any global functions or methods to callback. Than run go test as usual.

# tests are prefixed with "test_"
def test_are_prefix(assert):
    assert.true(True)
    print("here")  # print formats in go's t.Log(...)

# tests can run subtests with "assert.run()"
def test_subtest(assert):
    for name in ["test", "names"]:
        assert.run(name, lambda assert: print(name))
# benches are prefixed with "bench_"
def bench_append(b):
    a = []
    b.restart()
    for i in range(b.n):
        a.append(i)

Integrate starlark Scripts with go's test framework:

func TestScript(t *testing.T) {
	globals := starlark.StringDict{
		"struct": starlark.NewBuiltin("struct", starlarkstruct.Make),
	}
	RunTests(t, "testdata/*.star", globals)
}

Then run tests like you would with Go:

$ go test -v .
=== RUN   TestRunTests
=== RUN   TestRunTests/test_here
    testdata/test.star:6:10 here
=== RUN   TestRunTests/test_array
    testdata/test.star:11:14 name: lord
    testdata/test.star:11:14 name: of
    testdata/test.star:11:14 name: the
    testdata/test.star:11:14 name: rings
=== RUN   TestRunTests/test_t_run
=== RUN   TestRunTests/test_t_run/harry
    testdata/test.star:16:36 harry
=== RUN   TestRunTests/test_t_run/potter
    testdata/test.star:16:36 potter
=== RUN   TestRunTests/test_globals
=== RUN   TestRunTests/test_globals_frozen
=== RUN   TestRunTests/test_load
    testdata/test.star:35:10 hello, world
--- PASS: TestRunTests (0.00s)
    --- PASS: TestRunTests/test_here (0.00s)
    --- PASS: TestRunTests/test_array (0.00s)
    --- PASS: TestRunTests/test_t_run (0.00s)
        --- PASS: TestRunTests/test_t_run/harry (0.00s)
        --- PASS: TestRunTests/test_t_run/potter (0.00s)
    --- PASS: TestRunTests/test_globals (0.00s)
    --- PASS: TestRunTests/test_globals_frozen (0.00s)
    --- PASS: TestRunTests/test_load (0.00s)
=== RUN   Test_depsInterface
    testing_test.go:28: 
--- SKIP: Test_depsInterface (0.00s)
PASS
ok  	github.com/emcfarlane/starlarkassert	(cached)

test

test·error

t.error(msg) reports the error msg to the test runner.

Parameter Type Description
msg string Message.

test·fail

t.fail() fails the test and halts test running.

test·fatal

t.fatal(msg) reports the error msg to the test runner, and fails the test.

Parameter Type Description
msg value Message.

test·freeze

t.freeze(val) the value, for testing freeze behaviour. All mutations after freeze should fail.

Parameter Type Description
val value Value to freeze.

test·run

t.run(subtest) runs the function with a test instance as the first arg.

Parameter Type Description
subtest function Function to run as a subtest.

test·skip

t.skip() skips the current test.

test·equal

t.equal(a, b) compares two values of the same type are equal. If the value is diffable it will report the difference between the two.

Parameter Type Description
a value Value expected.
b value Value given.

test·not_equal

t.not_equal(a, b) compares two values of the same type are not equal, r

Parameter Type Description
a value Value expected.
b value Value given.

test·less_than

t.less_than(a, b) compares two values of the same type are less than.

Parameter Type Description
a value Value expected.
b value Value given.

test·true

t.true(a, msg) checks truthyness reporting the message if falsy.

Parameter Type Description
a value Value expected to be truthy.
msg string Message to report on falsyness.

test·contains

t.contains(a, b) checks b is in a.

Parameter Type Description
a iterable Iterable item.
b value Value expected.

test·fails

t.fails(f, pattern) runs the function and checks the returned error matches the regex pattern.

Parameter Type Description
f function value to run.
pattern string Regex pattern to match.

bench

Bench is a superset of test. All attributes are included plus the following.

bench·restart

b.restart() the benchmark clock.

bench·start

b.start() the benchmark clock.

bench·stop

b.stop() the benchmark clock.

bench·n

b.n returns the current benchmark iteration size.

Releases

No releases published

Packages

No packages published

Languages