| File: | t/00-load.t |
| Coverage: | 100.0% |
| line | stmt | bran | cond | sub | pod | time | code |
|---|---|---|---|---|---|---|---|
| 1 | 1 1 1 | 1740 2 19 | use strict; | ||||
| 2 | 1 1 1 | 2 1 12 | use warnings; | ||||
| 3 | |||||||
| 4 | 1 1 1 | 272 9556 3 | use Test::More; | ||||
| 5 | 1 1 1 | 389 5323 3 | use Test::Deep; | ||||
| 6 | 1 1 1 | 366 4454 38 | use Data::Dumper::Concise; | ||||
| 7 | 1 1 1 | 209 14419 249 | use Capture::Tiny ':all'; | ||||
| 8 | |||||||
| 9 | BEGIN { | ||||||
| 10 | 1 1 1 1 1 | 4 496 1 1 3 | use_ok( 'Message::String', MSG001 => 'Test message %s.' ); | ||||
| 11 | 1 1 1 1 1 | 204 72 0 1 2 | use_ok( 'Message::String', 'MSG002:N' => 'Test message %s.' ); | ||||
| 12 | |||||||
| 13 | # Geez, this done properly would be handy if it was in Test::Deep :( | ||||||
| 14 | sub cmp_not_deeply | ||||||
| 15 | { | ||||||
| 16 | 1 | 1 | my ( $s1, $s2, $name ) = @_; | ||||
| 17 | 1 | 2 | my ( $identical ) = Test::Deep::cmp_details( $s1, $s2 ); | ||||
| 18 | 1 | 3982 | ok( !$identical, $name ); | ||||
| 19 | } | ||||||
| 20 | } | ||||||
| 21 | |||||||
| 22 | BEGIN { | ||||||
| 23 | |||||||
| 24 | package Foo; | ||||||
| 25 | 1 1 1 | 188 1 2 | use Message::String EXPORT => INF003 => 'Info message %s.'; | ||||
| 26 | 1 1 1 | 3 1 3 | use Message::String EXPORT_OK => INF004 => 'Info message 4.'; | ||||
| 27 | 1 | 2 | use Message::String ':TAG' => INF005 => 'Info message 5.', | ||||
| 28 | 1 1 | 1 2 | INF006 => 'Info message 6.'; | ||||
| 29 | 1 1 1 | 2 1 1 | use Message::String EXPORT => I_007 => 'Info message 7.'; | ||||
| 30 | 1 1 1 | 2 1 1 | use Message::String EXPORT => FOO_008_I => 'Info message 8.'; | ||||
| 31 | 1 1 1 | 2 1 2 | use Message::String EXPORT => FOO_009_INF => 'Info message 9.'; | ||||
| 32 | 1 1 1 | 2 0 2 | use Message::String EXPORT => XXX => 'message 10.'; | ||||
| 33 | 1 1 1 | 2 1 1 | use Message::String EXPORT => R_011 => 'message 11.'; | ||||
| 34 | 1 1 1 | 2 1 1 | use Message::String EXPORT => I_012 => 'message 12 %s.'; | ||||
| 35 | } | ||||||
| 36 | |||||||
| 37 | BEGIN { | ||||||
| 38 | 1 | 33 | Foo->import(); | ||||
| 39 | 1 | 16 | Foo->import( 'INF004' ); | ||||
| 40 | 1 | 3900 | Foo->import( ':TAG' ); | ||||
| 41 | } | ||||||
| 42 | |||||||
| 43 | # Give the types system a damn good thrashing | ||||||
| 44 | { | ||||||
| 45 | 1 1 | 76232 4 | my $result = message->_initial_types; | ||||
| 46 | 1 | 2 | is( $result, 'ACDEIMNRW', '_initial_types' ); | ||||
| 47 | } | ||||||
| 48 | |||||||
| 49 | { | ||||||
| 50 | 1 1 | 172 2 | my $result = [ message->_initial_types ]; | ||||
| 51 | 1 | 5 | is_deeply( $result, [qw/A C D E I M N R W/], '_initial_types' ); | ||||
| 52 | } | ||||||
| 53 | |||||||
| 54 | { | ||||||
| 55 | # INSTANCE->_types same as CLASS->_types initially | ||||||
| 56 | 1 1 | 292 3 | my $class_types = message->_types; | ||||
| 57 | 1 | 2 | my $instance_types = MSG001->_types; | ||||
| 58 | 1 | 2 | is( $instance_types, $class_types, '_types' ); | ||||
| 59 | |||||||
| 60 | # Until they're copied for write | ||||||
| 61 | 1 | 128 | $instance_types = MSG001->_types( 1 ); | ||||
| 62 | 1 | 2 | isnt( $instance_types, $class_types, '_types' ); | ||||
| 63 | |||||||
| 64 | # And once copied, that's the instance world view | ||||||
| 65 | 1 | 127 | my $copied_types = $instance_types; | ||||
| 66 | 1 | 2 | $instance_types = MSG001->_types; | ||||
| 67 | 1 | 2 | is( $instance_types, $copied_types, '_types' ); | ||||
| 68 | |||||||
| 69 | # Until the instance is reset | ||||||
| 70 | 1 | 125 | MSG001->_reset; | ||||
| 71 | 1 | 2 | $class_types = message->_types; | ||||
| 72 | 1 | 2 | $instance_types = MSG001->_types; | ||||
| 73 | 1 | 1 | is( $instance_types, $class_types, '_types' ); | ||||
| 74 | |||||||
| 75 | # Copied again, let's confirm they're identical in every way | ||||||
| 76 | 1 | 129 | $class_types = message->_types; | ||||
| 77 | 1 | 1 | $instance_types = MSG001->_types( 1 ); | ||||
| 78 | 1 | 2 | cmp_deeply( $class_types, $instance_types, '_types' ); | ||||
| 79 | |||||||
| 80 | # Set the default level for Type M to 100 | ||||||
| 81 | 1 | 14812 | message->_type_level( 'M', 100 ); | ||||
| 82 | # And make sure the class and instance structures differ | ||||||
| 83 | 1 | 2 | cmp_not_deeply( $class_types, $instance_types, '_types' ); | ||||
| 84 | # Now reset the types structure to its private backup | ||||||
| 85 | 1 | 145 | message->_reset; | ||||
| 86 | # And make sure we're back to normal | ||||||
| 87 | 1 | 2 | $class_types = message->_types; | ||||
| 88 | 1 | 13 | cmp_deeply( $class_types, $instance_types, '_types' ); | ||||
| 89 | } | ||||||
| 90 | |||||||
| 91 | { | ||||||
| 92 | 1 1 | 6860 2 | my $result = [ message->_message_types ]; | ||||
| 93 | 1 | 4 | is_deeply( $result, [qw/A C D E I M N R W/], '_message_types' ); | ||||
| 94 | } | ||||||
| 95 | |||||||
| 96 | { | ||||||
| 97 | 1 1 | 306 2 | is( message->_type_level(), undef, '_type_level' ); | ||||
| 98 | 1 | 119 | is( message->_type_level( undef ), undef, '_type_level' ); | ||||
| 99 | 1 | 127 | is( message->_type_level( 'X' ), undef, '_type_level' ); | ||||
| 100 | 1 | 171 | message->_type_level( 'M', '0E0' ); | ||||
| 101 | 1 | 2 | is( message->_type_level( 'M' ), 6, '_type_level' ); | ||||
| 102 | } | ||||||
| 103 | |||||||
| 104 | { | ||||||
| 105 | # Instance changes level of a class of message | ||||||
| 106 | 1 1 | 136 2 | my $level = MSG001->_type_level( 'M' ); | ||||
| 107 | 1 | 2 | is( $level, 6, '_type_level' ); | ||||
| 108 | 1 | 126 | MSG001->_type_level( 'M', 20 ); | ||||
| 109 | # Did it work? | ||||||
| 110 | 1 | 2 | is( MSG001->_type_level( 'M' ), 20, '_type_level' ); | ||||
| 111 | # Did it set the instance level, too? | ||||||
| 112 | 1 | 139 | is( MSG001->level, 20, '_type_level' ); | ||||
| 113 | # Make sure we can make global change to ACEW messages | ||||||
| 114 | 1 | 128 | message->_type_level( 'A', 100 ); | ||||
| 115 | 1 | 2 | is( message->_type_level( 'A' ), 1, '_type_level' ); | ||||
| 116 | 1 | 126 | message->_type_level( 'C', 100 ); | ||||
| 117 | 1 | 1 | is( message->_type_level( 'C' ), 2, '_type_level' ); | ||||
| 118 | 1 | 124 | message->_type_level( 'E', 100 ); | ||||
| 119 | 1 | 2 | is( message->_type_level( 'E' ), 3, '_type_level' ); | ||||
| 120 | 1 | 121 | message->_type_level( 'W', 100 ); | ||||
| 121 | 1 | 2 | is( message->_type_level( 'W' ), 4, '_type_level' ); | ||||
| 122 | } | ||||||
| 123 | |||||||
| 124 | { | ||||||
| 125 | 1 1 | 122 2 | is( message->_type_id(), undef, '_type_id' ); | ||||
| 126 | 1 | 120 | is( message->_type_id( undef ), undef, '_type_id' ); | ||||
| 127 | 1 | 118 | is( message->_type_id( 'X' ), undef, '_type_id' ); | ||||
| 128 | # Embed message id in Type M messages | ||||||
| 129 | 1 | 119 | message->_type_id( 'M', 1 ); | ||||
| 130 | 1 | 1 | is( message->_type_id( 'M' ), 1, '_type_id' ); | ||||
| 131 | # Don't embed message id in any type of message | ||||||
| 132 | 1 | 120 | message->_type_id( 0 ); | ||||
| 133 | 1 | 2 | is( message->_type_id( 'A' ), '', '_type_id' ); | ||||
| 134 | 1 | 121 | is( message->_type_id( 'C' ), '', '_type_id' ); | ||||
| 135 | 1 | 122 | is( message->_type_id( 'E' ), '', '_type_id' ); | ||||
| 136 | 1 | 121 | is( message->_type_id( 'W' ), '', '_type_id' ); | ||||
| 137 | 1 | 122 | is( message->_type_id( 'N' ), '', '_type_id' ); | ||||
| 138 | 1 | 121 | is( message->_type_id( 'I' ), '', '_type_id' ); | ||||
| 139 | 1 | 120 | is( message->_type_id( 'D' ), '', '_type_id' ); | ||||
| 140 | 1 | 120 | is( message->_type_id( 'R' ), '', '_type_id' ); | ||||
| 141 | 1 | 120 | is( message->_type_id( 'M' ), '', '_type_id' ); | ||||
| 142 | # Don't embed message id in any type of message | ||||||
| 143 | 1 | 120 | message->_type_id( '' ); | ||||
| 144 | 1 | 2 | is( message->_type_id( 'A' ), '', '_type_id' ); | ||||
| 145 | 1 | 123 | is( message->_type_id( 'C' ), '', '_type_id' ); | ||||
| 146 | 1 | 121 | is( message->_type_id( 'E' ), '', '_type_id' ); | ||||
| 147 | 1 | 121 | is( message->_type_id( 'W' ), '', '_type_id' ); | ||||
| 148 | 1 | 127 | is( message->_type_id( 'N' ), '', '_type_id' ); | ||||
| 149 | 1 | 123 | is( message->_type_id( 'I' ), '', '_type_id' ); | ||||
| 150 | 1 | 121 | is( message->_type_id( 'D' ), '', '_type_id' ); | ||||
| 151 | 1 | 123 | is( message->_type_id( 'R' ), '', '_type_id' ); | ||||
| 152 | 1 | 126 | is( message->_type_id( 'M' ), '', '_type_id' ); | ||||
| 153 | # Embed message id in all types of message | ||||||
| 154 | 1 | 122 | message->_type_id( 1 ); | ||||
| 155 | 1 | 2 | is( message->_type_id( 'A' ), 1, '_type_id' ); | ||||
| 156 | 1 | 124 | is( message->_type_id( 'C' ), 1, '_type_id' ); | ||||
| 157 | 1 | 122 | is( message->_type_id( 'E' ), 1, '_type_id' ); | ||||
| 158 | 1 | 123 | is( message->_type_id( 'W' ), 1, '_type_id' ); | ||||
| 159 | 1 | 122 | is( message->_type_id( 'N' ), 1, '_type_id' ); | ||||
| 160 | 1 | 123 | is( message->_type_id( 'I' ), 1, '_type_id' ); | ||||
| 161 | 1 | 122 | is( message->_type_id( 'D' ), 1, '_type_id' ); | ||||
| 162 | 1 | 123 | is( message->_type_id( 'R' ), 1, '_type_id' ); | ||||
| 163 | 1 | 122 | is( message->_type_id( 'M' ), 1, '_type_id' ); | ||||
| 164 | } | ||||||
| 165 | |||||||
| 166 | { | ||||||
| 167 | 1 1 | 121 2 | is( message->_type_timestamp(), undef, '_type_timestamp' ); | ||||
| 168 | 1 | 121 | is( message->_type_timestamp( undef ), undef, '_type_timestamp' ); | ||||
| 169 | 1 | 119 | is( message->_type_timestamp( 'X' ), undef, '_type_timestamp' ); | ||||
| 170 | 1 | 119 | is( message->_type_timestamp( 'A' ), 0, '_type_timestamp' ); | ||||
| 171 | 1 | 123 | message->_type_timestamp( 'A', 1 ); | ||||
| 172 | 1 | 2 | is( message->_type_timestamp( 'A' ), 1, '_type_timestamp' ); | ||||
| 173 | 1 | 123 | message->_type_timestamp( 'A', '' ); | ||||
| 174 | 1 | 2 | is( message->_type_timestamp( 'A' ), '', '_type_timestamp' ); | ||||
| 175 | 1 | 123 | message->_type_timestamp( 1 ); | ||||
| 176 | 1 | 1 | is( message->_type_timestamp( 'C' ), 1, '_type_timestamp' ); | ||||
| 177 | 1 | 123 | message->_type_timestamp( 0 ); | ||||
| 178 | 1 | 2 | is( message->_type_timestamp( 'C' ), 0, '_type_timestamp' ); | ||||
| 179 | 1 | 124 | message->_type_timestamp( '' ); | ||||
| 180 | 1 | 2 | is( message->_type_timestamp( 'C' ), '', '_type_timestamp' ); | ||||
| 181 | } | ||||||
| 182 | |||||||
| 183 | { | ||||||
| 184 | 1 1 | 123 10 | is( message->_type_tlc(), undef, '_type_tlc' ); | ||||
| 185 | 1 | 122 | is( message->_type_tlc( undef ), undef, '_type_tlc' ); | ||||
| 186 | 1 | 119 | is( message->_type_tlc( 'X' ), undef, '_type_tlc' ); | ||||
| 187 | 1 | 119 | is( message->_type_tlc( 'A' ), '', '_type_tlc' ); | ||||
| 188 | 1 | 121 | message->_type_tlc( 'A', 'YYZ' ); | ||||
| 189 | 1 | 1 | is( message->_type_tlc( 'A' ), 'YYZ', '_type_tlc' ); | ||||
| 190 | 1 | 121 | message->_type_tlc( 'A', 'ALTYYZ' ); | ||||
| 191 | 1 | 2 | is( message->_type_tlc( 'A' ), 'ALT', '_type_tlc' ); | ||||
| 192 | } | ||||||
| 193 | |||||||
| 194 | { | ||||||
| 195 | 1 1 | 119 3 | my @x = message->_type_aliases(); | ||||
| 196 | 1 | 3 | is_deeply( \@x, [], '_type_aliases' ); | ||||
| 197 | 1 | 249 | is( message->_type_aliases(), undef, '_type_aliases' ); | ||||
| 198 | 1 | 119 | is( message->_type_aliases( undef ), undef, '_type_aliases' ); | ||||
| 199 | 1 | 122 | is( message->_type_aliases( 'X' ), undef, '_type_aliases' ); | ||||
| 200 | 1 | 117 | my $aliases = message->_type_aliases( 'A' ); | ||||
| 201 | 1 | 2 | message->_type_aliases( 'A', undef ); | ||||
| 202 | 1 | 1 | is_deeply( | ||||
| 203 | [ message->_type_aliases( 'A' ) ], [], | ||||||
| 204 | '_type_aliases' ); | ||||||
| 205 | 1 | 233 | message->_type_aliases( 'A', 'AFOO' ); | ||||
| 206 | 1 | 1 | is_deeply( | ||||
| 207 | [ message->_type_aliases( 'A' ) ], ['AFOO'], | ||||||
| 208 | '_type_aliases' ); | ||||||
| 209 | 1 | 245 | message->_type_aliases( 'A', [qw/ALT ALR ALERT/] ); | ||||
| 210 | 1 | 2 | is_deeply( | ||||
| 211 | [ message->_type_aliases( 'A' ) ], [ 'ALT', 'ALR', 'ALERT' ], | ||||||
| 212 | '_type_aliases' ); | ||||||
| 213 | 1 | 243 | my @array = message->_type_aliases( 'A' ); | ||||
| 214 | 1 | 3 | is_deeply( | ||||
| 215 | \@array, [ 'ALT', 'ALR', 'ALERT' ], | ||||||
| 216 | '_type_aliases' ); | ||||||
| 217 | } | ||||||
| 218 | |||||||
| 219 | { | ||||||
| 220 | 1 1 | 240 2 | message->_update_type_on_id_change( 1 ); | ||||
| 221 | 1 | 1 | is( message->_update_type_on_id_change, 1, | ||||
| 222 | '_update_type_on_id_change' ); | ||||||
| 223 | 1 | 124 | message->_update_level_on_type_change( 1 ); | ||||
| 224 | 1 | 2 | is( message->_update_level_on_type_change, 1, | ||||
| 225 | '_update_level_on_type_change' ); | ||||||
| 226 | 1 | 123 | is( message->_minimum_verbosity, 3, '_minimum_verbosity' ); | ||||
| 227 | 1 | 121 | is( message->verbosity, 7, 'verbosity' ); | ||||
| 228 | 1 | 127 | message->verbosity( '0E0' ); | ||||
| 229 | 1 | 2 | is( message->verbosity, 7, 'verbosity' ); | ||||
| 230 | 1 | 124 | message->verbosity( 7 ); | ||||
| 231 | 1 | 2 | is( message->verbosity, 7, 'verbosity' ); | ||||
| 232 | 1 | 119 | message->verbosity( 0 ); | ||||
| 233 | 1 | 2 | is( message->verbosity, 3, 'verbosity' ); | ||||
| 234 | 1 | 119 | message->verbosity( 'D' ); | ||||
| 235 | 1 | 2 | is( message->verbosity, 7, 'verbosity' ); | ||||
| 236 | 1 | 120 | message->verbosity( 'DIAGNOSTIC' ); | ||||
| 237 | 1 | 2 | is( message->verbosity, 7, 'verbosity' ); | ||||
| 238 | } | ||||||
| 239 | |||||||
| 240 | { | ||||||
| 241 | 1 1 | 120 3 | is( message->_default_timestamp_format, '%a %x %T', | ||||
| 242 | '_default_timestamp_format' ); | ||||||
| 243 | 1 | 123 | message->_default_timestamp_format( '' ); | ||||
| 244 | 1 | 2 | is( message->_default_timestamp_format, '', | ||||
| 245 | '_default_timestamp_format' ); | ||||||
| 246 | 1 | 123 | message->_default_timestamp_format( '%a %x %T' ); | ||||
| 247 | 1 | 1 | is( message->_default_timestamp_format, '%a %x %T', | ||||
| 248 | '_default_timestamp_format' ); | ||||||
| 249 | } | ||||||
| 250 | |||||||
| 251 | { | ||||||
| 252 | 1 1 | 117 3 | message->_reset; | ||||
| 253 | 1 | 3 | MSG001->_reset; | ||||
| 254 | 1 | 2 | message->_type_timestamp( 'M', 1 ); | ||||
| 255 | 1 | 2 | message->_type_tlc( 'M', 'MSG' ); | ||||
| 256 | 1 | 2 | message->_type_id( 'M', 1 ); | ||||
| 257 | 1 1 1 | 18 675 1 | my ( $stdout ) = capture_stdout { MSG001( 'Foo' ); 1; }; | ||||
| 258 | 1 | 1948 | like( | ||||
| 259 | $stdout, | ||||||
| 260 | qr/\A\w{3} \w{3} (?:\s\d|\d{2}), \d{4} \d{2}:\d{2}:\d{2} \*MSG\* MSG001 Test message Foo\.\n\z/s, | ||||||
| 261 | 'correct message issued with adornments' | ||||||
| 262 | ); | ||||||
| 263 | 1 | 254 | message->_type_timestamp( 'M', '%a %x %T' ); | ||||
| 264 | 1 1 1 | 29 494 2 | ( $stdout ) = capture_stdout { MSG001( 'Foo' ); 1; }; | ||||
| 265 | 1 | 384 | like( | ||||
| 266 | $stdout, | ||||||
| 267 | qr/\A\w{3} \w{3} (?:\s\d|\d{2}), \d{4} \d{2}:\d{2}:\d{2} \*MSG\* MSG001 Test message Foo\.\n\z/s, | ||||||
| 268 | 'correct message issued with adornments' | ||||||
| 269 | ); | ||||||
| 270 | 1 | 142 | message->_type_timestamp( 'M', '' ); | ||||
| 271 | 1 1 1 | 19 315 2 | ( $stdout ) = capture_stdout { MSG001( 'Foo' ); 1; }; | ||||
| 272 | 1 | 339 | like( | ||||
| 273 | $stdout, qr/\A\*MSG\* MSG001 Test message Foo\.\n\z/s, | ||||||
| 274 | 'correct message issued with adornments' ); | ||||||
| 275 | 1 1 1 | 151 414 2 | my ( $stderr ) = capture_stderr { MSG002( 'Foo' ); 1; }; | ||||
| 276 | 1 | 316 | like( $stderr, qr/\ATest message Foo\.\n\z/s, | ||||
| 277 | 'correct message issued with adornments' ); | ||||||
| 278 | 1 | 158 | MSG002->level( 6 ); | ||||
| 279 | 1 | 2 | is( MSG002->level, 6, 'level' ); | ||||
| 280 | 1 | 137 | MSG002->level( 'M' ); | ||||
| 281 | 1 | 2 | is( MSG002->level, 6, 'level' ); | ||||
| 282 | 1 | 128 | MSG002->level( 'MESSAGE' ); | ||||
| 283 | 1 | 2 | is( MSG002->level, 6, 'level' ); | ||||
| 284 | 1 | 129 | MSG002->type( 'INFO' ); | ||||
| 285 | 1 | 1 | is( MSG002->level, 6, 'level' ); | ||||
| 286 | 1 | 129 | is( MSG002->type, 'I', 'type' ); | ||||
| 287 | 1 | 147 | is( MSG002, 'Test message %s.', 'stringify' ); | ||||
| 288 | 1 | 126 | is( MSG002( 'Foo' ), 'Test message Foo.', 'stringify' ); | ||||
| 289 | 1 1 | 125 2 | MSG002->_rebless( foo => sub {'foo'} ); | ||||
| 290 | 1 | 2 | is( MSG002->foo, 'foo', '_rebless' ); | ||||
| 291 | 1 1 1 | 182 370 2 | ( $stdout ) = capture_stdout { INF003( 'Foo' ); 1; }; | ||||
| 292 | 1 | 315 | like( $stdout, qr/\AInfo message Foo\.\n\z/s, | ||||
| 293 | 'correct message issued' ); | ||||||
| 294 | 1 1 1 | 158 385 2 | ( $stdout ) = capture_stdout { INF004; 1; }; | ||||
| 295 | 1 | 302 | like( $stdout, qr/\AInfo message 4.\n\z/s, | ||||
| 296 | 'correct message issued' ); | ||||||
| 297 | 1 1 1 | 165 288 1 | ( $stdout ) = capture_stdout { INF005; 1; }; | ||||
| 298 | 1 | 329 | like( $stdout, qr/\AInfo message 5.\n\z/s, | ||||
| 299 | 'correct message issued' ); | ||||||
| 300 | 1 | 140 | like( INF006->to_string, qr/\AInfo message 6.\z/s, | ||||
| 301 | 'to_string' ); | ||||||
| 302 | 1 | 127 | like( I_007->to_string, qr/\AInfo message 7.\z/s, | ||||
| 303 | 'to_string' ); | ||||||
| 304 | 1 | 127 | like( FOO_008_I->to_string, qr/\AInfo message 8.\z/s, | ||||
| 305 | 'to_string' ); | ||||||
| 306 | 1 | 125 | like( FOO_009_INF->to_string, qr/\AInfo message 9.\z/s, | ||||
| 307 | 'to_string' ); | ||||||
| 308 | 1 | 125 | like( XXX->to_string, qr/\A\*MSG\* XXX message 10.\z/s, | ||||
| 309 | 'to_string' ); | ||||||
| 310 | 1 | 128 | is( R_011->response, undef, 'response' ); | ||||
| 311 | 1 | 132 | is( R_011->response('foo'), R_011, 'response' ); | ||||
| 312 | 1 | 126 | is( I_012->to_string, 'message 12 %s.', 'to_string' ); | ||||
| 313 | } | ||||||
| 314 | |||||||
| 315 | 1 | 127 | done_testing; | ||||