summaryrefslogtreecommitdiff
path: root/yarns/010-tests.yarn
blob: 65adcfcddf2074ed1df16bf0f516233c113fe4a8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
% 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"

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"