Skip to main content

add_main

Function add_main 

Source
fn add_main(cx: &mut TestCtxt<'_>, c: &mut Crate)
Expand description

Creates a function item for use as the main function of a test build. This function will call the test_runner as specified by the crate attribute

By default this expands to

#[rustc_main]
pub fn main() {
    extern crate test;
    test::test_main_env_args(&[
        &test_const1,
        &test_const2,
        &test_const3,
    ]);
}

Most of the Ident have the usual def-site hygiene for the AST pass. The exception is the test_consts. These have a syntax context that has two opaque marks: one from the expansion of test or test_case, and one generated in TestHarnessGenerator::visit_item. When resolving this identifier after failing to find a matching identifier in the root module we remove the outer mark, and try resolving at its def-site, which will then resolve to test_const.

The expansion here can be controlled by two attributes:

TestCtxt::reexport_test_harness_main provides a different name for the main function and TestCtxt::test_runner provides a path that replaces test::test_main_env_args.