2019-02-28 22:43:57 +00:00
|
|
|
<a name="#unittest_toolchain"></a>
|
|
|
|
## unittest_toolchain
|
|
|
|
|
|
|
|
<pre>
|
|
|
|
unittest_toolchain(<a href="#unittest_toolchain-name">name</a>, <a href="#unittest_toolchain-failure_templ">failure_templ</a>, <a href="#unittest_toolchain-file_ext">file_ext</a>, <a href="#unittest_toolchain-join_on">join_on</a>, <a href="#unittest_toolchain-success_templ">success_templ</a>)
|
|
|
|
</pre>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
### Attributes
|
|
|
|
|
|
|
|
<table class="params-table">
|
|
|
|
<colgroup>
|
|
|
|
<col class="col-param" />
|
|
|
|
<col class="col-description" />
|
|
|
|
</colgroup>
|
|
|
|
<tbody>
|
|
|
|
<tr id="unittest_toolchain-name">
|
|
|
|
<td><code>name</code></td>
|
|
|
|
<td>
|
|
|
|
<a href="https://bazel.build/docs/build-ref.html#name">Name</a>; required
|
|
|
|
<p>
|
|
|
|
A unique name for this target.
|
|
|
|
</p>
|
|
|
|
</td>
|
|
|
|
</tr>
|
|
|
|
<tr id="unittest_toolchain-failure_templ">
|
|
|
|
<td><code>failure_templ</code></td>
|
|
|
|
<td>
|
|
|
|
String; required
|
|
|
|
</td>
|
|
|
|
</tr>
|
|
|
|
<tr id="unittest_toolchain-file_ext">
|
|
|
|
<td><code>file_ext</code></td>
|
|
|
|
<td>
|
|
|
|
String; required
|
|
|
|
</td>
|
|
|
|
</tr>
|
|
|
|
<tr id="unittest_toolchain-join_on">
|
|
|
|
<td><code>join_on</code></td>
|
|
|
|
<td>
|
|
|
|
String; required
|
|
|
|
</td>
|
|
|
|
</tr>
|
|
|
|
<tr id="unittest_toolchain-success_templ">
|
|
|
|
<td><code>success_templ</code></td>
|
|
|
|
<td>
|
|
|
|
String; required
|
|
|
|
</td>
|
|
|
|
</tr>
|
|
|
|
</tbody>
|
|
|
|
</table>
|
|
|
|
|
|
|
|
|
|
|
|
## analysistest.make
|
|
|
|
|
|
|
|
<pre>
|
2019-05-08 14:34:47 +00:00
|
|
|
analysistest.make(<a href="#analysistest.make-impl">impl</a>, <a href="#analysistest.make-expect_failure">expect_failure</a>, <a href="#analysistest.make-attrs">attrs</a>, <a href="#analysistest.make-config_settings">config_settings</a>)
|
2019-02-28 22:43:57 +00:00
|
|
|
</pre>
|
|
|
|
|
|
|
|
Creates an analysis test rule from its implementation function.
|
|
|
|
|
|
|
|
An analysis test verifies the behavior of a "real" rule target by examining
|
|
|
|
and asserting on the providers given by the real target.
|
|
|
|
|
|
|
|
Each analysis test is defined in an implementation function that must then be
|
|
|
|
associated with a rule so that a target can be built. This function handles
|
|
|
|
the boilerplate to create and return a test rule and captures the
|
|
|
|
implementation function's name so that it can be printed in test feedback.
|
|
|
|
|
|
|
|
An example of an analysis test:
|
|
|
|
|
|
|
|
```
|
|
|
|
def _your_test(ctx):
|
|
|
|
env = analysistest.begin(ctx)
|
|
|
|
|
|
|
|
# Assert statements go here
|
|
|
|
|
|
|
|
return analysistest.end(env)
|
|
|
|
|
|
|
|
your_test = analysistest.make(_your_test)
|
|
|
|
```
|
|
|
|
|
|
|
|
Recall that names of test rules must end in `_test`.
|
|
|
|
|
|
|
|
|
|
|
|
### Parameters
|
|
|
|
|
|
|
|
<table class="params-table">
|
|
|
|
<colgroup>
|
|
|
|
<col class="col-param" />
|
|
|
|
<col class="col-description" />
|
|
|
|
</colgroup>
|
|
|
|
<tbody>
|
|
|
|
<tr id="analysistest.make-impl">
|
|
|
|
<td><code>impl</code></td>
|
|
|
|
<td>
|
|
|
|
required.
|
|
|
|
<p>
|
|
|
|
The implementation function of the unit test.
|
|
|
|
</p>
|
|
|
|
</td>
|
|
|
|
</tr>
|
|
|
|
<tr id="analysistest.make-expect_failure">
|
|
|
|
<td><code>expect_failure</code></td>
|
|
|
|
<td>
|
|
|
|
optional. default is <code>False</code>
|
|
|
|
<p>
|
|
|
|
If true, the analysis test will expect the target_under_test
|
|
|
|
to fail. Assertions can be made on the underlying failure using asserts.expect_failure
|
|
|
|
</p>
|
|
|
|
</td>
|
|
|
|
</tr>
|
2019-05-08 14:34:47 +00:00
|
|
|
<tr id="analysistest.make-attrs">
|
|
|
|
<td><code>attrs</code></td>
|
|
|
|
<td>
|
|
|
|
optional. default is <code>{}</code>
|
|
|
|
<p>
|
|
|
|
An optional dictionary to supplement the attrs passed to the
|
|
|
|
unit test's `rule()` constructor.
|
|
|
|
</p>
|
|
|
|
</td>
|
|
|
|
</tr>
|
2019-02-28 22:43:57 +00:00
|
|
|
<tr id="analysistest.make-config_settings">
|
|
|
|
<td><code>config_settings</code></td>
|
|
|
|
<td>
|
|
|
|
optional. default is <code>{}</code>
|
|
|
|
<p>
|
|
|
|
A dictionary of configuration settings to change for the target under
|
|
|
|
test and its dependencies. This may be used to essentially change 'build flags' for
|
|
|
|
the target under test, and may thus be utilized to test multiple targets with different
|
|
|
|
flags in a single build
|
|
|
|
</p>
|
|
|
|
</td>
|
|
|
|
</tr>
|
|
|
|
</tbody>
|
|
|
|
</table>
|
|
|
|
|
|
|
|
|
|
|
|
## analysistest.begin
|
|
|
|
|
|
|
|
<pre>
|
|
|
|
analysistest.begin(<a href="#analysistest.begin-ctx">ctx</a>)
|
|
|
|
</pre>
|
|
|
|
|
|
|
|
Begins a unit test.
|
|
|
|
|
|
|
|
This should be the first function called in a unit test implementation
|
|
|
|
function. It initializes a "test environment" that is used to collect
|
|
|
|
assertion failures so that they can be reported and logged at the end of the
|
|
|
|
test.
|
|
|
|
|
|
|
|
|
|
|
|
### Parameters
|
|
|
|
|
|
|
|
<table class="params-table">
|
|
|
|
<colgroup>
|
|
|
|
<col class="col-param" />
|
|
|
|
<col class="col-description" />
|
|
|
|
</colgroup>
|
|
|
|
<tbody>
|
|
|
|
<tr id="analysistest.begin-ctx">
|
|
|
|
<td><code>ctx</code></td>
|
|
|
|
<td>
|
|
|
|
required.
|
|
|
|
<p>
|
|
|
|
The Skylark context. Pass the implementation function's `ctx` argument
|
|
|
|
in verbatim.
|
|
|
|
</p>
|
|
|
|
</td>
|
|
|
|
</tr>
|
|
|
|
</tbody>
|
|
|
|
</table>
|
|
|
|
|
|
|
|
|
|
|
|
## analysistest.end
|
|
|
|
|
|
|
|
<pre>
|
|
|
|
analysistest.end(<a href="#analysistest.end-env">env</a>)
|
|
|
|
</pre>
|
|
|
|
|
|
|
|
Ends an analysis test and logs the results.
|
|
|
|
|
|
|
|
This must be called and returned at the end of an analysis test implementation function so
|
|
|
|
that the results are reported.
|
|
|
|
|
|
|
|
|
|
|
|
### Parameters
|
|
|
|
|
|
|
|
<table class="params-table">
|
|
|
|
<colgroup>
|
|
|
|
<col class="col-param" />
|
|
|
|
<col class="col-description" />
|
|
|
|
</colgroup>
|
|
|
|
<tbody>
|
|
|
|
<tr id="analysistest.end-env">
|
|
|
|
<td><code>env</code></td>
|
|
|
|
<td>
|
|
|
|
required.
|
|
|
|
<p>
|
|
|
|
The test environment returned by `analysistest.begin`.
|
|
|
|
</p>
|
|
|
|
</td>
|
|
|
|
</tr>
|
|
|
|
</tbody>
|
|
|
|
</table>
|
|
|
|
|
|
|
|
|
|
|
|
## analysistest.fail
|
|
|
|
|
|
|
|
<pre>
|
|
|
|
analysistest.fail(<a href="#analysistest.fail-env">env</a>, <a href="#analysistest.fail-msg">msg</a>)
|
|
|
|
</pre>
|
|
|
|
|
|
|
|
Unconditionally causes the current test to fail.
|
|
|
|
|
|
|
|
### Parameters
|
|
|
|
|
|
|
|
<table class="params-table">
|
|
|
|
<colgroup>
|
|
|
|
<col class="col-param" />
|
|
|
|
<col class="col-description" />
|
|
|
|
</colgroup>
|
|
|
|
<tbody>
|
|
|
|
<tr id="analysistest.fail-env">
|
|
|
|
<td><code>env</code></td>
|
|
|
|
<td>
|
|
|
|
required.
|
|
|
|
<p>
|
|
|
|
The test environment returned by `unittest.begin`.
|
|
|
|
</p>
|
|
|
|
</td>
|
|
|
|
</tr>
|
|
|
|
<tr id="analysistest.fail-msg">
|
|
|
|
<td><code>msg</code></td>
|
|
|
|
<td>
|
|
|
|
required.
|
|
|
|
<p>
|
|
|
|
The message to log describing the failure.
|
|
|
|
</p>
|
|
|
|
</td>
|
|
|
|
</tr>
|
|
|
|
</tbody>
|
|
|
|
</table>
|
|
|
|
|
|
|
|
|
|
|
|
## analysistest.target_actions
|
|
|
|
|
|
|
|
<pre>
|
|
|
|
analysistest.target_actions(<a href="#analysistest.target_actions-env">env</a>)
|
|
|
|
</pre>
|
|
|
|
|
|
|
|
Returns a list of actions registered by the target under test.
|
|
|
|
|
|
|
|
### Parameters
|
|
|
|
|
|
|
|
<table class="params-table">
|
|
|
|
<colgroup>
|
|
|
|
<col class="col-param" />
|
|
|
|
<col class="col-description" />
|
|
|
|
</colgroup>
|
|
|
|
<tbody>
|
|
|
|
<tr id="analysistest.target_actions-env">
|
|
|
|
<td><code>env</code></td>
|
|
|
|
<td>
|
|
|
|
required.
|
|
|
|
<p>
|
|
|
|
The test environment returned by `analysistest.begin`.
|
|
|
|
</p>
|
|
|
|
</td>
|
|
|
|
</tr>
|
|
|
|
</tbody>
|
|
|
|
</table>
|
|
|
|
|
|
|
|
|
|
|
|
## analysistest.target_under_test
|
|
|
|
|
|
|
|
<pre>
|
|
|
|
analysistest.target_under_test(<a href="#analysistest.target_under_test-env">env</a>)
|
|
|
|
</pre>
|
|
|
|
|
|
|
|
Returns the target under test.
|
|
|
|
|
|
|
|
### Parameters
|
|
|
|
|
|
|
|
<table class="params-table">
|
|
|
|
<colgroup>
|
|
|
|
<col class="col-param" />
|
|
|
|
<col class="col-description" />
|
|
|
|
</colgroup>
|
|
|
|
<tbody>
|
|
|
|
<tr id="analysistest.target_under_test-env">
|
|
|
|
<td><code>env</code></td>
|
|
|
|
<td>
|
|
|
|
required.
|
|
|
|
<p>
|
|
|
|
The test environment returned by `analysistest.begin`.
|
|
|
|
</p>
|
|
|
|
</td>
|
|
|
|
</tr>
|
|
|
|
</tbody>
|
|
|
|
</table>
|
|
|
|
|
|
|
|
|
|
|
|
## asserts.expect_failure
|
|
|
|
|
|
|
|
<pre>
|
|
|
|
asserts.expect_failure(<a href="#asserts.expect_failure-env">env</a>, <a href="#asserts.expect_failure-expected_failure_msg">expected_failure_msg</a>)
|
|
|
|
</pre>
|
|
|
|
|
|
|
|
Asserts that the target under test has failed with a given error message.
|
|
|
|
|
|
|
|
This requires that the analysis test is created with `analysistest.make()` and
|
|
|
|
`expect_failures = True` is specified.
|
|
|
|
|
|
|
|
|
|
|
|
### Parameters
|
|
|
|
|
|
|
|
<table class="params-table">
|
|
|
|
<colgroup>
|
|
|
|
<col class="col-param" />
|
|
|
|
<col class="col-description" />
|
|
|
|
</colgroup>
|
|
|
|
<tbody>
|
|
|
|
<tr id="asserts.expect_failure-env">
|
|
|
|
<td><code>env</code></td>
|
|
|
|
<td>
|
|
|
|
required.
|
|
|
|
<p>
|
|
|
|
The test environment returned by `analysistest.begin`.
|
|
|
|
</p>
|
|
|
|
</td>
|
|
|
|
</tr>
|
|
|
|
<tr id="asserts.expect_failure-expected_failure_msg">
|
|
|
|
<td><code>expected_failure_msg</code></td>
|
|
|
|
<td>
|
|
|
|
optional. default is <code>""</code>
|
|
|
|
<p>
|
|
|
|
The error message to expect as a result of analysis failures.
|
|
|
|
</p>
|
|
|
|
</td>
|
|
|
|
</tr>
|
|
|
|
</tbody>
|
|
|
|
</table>
|
|
|
|
|
|
|
|
|
|
|
|
## asserts.equals
|
|
|
|
|
|
|
|
<pre>
|
|
|
|
asserts.equals(<a href="#asserts.equals-env">env</a>, <a href="#asserts.equals-expected">expected</a>, <a href="#asserts.equals-actual">actual</a>, <a href="#asserts.equals-msg">msg</a>)
|
|
|
|
</pre>
|
|
|
|
|
|
|
|
Asserts that the given `expected` and `actual` values are equal.
|
|
|
|
|
|
|
|
### Parameters
|
|
|
|
|
|
|
|
<table class="params-table">
|
|
|
|
<colgroup>
|
|
|
|
<col class="col-param" />
|
|
|
|
<col class="col-description" />
|
|
|
|
</colgroup>
|
|
|
|
<tbody>
|
|
|
|
<tr id="asserts.equals-env">
|
|
|
|
<td><code>env</code></td>
|
|
|
|
<td>
|
|
|
|
required.
|
|
|
|
<p>
|
|
|
|
The test environment returned by `unittest.begin`.
|
|
|
|
</p>
|
|
|
|
</td>
|
|
|
|
</tr>
|
|
|
|
<tr id="asserts.equals-expected">
|
|
|
|
<td><code>expected</code></td>
|
|
|
|
<td>
|
|
|
|
required.
|
|
|
|
<p>
|
|
|
|
The expected value of some computation.
|
|
|
|
</p>
|
|
|
|
</td>
|
|
|
|
</tr>
|
|
|
|
<tr id="asserts.equals-actual">
|
|
|
|
<td><code>actual</code></td>
|
|
|
|
<td>
|
|
|
|
required.
|
|
|
|
<p>
|
|
|
|
The actual value returned by some computation.
|
|
|
|
</p>
|
|
|
|
</td>
|
|
|
|
</tr>
|
|
|
|
<tr id="asserts.equals-msg">
|
|
|
|
<td><code>msg</code></td>
|
|
|
|
<td>
|
|
|
|
optional. default is <code>None</code>
|
|
|
|
<p>
|
|
|
|
An optional message that will be printed that describes the failure.
|
|
|
|
If omitted, a default will be used.
|
|
|
|
</p>
|
|
|
|
</td>
|
|
|
|
</tr>
|
|
|
|
</tbody>
|
|
|
|
</table>
|
|
|
|
|
|
|
|
|
|
|
|
## asserts.false
|
|
|
|
|
|
|
|
<pre>
|
|
|
|
asserts.false(<a href="#asserts.false-env">env</a>, <a href="#asserts.false-condition">condition</a>, <a href="#asserts.false-msg">msg</a>)
|
|
|
|
</pre>
|
|
|
|
|
|
|
|
Asserts that the given `condition` is false.
|
|
|
|
|
|
|
|
### Parameters
|
|
|
|
|
|
|
|
<table class="params-table">
|
|
|
|
<colgroup>
|
|
|
|
<col class="col-param" />
|
|
|
|
<col class="col-description" />
|
|
|
|
</colgroup>
|
|
|
|
<tbody>
|
|
|
|
<tr id="asserts.false-env">
|
|
|
|
<td><code>env</code></td>
|
|
|
|
<td>
|
|
|
|
required.
|
|
|
|
<p>
|
|
|
|
The test environment returned by `unittest.begin`.
|
|
|
|
</p>
|
|
|
|
</td>
|
|
|
|
</tr>
|
|
|
|
<tr id="asserts.false-condition">
|
|
|
|
<td><code>condition</code></td>
|
|
|
|
<td>
|
|
|
|
required.
|
|
|
|
<p>
|
|
|
|
A value that will be evaluated in a Boolean context.
|
|
|
|
</p>
|
|
|
|
</td>
|
|
|
|
</tr>
|
|
|
|
<tr id="asserts.false-msg">
|
|
|
|
<td><code>msg</code></td>
|
|
|
|
<td>
|
|
|
|
optional. default is <code>"Expected condition to be false, but was true."</code>
|
|
|
|
<p>
|
|
|
|
An optional message that will be printed that describes the failure.
|
|
|
|
If omitted, a default will be used.
|
|
|
|
</p>
|
|
|
|
</td>
|
|
|
|
</tr>
|
|
|
|
</tbody>
|
|
|
|
</table>
|
|
|
|
|
|
|
|
|
|
|
|
## asserts.set_equals
|
|
|
|
|
|
|
|
<pre>
|
|
|
|
asserts.set_equals(<a href="#asserts.set_equals-env">env</a>, <a href="#asserts.set_equals-expected">expected</a>, <a href="#asserts.set_equals-actual">actual</a>, <a href="#asserts.set_equals-msg">msg</a>)
|
|
|
|
</pre>
|
|
|
|
|
|
|
|
Asserts that the given `expected` and `actual` sets are equal.
|
|
|
|
|
|
|
|
### Parameters
|
|
|
|
|
|
|
|
<table class="params-table">
|
|
|
|
<colgroup>
|
|
|
|
<col class="col-param" />
|
|
|
|
<col class="col-description" />
|
|
|
|
</colgroup>
|
|
|
|
<tbody>
|
|
|
|
<tr id="asserts.set_equals-env">
|
|
|
|
<td><code>env</code></td>
|
|
|
|
<td>
|
|
|
|
required.
|
|
|
|
<p>
|
|
|
|
The test environment returned by `unittest.begin`.
|
|
|
|
</p>
|
|
|
|
</td>
|
|
|
|
</tr>
|
|
|
|
<tr id="asserts.set_equals-expected">
|
|
|
|
<td><code>expected</code></td>
|
|
|
|
<td>
|
|
|
|
required.
|
|
|
|
<p>
|
|
|
|
The expected set resulting from some computation.
|
|
|
|
</p>
|
|
|
|
</td>
|
|
|
|
</tr>
|
|
|
|
<tr id="asserts.set_equals-actual">
|
|
|
|
<td><code>actual</code></td>
|
|
|
|
<td>
|
|
|
|
required.
|
|
|
|
<p>
|
|
|
|
The actual set returned by some computation.
|
|
|
|
</p>
|
|
|
|
</td>
|
|
|
|
</tr>
|
|
|
|
<tr id="asserts.set_equals-msg">
|
|
|
|
<td><code>msg</code></td>
|
|
|
|
<td>
|
|
|
|
optional. default is <code>None</code>
|
|
|
|
<p>
|
|
|
|
An optional message that will be printed that describes the failure.
|
|
|
|
If omitted, a default will be used.
|
|
|
|
</p>
|
|
|
|
</td>
|
|
|
|
</tr>
|
|
|
|
</tbody>
|
|
|
|
</table>
|
|
|
|
|
|
|
|
|
|
|
|
## asserts.new_set_equals
|
|
|
|
|
|
|
|
<pre>
|
|
|
|
asserts.new_set_equals(<a href="#asserts.new_set_equals-env">env</a>, <a href="#asserts.new_set_equals-expected">expected</a>, <a href="#asserts.new_set_equals-actual">actual</a>, <a href="#asserts.new_set_equals-msg">msg</a>)
|
|
|
|
</pre>
|
|
|
|
|
|
|
|
Asserts that the given `expected` and `actual` sets are equal.
|
|
|
|
|
|
|
|
### Parameters
|
|
|
|
|
|
|
|
<table class="params-table">
|
|
|
|
<colgroup>
|
|
|
|
<col class="col-param" />
|
|
|
|
<col class="col-description" />
|
|
|
|
</colgroup>
|
|
|
|
<tbody>
|
|
|
|
<tr id="asserts.new_set_equals-env">
|
|
|
|
<td><code>env</code></td>
|
|
|
|
<td>
|
|
|
|
required.
|
|
|
|
<p>
|
|
|
|
The test environment returned by `unittest.begin`.
|
|
|
|
</p>
|
|
|
|
</td>
|
|
|
|
</tr>
|
|
|
|
<tr id="asserts.new_set_equals-expected">
|
|
|
|
<td><code>expected</code></td>
|
|
|
|
<td>
|
|
|
|
required.
|
|
|
|
<p>
|
|
|
|
The expected set resulting from some computation.
|
|
|
|
</p>
|
|
|
|
</td>
|
|
|
|
</tr>
|
|
|
|
<tr id="asserts.new_set_equals-actual">
|
|
|
|
<td><code>actual</code></td>
|
|
|
|
<td>
|
|
|
|
required.
|
|
|
|
<p>
|
|
|
|
The actual set returned by some computation.
|
|
|
|
</p>
|
|
|
|
</td>
|
|
|
|
</tr>
|
|
|
|
<tr id="asserts.new_set_equals-msg">
|
|
|
|
<td><code>msg</code></td>
|
|
|
|
<td>
|
|
|
|
optional. default is <code>None</code>
|
|
|
|
<p>
|
|
|
|
An optional message that will be printed that describes the failure.
|
|
|
|
If omitted, a default will be used.
|
|
|
|
</p>
|
|
|
|
</td>
|
|
|
|
</tr>
|
|
|
|
</tbody>
|
|
|
|
</table>
|
|
|
|
|
|
|
|
|
|
|
|
## asserts.true
|
|
|
|
|
|
|
|
<pre>
|
|
|
|
asserts.true(<a href="#asserts.true-env">env</a>, <a href="#asserts.true-condition">condition</a>, <a href="#asserts.true-msg">msg</a>)
|
|
|
|
</pre>
|
|
|
|
|
|
|
|
Asserts that the given `condition` is true.
|
|
|
|
|
|
|
|
### Parameters
|
|
|
|
|
|
|
|
<table class="params-table">
|
|
|
|
<colgroup>
|
|
|
|
<col class="col-param" />
|
|
|
|
<col class="col-description" />
|
|
|
|
</colgroup>
|
|
|
|
<tbody>
|
|
|
|
<tr id="asserts.true-env">
|
|
|
|
<td><code>env</code></td>
|
|
|
|
<td>
|
|
|
|
required.
|
|
|
|
<p>
|
|
|
|
The test environment returned by `unittest.begin`.
|
|
|
|
</p>
|
|
|
|
</td>
|
|
|
|
</tr>
|
|
|
|
<tr id="asserts.true-condition">
|
|
|
|
<td><code>condition</code></td>
|
|
|
|
<td>
|
|
|
|
required.
|
|
|
|
<p>
|
|
|
|
A value that will be evaluated in a Boolean context.
|
|
|
|
</p>
|
|
|
|
</td>
|
|
|
|
</tr>
|
|
|
|
<tr id="asserts.true-msg">
|
|
|
|
<td><code>msg</code></td>
|
|
|
|
<td>
|
|
|
|
optional. default is <code>"Expected condition to be true, but was false."</code>
|
|
|
|
<p>
|
|
|
|
An optional message that will be printed that describes the failure.
|
|
|
|
If omitted, a default will be used.
|
|
|
|
</p>
|
|
|
|
</td>
|
|
|
|
</tr>
|
|
|
|
</tbody>
|
|
|
|
</table>
|
|
|
|
|
|
|
|
|
|
|
|
## register_unittest_toolchains
|
|
|
|
|
|
|
|
<pre>
|
|
|
|
register_unittest_toolchains()
|
|
|
|
</pre>
|
|
|
|
|
|
|
|
Registers the toolchains for unittest users.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
## unittest.make
|
|
|
|
|
|
|
|
<pre>
|
|
|
|
unittest.make(<a href="#unittest.make-impl">impl</a>, <a href="#unittest.make-attrs">attrs</a>)
|
|
|
|
</pre>
|
|
|
|
|
|
|
|
Creates a unit test rule from its implementation function.
|
|
|
|
|
|
|
|
Each unit test is defined in an implementation function that must then be
|
|
|
|
associated with a rule so that a target can be built. This function handles
|
|
|
|
the boilerplate to create and return a test rule and captures the
|
|
|
|
implementation function's name so that it can be printed in test feedback.
|
|
|
|
|
|
|
|
The optional `attrs` argument can be used to define dependencies for this
|
|
|
|
test, in order to form unit tests of rules.
|
|
|
|
|
|
|
|
An example of a unit test:
|
|
|
|
|
|
|
|
```
|
|
|
|
def _your_test(ctx):
|
|
|
|
env = unittest.begin(ctx)
|
|
|
|
|
|
|
|
# Assert statements go here
|
|
|
|
|
|
|
|
return unittest.end(env)
|
|
|
|
|
|
|
|
your_test = unittest.make(_your_test)
|
|
|
|
```
|
|
|
|
|
|
|
|
Recall that names of test rules must end in `_test`.
|
|
|
|
|
|
|
|
|
|
|
|
### Parameters
|
|
|
|
|
|
|
|
<table class="params-table">
|
|
|
|
<colgroup>
|
|
|
|
<col class="col-param" />
|
|
|
|
<col class="col-description" />
|
|
|
|
</colgroup>
|
|
|
|
<tbody>
|
|
|
|
<tr id="unittest.make-impl">
|
|
|
|
<td><code>impl</code></td>
|
|
|
|
<td>
|
|
|
|
required.
|
|
|
|
<p>
|
|
|
|
The implementation function of the unit test.
|
|
|
|
</p>
|
|
|
|
</td>
|
|
|
|
</tr>
|
|
|
|
<tr id="unittest.make-attrs">
|
|
|
|
<td><code>attrs</code></td>
|
|
|
|
<td>
|
2019-05-08 14:34:47 +00:00
|
|
|
optional. default is <code>{}</code>
|
2019-02-28 22:43:57 +00:00
|
|
|
<p>
|
|
|
|
An optional dictionary to supplement the attrs passed to the
|
|
|
|
unit test's `rule()` constructor.
|
|
|
|
</p>
|
|
|
|
</td>
|
|
|
|
</tr>
|
|
|
|
</tbody>
|
|
|
|
</table>
|
|
|
|
|
|
|
|
|
|
|
|
## unittest.suite
|
|
|
|
|
|
|
|
<pre>
|
|
|
|
unittest.suite(<a href="#unittest.suite-name">name</a>, <a href="#unittest.suite-test_rules">test_rules</a>)
|
|
|
|
</pre>
|
|
|
|
|
|
|
|
Defines a `test_suite` target that contains multiple tests.
|
|
|
|
|
|
|
|
After defining your test rules in a `.bzl` file, you need to create targets
|
|
|
|
from those rules so that `blaze test` can execute them. Doing this manually
|
|
|
|
in a BUILD file would consist of listing each test in your `load` statement
|
|
|
|
and then creating each target one by one. To reduce duplication, we recommend
|
|
|
|
writing a macro in your `.bzl` file to instantiate all targets, and calling
|
|
|
|
that macro from your BUILD file so you only have to load one symbol.
|
|
|
|
|
|
|
|
For the case where your unit tests do not take any (non-default) attributes --
|
|
|
|
i.e., if your unit tests do not test rules -- you can use this function to
|
|
|
|
create the targets and wrap them in a single test_suite target. In your
|
|
|
|
`.bzl` file, write:
|
|
|
|
|
|
|
|
```
|
|
|
|
def your_test_suite():
|
|
|
|
unittest.suite(
|
|
|
|
"your_test_suite",
|
|
|
|
your_test,
|
|
|
|
your_other_test,
|
|
|
|
yet_another_test,
|
|
|
|
)
|
|
|
|
```
|
|
|
|
|
|
|
|
Then, in your `BUILD` file, simply load the macro and invoke it to have all
|
|
|
|
of the targets created:
|
|
|
|
|
|
|
|
```
|
|
|
|
load("//path/to/your/package:tests.bzl", "your_test_suite")
|
|
|
|
your_test_suite()
|
|
|
|
```
|
|
|
|
|
|
|
|
If you pass _N_ unit test rules to `unittest.suite`, _N_ + 1 targets will be
|
|
|
|
created: a `test_suite` target named `${name}` (where `${name}` is the name
|
|
|
|
argument passed in here) and targets named `${name}_test_${i}`, where `${i}`
|
|
|
|
is the index of the test in the `test_rules` list, which is used to uniquely
|
|
|
|
name each target.
|
|
|
|
|
|
|
|
|
|
|
|
### Parameters
|
|
|
|
|
|
|
|
<table class="params-table">
|
|
|
|
<colgroup>
|
|
|
|
<col class="col-param" />
|
|
|
|
<col class="col-description" />
|
|
|
|
</colgroup>
|
|
|
|
<tbody>
|
|
|
|
<tr id="unittest.suite-name">
|
|
|
|
<td><code>name</code></td>
|
|
|
|
<td>
|
|
|
|
required.
|
|
|
|
<p>
|
|
|
|
The name of the `test_suite` target, and the prefix of all the test
|
|
|
|
target names.
|
|
|
|
</p>
|
|
|
|
</td>
|
|
|
|
</tr>
|
|
|
|
<tr id="unittest.suite-test_rules">
|
|
|
|
<td><code>test_rules</code></td>
|
|
|
|
<td>
|
|
|
|
optional.
|
|
|
|
<p>
|
|
|
|
A list of test rules defines by `unittest.test`.
|
|
|
|
</p>
|
|
|
|
</td>
|
|
|
|
</tr>
|
|
|
|
</tbody>
|
|
|
|
</table>
|
|
|
|
|
|
|
|
|
|
|
|
## unittest.begin
|
|
|
|
|
|
|
|
<pre>
|
|
|
|
unittest.begin(<a href="#unittest.begin-ctx">ctx</a>)
|
|
|
|
</pre>
|
|
|
|
|
|
|
|
Begins a unit test.
|
|
|
|
|
|
|
|
This should be the first function called in a unit test implementation
|
|
|
|
function. It initializes a "test environment" that is used to collect
|
|
|
|
assertion failures so that they can be reported and logged at the end of the
|
|
|
|
test.
|
|
|
|
|
|
|
|
|
|
|
|
### Parameters
|
|
|
|
|
|
|
|
<table class="params-table">
|
|
|
|
<colgroup>
|
|
|
|
<col class="col-param" />
|
|
|
|
<col class="col-description" />
|
|
|
|
</colgroup>
|
|
|
|
<tbody>
|
|
|
|
<tr id="unittest.begin-ctx">
|
|
|
|
<td><code>ctx</code></td>
|
|
|
|
<td>
|
|
|
|
required.
|
|
|
|
<p>
|
|
|
|
The Skylark context. Pass the implementation function's `ctx` argument
|
|
|
|
in verbatim.
|
|
|
|
</p>
|
|
|
|
</td>
|
|
|
|
</tr>
|
|
|
|
</tbody>
|
|
|
|
</table>
|
|
|
|
|
|
|
|
|
|
|
|
## unittest.end
|
|
|
|
|
|
|
|
<pre>
|
|
|
|
unittest.end(<a href="#unittest.end-env">env</a>)
|
|
|
|
</pre>
|
|
|
|
|
|
|
|
Ends a unit test and logs the results.
|
|
|
|
|
|
|
|
This must be called and returned at the end of a unit test implementation function so
|
|
|
|
that the results are reported.
|
|
|
|
|
|
|
|
|
|
|
|
### Parameters
|
|
|
|
|
|
|
|
<table class="params-table">
|
|
|
|
<colgroup>
|
|
|
|
<col class="col-param" />
|
|
|
|
<col class="col-description" />
|
|
|
|
</colgroup>
|
|
|
|
<tbody>
|
|
|
|
<tr id="unittest.end-env">
|
|
|
|
<td><code>env</code></td>
|
|
|
|
<td>
|
|
|
|
required.
|
|
|
|
<p>
|
|
|
|
The test environment returned by `unittest.begin`.
|
|
|
|
</p>
|
|
|
|
</td>
|
|
|
|
</tr>
|
|
|
|
</tbody>
|
|
|
|
</table>
|
|
|
|
|
|
|
|
|
|
|
|
## unittest.fail
|
|
|
|
|
|
|
|
<pre>
|
|
|
|
unittest.fail(<a href="#unittest.fail-env">env</a>, <a href="#unittest.fail-msg">msg</a>)
|
|
|
|
</pre>
|
|
|
|
|
|
|
|
Unconditionally causes the current test to fail.
|
|
|
|
|
|
|
|
### Parameters
|
|
|
|
|
|
|
|
<table class="params-table">
|
|
|
|
<colgroup>
|
|
|
|
<col class="col-param" />
|
|
|
|
<col class="col-description" />
|
|
|
|
</colgroup>
|
|
|
|
<tbody>
|
|
|
|
<tr id="unittest.fail-env">
|
|
|
|
<td><code>env</code></td>
|
|
|
|
<td>
|
|
|
|
required.
|
|
|
|
<p>
|
|
|
|
The test environment returned by `unittest.begin`.
|
|
|
|
</p>
|
|
|
|
</td>
|
|
|
|
</tr>
|
|
|
|
<tr id="unittest.fail-msg">
|
|
|
|
<td><code>msg</code></td>
|
|
|
|
<td>
|
|
|
|
required.
|
|
|
|
<p>
|
|
|
|
The message to log describing the failure.
|
|
|
|
</p>
|
|
|
|
</td>
|
|
|
|
</tr>
|
|
|
|
</tbody>
|
|
|
|
</table>
|
|
|
|
|
|
|
|
|