mod uc_01_own_use_simple
{
use mod_interface_meta::mod_interface;
mod private
{
pub fn my_fn() -> bool { true }
}
mod_interface!
{
own use my_fn;
}
#[ test ]
fn own_layer_has_item()
{
assert!( own::my_fn() );
}
#[ test ]
fn orphan_layer_has_item()
{
assert!( orphan::my_fn() );
}
#[ test ]
fn exposed_layer_has_item()
{
assert!( exposed::my_fn() );
}
#[ test ]
fn prelude_layer_has_item()
{
assert!( prelude::my_fn() );
}
}
mod uc_02_orphan_use_simple
{
use mod_interface_meta::mod_interface;
mod private
{
pub fn my_fn() -> bool { true }
}
mod_interface!
{
orphan use my_fn;
}
#[ test ]
fn orphan_layer_has_item()
{
assert!( orphan::my_fn() );
}
#[ test ]
fn exposed_layer_has_item()
{
assert!( exposed::my_fn() );
}
#[ test ]
fn prelude_layer_has_item()
{
assert!( prelude::my_fn() );
}
}
mod uc_03_exposed_use_simple
{
use mod_interface_meta::mod_interface;
mod private
{
pub fn my_fn() -> bool { true }
}
mod_interface!
{
exposed use my_fn;
}
#[ test ]
fn exposed_layer_has_item()
{
assert!( exposed::my_fn() );
}
#[ test ]
fn prelude_layer_has_item()
{
assert!( prelude::my_fn() );
}
}
mod uc_04_prelude_use_simple
{
use mod_interface_meta::mod_interface;
mod private
{
pub fn my_fn() -> bool { true }
}
mod_interface!
{
prelude use my_fn;
}
#[ test ]
fn prelude_layer_has_item()
{
assert!( prelude::my_fn() );
}
}
mod uc_05_implicit_use_all_layers
{
use mod_interface_meta::mod_interface;
mod private
{
pub fn my_fn() -> bool { true }
}
mod_interface!
{
use my_fn;
}
#[ test ]
fn own_layer_has_item()
{
assert!( own::my_fn() );
}
#[ test ]
fn orphan_layer_has_item()
{
assert!( orphan::my_fn() );
}
#[ test ]
fn exposed_layer_has_item()
{
assert!( exposed::my_fn() );
}
#[ test ]
fn prelude_layer_has_item()
{
assert!( prelude::my_fn() );
}
}
mod uc_09_use_with_rename
{
use mod_interface_meta::mod_interface;
mod private
{
pub fn original_name() -> bool { true }
}
mod_interface!
{
own use original_name as aliased_name;
}
#[ test ]
fn aliased_name_works()
{
assert!( own::aliased_name() );
}
}
mod uc_13_multiple_use_statements
{
use mod_interface_meta::mod_interface;
mod private
{
pub fn fn_a() -> bool { true }
pub fn fn_b() -> bool { true }
pub fn fn_c() -> bool { true }
}
mod_interface!
{
own use fn_a;
own use fn_b;
own use fn_c;
}
#[ test ]
fn all_functions_exported()
{
assert!( own::fn_a() );
assert!( own::fn_b() );
assert!( own::fn_c() );
}
}
mod uc_14_mixed_implicit_explicit
{
use mod_interface_meta::mod_interface;
mod private
{
pub fn implicit_fn() -> bool { true }
pub fn explicit_fn() -> bool { true }
}
mod_interface!
{
use implicit_fn;
own use explicit_fn;
}
#[ test ]
fn implicit_in_all_layers()
{
assert!( own::implicit_fn() );
assert!( orphan::implicit_fn() );
assert!( exposed::implicit_fn() );
assert!( prelude::implicit_fn() );
}
#[ test ]
fn explicit_propagates_correctly()
{
assert!( own::explicit_fn() );
assert!( orphan::explicit_fn() );
assert!( exposed::explicit_fn() );
assert!( prelude::explicit_fn() );
}
}
mod mm_01_04_micro_modules_all_layers
{
use mod_interface_meta::mod_interface;
mod private {}
mod_interface!
{
own mod micro_own;
orphan mod micro_orphan;
exposed mod micro_exposed;
prelude mod micro_prelude;
}
#[ test ]
fn all_micro_modules_exist()
{
let _ = micro_own::has_marker();
let _ = micro_orphan::has_marker();
let _ = micro_exposed::has_marker();
let _ = micro_prelude::has_marker();
}
}
mod mm_07_multiple_micro_modules_same_layer
{
use mod_interface_meta::mod_interface;
mod private {}
mod_interface!
{
own mod mod_a;
own mod mod_b;
own mod mod_c;
}
#[ test ]
fn all_modules_created()
{
let _ = mod_a::marker();
let _ = mod_b::marker();
let _ = mod_c::marker();
}
}
mod nc_06_only_own_populated
{
use mod_interface_meta::mod_interface;
mod private
{
pub fn own_fn() -> bool { true }
}
mod_interface!
{
own use own_fn;
}
#[ test ]
fn own_has_content()
{
assert!( own::own_fn() );
}
#[ test ]
fn other_layers_propagate()
{
assert!( orphan::own_fn() );
assert!( exposed::own_fn() );
assert!( prelude::own_fn() );
}
}
mod nc_07_only_prelude_populated
{
use mod_interface_meta::mod_interface;
mod private
{
pub fn prelude_fn() -> bool { true }
}
mod_interface!
{
prelude use prelude_fn;
}
#[ test ]
fn prelude_has_content()
{
assert!( prelude::prelude_fn() );
}
}
mod ip_01_mix_all_item_types
{
use mod_interface_meta::mod_interface;
mod private
{
pub struct MyStruct;
pub trait MyTrait {}
pub fn my_fn() -> bool { true }
pub const MY_CONST : i32 = 42;
}
mod_interface!
{
own use MyStruct;
orphan use MyTrait;
exposed use my_fn;
prelude use MY_CONST;
}
#[ test ]
fn struct_exported()
{
let _ : own::MyStruct = own::MyStruct;
}
#[ test ]
fn trait_exported()
{
struct TestType;
impl orphan::MyTrait for TestType {}
fn check_trait<T : orphan::MyTrait>(_: T) {}
check_trait(TestType);
}
#[ test ]
fn function_exported()
{
assert!( exposed::my_fn() );
}
#[ test ]
fn const_exported()
{
assert_eq!( prelude::MY_CONST, 42 );
}
}
mod ip_03_empty_private_namespace
{
use mod_interface_meta::mod_interface;
mod private {}
mod_interface!
{
}
#[ test ]
fn compiles_successfully()
{
}
}
mod ip_04_private_with_content
{
use mod_interface_meta::mod_interface;
mod private
{
pub fn exposed_fn() -> bool { true }
pub fn hidden_fn() -> bool { true }
}
mod_interface!
{
own use exposed_fn;
}
#[ test ]
fn exposed_fn_accessible()
{
assert!( own::exposed_fn() );
}
#[ test ]
fn hidden_fn_not_in_public_interface()
{
assert!( private::hidden_fn() );
}
}