% copyright-statement-lint test suite Introduction ============ `copyright-statement-lint` checks source files for copyright statements, and checks that their copyright year matches the latest git commit. As such, this test suite needs to verify several different cases: no copyright statement, wrong year, multiple statements, etc. Also various forms of copyright statements. All of these are fairly simple, however. The test creates a file with a suitable statement, runs the tool against the file, and checks that the output of the tool is as expected. Scenarios ========= No copyright file ----------------- SCENARIO no copyright file GIVEN an empty file FOOBAR WHEN copyright-statement-lint is run against FOOBAR THEN exit code is 1 AND stderr contains "FOOBAR.*no copyright statement" Simple copyright statement -------------------------- SCENARIO simple copyright statement GIVEN a file FOOBAR containing "Copyright 2014 Foo Bar" GIVEN commit year is 2013 WHEN copyright-statement-lint is run against FOOBAR THEN exit code is 1 AND stderr contains "FOOBAR.*2013 not contained" GIVEN commit year is 2014 WHEN copyright-statement-lint is run against FOOBAR THEN exit code is 0 GIVEN commit year is 2015 WHEN copyright-statement-lint is run against FOOBAR THEN exit code is 1 AND stderr contains "FOOBAR.*2015 not contained" Itemised copyright years ------------------------ SCENARIO itemised copyright years GIVEN a file FOOBAR containing "Copyright 1999,2014 Foo Bar" GIVEN commit year is 1998 WHEN copyright-statement-lint is run against FOOBAR THEN exit code is 1 AND stderr contains "FOOBAR.*1998 not contained" GIVEN commit year is 1999 WHEN copyright-statement-lint is run against FOOBAR THEN exit code is 0 GIVEN commit year is 2000 WHEN copyright-statement-lint is run against FOOBAR THEN exit code is 1 AND stderr contains "FOOBAR.*2000 not contained" GIVEN commit year is 2013 WHEN copyright-statement-lint is run against FOOBAR THEN exit code is 1 AND stderr contains "FOOBAR.*2013 not contained" GIVEN commit year is 2014 WHEN copyright-statement-lint is run against FOOBAR THEN exit code is 0 GIVEN commit year is 2015 WHEN copyright-statement-lint is run against FOOBAR THEN exit code is 1 AND stderr contains "FOOBAR.*2015 not contained" Range of copyright years ------------------------ SCENARIO range of copyright years GIVEN a file FOOBAR containing "Copyright 1999-2014 Foo Bar" GIVEN commit year is 1998 WHEN copyright-statement-lint is run against FOOBAR THEN exit code is 1 AND stderr contains "FOOBAR.*1998 not contained" GIVEN commit year is 1999 WHEN copyright-statement-lint is run against FOOBAR THEN exit code is 0 GIVEN commit year is 2000 WHEN copyright-statement-lint is run against FOOBAR THEN exit code is 0 GIVEN commit year is 2013 WHEN copyright-statement-lint is run against FOOBAR THEN exit code is 0 GIVEN commit year is 2014 WHEN copyright-statement-lint is run against FOOBAR THEN exit code is 0 GIVEN commit year is 2015 WHEN copyright-statement-lint is run against FOOBAR THEN exit code is 1 AND stderr contains "FOOBAR.*2015 not contained" Combined itemised and range of copyright years ---------------------------------------------- SCENARIO combined itemised and range of copyright years GIVEN a file FOOBAR containing "Copyright 1999-2000, 2014 Foo Bar" GIVEN commit year is 1998 WHEN copyright-statement-lint is run against FOOBAR THEN exit code is 1 AND stderr contains "FOOBAR.*1998 not contained" GIVEN commit year is 1999 WHEN copyright-statement-lint is run against FOOBAR THEN exit code is 0 GIVEN commit year is 2000 WHEN copyright-statement-lint is run against FOOBAR THEN exit code is 0 GIVEN commit year is 2001 WHEN copyright-statement-lint is run against FOOBAR THEN exit code is 1 AND stderr contains "FOOBAR.*2001 not contained" GIVEN commit year is 2013 WHEN copyright-statement-lint is run against FOOBAR THEN exit code is 1 AND stderr contains "FOOBAR.*2013 not contained" GIVEN commit year is 2014 WHEN copyright-statement-lint is run against FOOBAR THEN exit code is 0 GIVEN commit year is 2015 WHEN copyright-statement-lint is run against FOOBAR THEN exit code is 1 AND stderr contains "FOOBAR.*2015 not contained" Implementations =============== File creation ------------- These are all pretty straightforward. Any files are created in `$DATADIR` using names given by the user. IMPLEMENTS GIVEN an empty file (\S+) touch "$DATADIR/$MATCH_1" IMPLEMENTS GIVEN a file (\S+) containing "(.*)" printf '%s\n' "$MATCH_2" > "$DATADIR/$MATCH_1" Pretending what the commit year is ---------------------------------- IMPLEMENTS GIVEN commit year is (\d+) printf '[config]\ndebug-commit-year = %s\n' "$MATCH_1" \ > "$DATADIR/test.conf" Running and checking the results of `copyright-statement-lint` -------------------------------------------------------------- We only have this one way of running the tool. We capture stdout, stderr, and the exit code. Note: we do not fail the step even if the tool fails. IMPLEMENTS WHEN copyright-statement-lint is run against (\S+) # Given set -e, we need to use an if to capture non-zero exit # code. Don't want to turn set -e off, so we capture other errors. if "$SRCDIR/copyright-statement-lint" \ --no-default-config "$DATADIR/$MATCH_1" \ --config "$DATADIR/test.conf" \ > "$DATADIR/stdout" \ 2> "$DATADIR/stderr" then exit=0 else exit=$? fi echo "$exit" > "$DATADIR/exit" Exit code checking. Since we don't fail the running of the tool, every scenario is expected to check the exit code. IMPLEMENTS THEN exit code is (\d+) cat "$DATADIR/exit" grep -Fx "$MATCH_1" "$DATADIR/exit" Check stdout/stderr. IMPLEMENTS THEN (\S+) contains "(.*)" cat "$DATADIR/$MATCH_1" grep "$MATCH_2" "$DATADIR/$MATCH_1"