Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
Add test for stranger commenting scenarios
  • Loading branch information
hoelzro committed Jul 25, 2014
1 parent caf4161 commit 248eccb
Showing 1 changed file with 137 additions and 0 deletions.
137 changes: 137 additions & 0 deletions S26-documentation/wacky.t
@@ -0,0 +1,137 @@
use Test;
plan 22;

# a bunch of weird behaviors I've thought of while reading and implementing S26.
# some of these may belong in other tests, but here's a nice dumping ground for
# them for now.

#| hello
is sub {
}.WHY, 'hello', 'leading document within an anoymous sub';

is sub {
#= hello
}.WHY, 'hello', 'trailing document within an anoymous sub';

#| hi
sub foo {} ; sub bar {}
#= there

is &foo.WHY, "hi\nthere", 'two subs on a line - first come, first served';
ok !&bar.WHY.defined, 'two subs on a line - first come, first served';

sub one { #= first
#= second
}
#= third

is &one.WHY, 'first second third', 'trailing same line + inner line + next outer line';

sub two() {}
my $four = 2 + 2;
#= not attached

todo 'being picky about attaching of declarative comments NYI', 1;
ok !&two.WHY.defined, 'non-comment, non-whitespace comments should prevent trailing comments from binding';

sub
three {
#= yet another comment
}

is &three.WHY, 'yet another comment', "declaration start on its own line shouldn't stop trailing comments";

sub four {}
#| before five
#= after four
sub five {}

# XXX this may be wrong...
is &four.WHY, 'after four', "comments shouldn't interfere with each other";
is &five.WHY, 'before five', "comments shouldn't interfere with each other";

class A {
has $.first; has $.second; #= comment
}

my $first = A.^attributes.first(*.name eq '$!first');
my $second = A.^attributes.first(*.name eq '$!second');

todo 'two attrs on a line WIP', 2;
is $first.WHY, 'comment', 'two attrs on a line - first come, first served';
ok !$second.WHY.defined, 'two attrs on a line - first come, first served' or diag($second.WHY);

skip 'interleaved trailing WIP', 1;
#`(
class B {
has #= first trailing
$.attribute #= second trailing
= 17;
}
my $first = B.^attributes.first(*.name eq '$!attribute');
is $first.WHY, 'first trailing second trailing', 'interleaved trailing';
)

sub six(Str $param1, Str $param2) {
#= trailing comment for six
}

my ( $param1, $param2 ) = &six.signature.params;

is &six.WHY, 'trailing comment for six', "params shouldn't interfere with sub's trailing comments";
ok !$param1.WHY.defined, "params shouldn't interfere with sub's trailing comments" or diag($param1.WHY);
ok !$param2.WHY.defined, "params shouldn't interfere with sub's trailing comments" or diag($param2.WHY);

sub seven(
Str $param
)
#= trailing comment
{
}

todo 'comment betwixt signature and block WIP', 1;
is &seven.WHY, 'trailing comment', 'sub trailing comments may be between signature and block';

sub eight( #| leading for param
Str $param
) {}

my ( $param ) = &eight.signature.params;

ok !&eight.WHY.defined;
is $param.WHY, 'leading for param';

sub nine( #= sub comment
Str $param
) {}

( $param ) = &nine.signature.params;

is &nine.WHY, 'sub comment';
ok !$param.WHY.defined;

skip 'supersede NYI', 1;

#`(
#| first definition
sub ten {}
#| second definition
supersede sub ten {}
# XXX is this correct?
is &ten.WHY, 'second definition';
)

#| leading comment for eleven



sub eleven {}



#= trailing comment for eleven

is &eleven.WHY, "leading comment for eleven\ntrailing comment for eleven", "space separation shouldn't hurt";

0 comments on commit 248eccb

Please sign in to comment.