These small examples are designed to run quickly with the Gerrit prolog-shell, but not depending on a local Gerrit repository server. Change-Id: I8f58a6740c6f2c79ae1314f2ae593409ee60440d
		
			
				
	
	
		
			55 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			55 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
# 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 and `utils.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 of `gerrti: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())).
 |