042d70872f
Change-Id: I5f41dc1d8c46160b6870a53544293c44531adc81 |
||
---|---|---|
.. | ||
aosp_rules.pl | ||
BUILD | ||
dummy.sh | ||
load.pl | ||
README.md | ||
rules.pl | ||
run.sh | ||
t1.pl | ||
t2.pl | ||
t3.pl | ||
utils.pl |
Prolog Unit Test Examples
Run all examples
Build a local gerrit.war and then run the script:
./run.sh
Note that a local Gerrit server is not needed because
these unit test examples redefine wrappers of the gerrit:change\*
rules to provide mocked change data.
Add a new unit test
Please follow the pattern in t1.pl
, t2.pl
, or t3.pl
.
-
Put code to be tested in a file, e.g.
rules.pl
. For easy unit testing, split long clauses into short ones and test every positive and negative path. -
Create a new unit test file, e.g.
t1.pl
, which should load the test source file andutils.pl
.% First load all source files and the utils.pl. :- load([aosp_rules,utils]). :- begin_tests(t1). % give this test any name % Use test0/1 or test1/1 to verify failed/passed goals. :- end_tests(_,0). % check total pass/fail counts
-
Optionally replace calls to gerrit functions that depend on repository. For example, define the following wrappers and in source code, use
change_branch/1
instead ofgerrti:change_branch/1
.change_branch(X) :- gerrit:change_branch(X). commit_label(L,U) :- gerrit:commit_label(L,U).
-
In unit test file, redefine the gerrit function wrappers and test. For example, in
t3.pl
, we have::- redefine(uploader,1,uploader(user(42))). % mocked uploader :- test1(uploader(user(42))). :- test0(is_exempt_uploader). % is_exempt_uploader/0 is expected to fail because it is % is_exempt_uploader :- uploader(user(Id)), memberchk(Id, [104, 106]). % Note that gerrit:remove_label does not depend on Gerrit repository, % so its caller remove_label/1 is tested without any redefinition. :- test1(remove_label('MyReview',[],[])). :- test1(remove_label('MyReview',submit(),submit())).