6 use warnings FATAL => 'all';
11 use Function::Parameters { method => { defaults => 'method', runtime => 0 } };
15 BEGIN { $phase = 'compile-time' }
16 INIT { $phase = 'run-time' }
23 local $Test::Builder::Level = $Test::Builder::Level + 1;
24 is exception { Foo->$method }, undef, "method $method is defined at $phase";
31 local $Test::Builder::Level = $Test::Builder::Level + 1;
32 like exception { Foo->$method }, qr/Can't locate object method/, "method $method is undefined at $phase";
36 # The default configuration with compile at BEGIN on.
37 method top_level_default() {}
40 use Function::Parameters { method => { defaults => 'method', runtime => 1 } };
41 method top_level_off() {}
44 use Function::Parameters { method => { defaults => 'method', runtime => 0 } };
45 method top_level_on() {}
47 # Now turn it off inside a lexical scope
49 use Function::Parameters { method => { defaults => 'method', runtime => 1 } };
50 method inner_scope_off() {}
54 method outer_scope_on() {}
57 # at compile-time, some should be defined and others shouldn't be
59 method_defined('top_level_default');
60 method_undefined('top_level_off');
61 method_defined('top_level_on');
62 method_undefined('inner_scope_off');
63 method_defined('outer_scope_on');
66 # by run-time, they should _all_ be defined
67 method_defined('top_level_default');
68 method_defined('top_level_off');
69 method_defined('top_level_on');
70 method_defined('inner_scope_off');
71 method_defined('outer_scope_on');