{namespace java_test}

/***/
{template .soyweb}
  {call buck.page}
    {param title: 'java_test()' /}
    {param prettify: true /}
    {param description}
      A rule that is used to define a set of Java files that contain tests.
    {/param}
    {param content}

{call buck.rule}
{param status: 'FROZEN' /}
{param overview}
A <code>java_test()</code> rule is used to define a set of
<code>.java</code> files that contain tests to run via JUnit.
{/param}

{param args}

{call buck.arg}
  {param name: 'name' /}
  {param desc}
  The name of the rule.
  {/param}
{/call}

{call buck.arg}
  {param name: 'srcs' /}
  {param default : '[]' /}
  {param desc}
  Like <a href="java_library.html"><code>java_library()</code></a>,
  all of the <code>.java</code> files specified by the
  {sp}<code>srcs</code> argument will be compiled when this rule is
  built. In addition, all of the corresponding <code>.class</code>{sp}
  files that are built by this rule will be passed as arguments to
  JUnit when this rule is run as a test. <code>.class</code> files
  that are passed to JUnit that do not have any methods annotated with
  {sp}<code>@Test</code> are considered failed tests, so make sure that
  only test case classes are specified as <code>srcs</code>. This is
  frequently done by specifying <code>srcs</code> as
  {sp}{literal}<code>glob(['**/*Test.java'])</code>{/literal}.
  {/param}
{/call}

{call buck.arg}
  {param name: 'resources' /}
  {param default : '[]' /}
  {param desc}
  Same as <a href="java_library.html"><code>java_library()</code></a>. 
  {/param}
{/call}

{call buck.arg}
  {param name: 'labels' /}
  {param default: '[]' /}
  {param desc}
  A list of labels to be applied to these tests. These labels are
  arbitrary text strings and have no meaning within buck itself. They
  can, however, have meaning for you as a test author
  (e.g., <code>smoke</code> or <code>fast</code>). A label can be
  used to filter or include a specific <code>java_test()</code> rule
  when executing <a href="{ROOT}command/test.html"><code>buck
  test</code></a>.
  {/param}
{/call}

{call buck.arg}
  {param name: 'source_under_test' /}
  {param default : '[]' /}
  {param desc}
  <code>java_library()</code> rules that the <code>java_test()</code> is
  testing. These must be among the transitive dependencies of the
  {sp}<code>java_test()</code>. The <code>.class</code> files for the rules
  specified by <code>source_under_test</code> will be be instrumented by the
  code coverage tool, EMMA, if <a href="{ROOT}command/test.html"><code>buck
  test</code></a> is executed with the {sp}<code>--code-coverage</code> option.
  {/param}
{/call}

{call buck.arg}
  {param name: 'source' /}
  {param default : '\'6\'' /}
  {param desc}
  Java language level for compiling. Corresponds to the
  {sp}<code>-source</code> argument for <code>javac</code>.
  {/param}
{/call}

{call buck.arg}
  {param name: 'target' /}
  {param default : '\'6\'' /}
  {param desc}
  Bytecode target level for compiling. Corresponds to the
  {sp}<code>-target</code> argument for <code>javac</code>.
  {/param}
{/call}

{call buck.arg}
  {param name: 'deps' /}
  {param default : '[]' /}
  {param desc}
  Same as <a href="java_library.html"><code>java_library()</code></a>.
  // org.junit.rules.Timeout was not introduced until 4.7.
  Must include JUnit as a dependency (version 4.7 or later).
  {/param}
{/call}

{call buck.arg}
  {param name: 'test_type' /}
  {param default : 'junit' /}
  {param desc}
  Specifies which test framework to use.
  The currently supported options are 'junit' and 'testng'.
  {/param}
{/call}

{call buck.visibility_arg /}

{/param} // close args

{/call} // close buck.rule

    {/param}
  {/call}
{/template}
