# Gazelle test cases

This directory contains a suite of test cases for the Skylark language plugin
for Gazelle.

Please note that there are no `BUILD` or `BUILD.bazel` files in subdirs, instead
there are `BUILD.in` and `BUILD.out` describing what the `BUILD` should look
like initially and what the `BUILD` file should look like after the run. These
names are special because they are not recognized by Bazel as a proper `BUILD`
file, and therefore are included in the data dependency by the recursive data
glob in `//gazelle:go_default_test`. If you would like to include any extremely
complicated tests that contain proper `BUILD` files you will need to manually
add them to the `//gazelle:go_default_test` target's `data` section.

## `simple`

Simple is a base test case that was used to validate the parser.

## `nobuildfiles`

A test just like `simple` that has no `BUILD` files at the beginning.

## `import`

Import is a test case that imports a `.bzl` from the same directory.

## `multidir`

Multidir is a test that has a `.bzl` that imports from a different dirrectory.

## `tests`

Using the skylib as an example, this test has `.bzl` files that end in
`_tests.bzl` which are `load`ed into `BUILD` files and never imported by
another repo.

## `private`

Using the skylib as an example, this test has `.bzl` files that live in a
directory called `private` which is used to indicate that they are repo private.
Note that this is distict from the expectations of go's `internal` where the
relative position in the hierarchy determines the visibility.

## `defaultvisibility`

If the package declares a `default_visibility` the generated `bzl_library`
should not set its own `visibility`.

## `external`

This test demonstrates that if you load from another repo, it is able to
generate a `deps` entry for the dependency.

## `empty`

Gazelle has the ability to remove old and unused targets. Test that.
