Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Browse files

Merge pull request #26 from softmoth/ng-2011

bringing november back to life?
  • Loading branch information...
commit 0f300482bee509abfb1d8762394a01539c4adb3d 2 parents 86acff6 + 932b4b3
@moritz moritz authored
Showing with 141 additions and 125 deletions.
  1. +9 −45 lib/Digest.pm
  2. +22 −0 lib/Digest/SHA.pm
  3. +9 −5 lib/Dispatcher/Rule.pm
  4. +1 −1  lib/November/CGI.pm
  5. +17 −12 lib/November/Tags.pm
  6. +14 −10 lib/November/URI.pm
  7. +1 −1  lib/November/Utils.pm
  8. +1 −1  lib/Test/InputOutput.pm
  9. +9 −3 lib/Text/Markup/Wiki/MediaWiki.pm
  10. +2 −2 lib/Text/Markup/Wiki/Minimal.pm
  11. +5 −5 t/cgi/01-cgi.t
  12. +13 −13 t/digest/01-digest.t
  13. +4 −1 t/dispatcher/01-basics.t
  14. +1 −1  t/dispatcher/04-regex.t
  15. +2 −3 t/dispatcher/06-set-param.t
  16. +1 −1  t/integration/01-view_page.t
  17. +1 −1  t/markup/mediawiki/04-paragraphs.t
  18. +5 −3 t/markup/mediawiki/06-links.t
  19. +2 −0  t/markup/mediawiki/07-italic-and-bold.t
  20. +2 −0  t/markup/mediawiki/12-unordered-lists.t
  21. +2 −0  t/markup/mediawiki/13-numbered-lists.t
  22. +2 −0  t/markup/mediawiki/14-definition-lists.t
  23. +2 −0  t/markup/mediawiki/15-mixed-lists.t
  24. +2 −0  t/markup/mediawiki/16-pre.t
  25. +1 −1  t/markup/minimal/03-escaping.t
  26. +1 −1  t/markup/minimal/04-paragraphs.t
  27. +2 −2 t/markup/minimal/06-links.t
  28. +1 −1  t/storage/index.t
  29. +7 −12 t/tags/norm.t
View
54 lib/Digest.pm
@@ -1,49 +1,13 @@
module Digest;
-# Known digests: md5, sha1, sha256, sha512, ripemd160
-sub digest(Str $text, Str $algo is copy = 'md5') is export {
- $algo = uc $algo;
- my $binary = Q:PIR {
- .local string text
- .local string algo
- .local pmc digest
-
- # Input
- $P0 = find_lex '$text'
- text = $P0
- $P0 = find_lex '$algo'
- algo = $P0
-
- # Choose the right digest.
- $P1 = loadlib 'digest_group'
- if algo == 'MD5' goto MD5
- if algo == 'SHA1' goto SHA1
- if algo == 'SHA256' goto SHA256
- if algo == 'SHA512' goto SHA512
- if algo == 'RIPEMD160' goto RIPEMD160
- MD5:
- digest = new 'MD5'
- goto COMPUTE
- SHA1:
- digest = new 'SHA1'
- goto COMPUTE
- SHA256:
- digest = new 'SHA256'
- goto COMPUTE
- SHA512:
- digest = new 'SHA512'
- goto COMPUTE
- RIPEMD160:
- digest = new 'RIPEMD160'
+use Digest::MD5;
+use Digest::SHA;
- COMPUTE:
- # Calculate the digest.
- digest.'Init'()
- digest.'Update'(text)
- $S0 = digest.'Final'()
-
- %r = box $S0
- };
- # Convert to hex.
- return [~] map { sprintf '%02x', .ord }, $binary.comb;
+# Known digests: md5, sha1, sha256, sha512, ripemd160
+sub digest(Str $text, Str $algo = 'md5') is export {
+ given $algo {
+ when 'md5' { return Digest::MD5.md5_hex($text) }
+ when 'sha256' { return Digest::SHA.sha256_hex($text) }
+ default { !!! "digest for $algo not yet implemented" }
+ }
}
View
22 lib/Digest/SHA.pm
@@ -0,0 +1,22 @@
+class Digest::SHA:auth<thou>:ver<0.01> {
+ pir::load_bytecode('Digest/sha256.pbc');
+
+ multi method sha256_hex (Str $str) {
+ my $sha256_hex = Q:PIR {
+ .local pmc f, g, str
+ str = find_lex '$str'
+ f = get_root_global ['parrot'; 'Digest'], '_sha256sum'
+ $P1 = f(str)
+ g = get_root_global ['parrot'; 'Digest'], '_sha256_hex'
+ $S0 = g($P1)
+ %r = box $S0
+ };
+
+ return $sha256_hex;
+ }
+
+ multi method sha256_hex (@strs) {
+ return self.sha256_hex(@strs.join(""));
+ }
+}
+
View
14 lib/Dispatcher/Rule.pm
@@ -9,17 +9,21 @@ has Code $.code;
method match (@chunks) {
return False if @chunks != @!pattern;
- for @chunks Z @!pattern -> $chunk, $rule is copy {
+ # RAKUDO: Z seems to have a bug (fixed in nom), where [1,2] Z [*,*] yields (1, Any, 2, Any): the Whatever is lost
+ #for @chunks Z @!pattern -> $chunk, $rule is copy {
+ for ^@chunks -> $i {
+ my $chunk = @chunks[$i];
+ my $rule = @!pattern[$i];
+ #note "- chunk ({$chunk.perl}), rule ({$rule.perl})";
my $param;
if $rule ~~ Pair { ($param, $rule) = $rule.kv }
if ~$chunk ~~ $rule {
if $param {
- self."$param"() = (~$/ || ~$chunk);
+ self."$param"() = ~($/ // $chunk);
} else {
- # RAKUDO: /./ ~~ Regex us false, but /./ ~~ Code is true
- @!args.push($/ || $chunk) if $rule ~~ Code | Whatever; # should by Regex | Whatever
+ @!args.push($/ || $chunk) if $rule ~~ Regex | Whatever;
}
}
else {
@@ -35,7 +39,7 @@ method apply {
#$!code(| @!args, controller => $.controller, action => $.action );
# workaround:
if $!controller and $!action {
- $!code(| @!args,action => $.action, controller => $.controller );
+ $!code(| @!args, action => $.action, controller => $.controller );
} elsif $!action {
$!code(| @!args, action => $.action );
} elsif $!controller {
View
2  lib/November/CGI.pm
@@ -112,7 +112,7 @@ class November::CGI {
}
}
- sub unescape($string is rw) {
+ our sub unescape($string is copy) {
$string .= subst('+', ' ', :g);
# RAKUDO: This could also be rewritten as a single .subst :g call.
# ...when the semantics of .subst is revised to change $/,
View
29 lib/November/Tags.pm
@@ -4,9 +4,10 @@ use November::Config;
class November::Tags {
my $server_root = November::Config.new.server_root;
- my $page_tags_path = $server_root ~ 'data/page_tags/';
- my $tags_count_path = $server_root ~ 'data/tags_count';
- my $tags_index_path = $server_root ~ 'data/tags_index';
+ # TODO Nasty hack to enable testing to use different paths
+ has $.page_tags_path is rw = $server_root ~ 'data/page_tags/';
+ has $.tags_count_path is rw = $server_root ~ 'data/tags_count';
+ has $.tags_index_path is rw = $server_root ~ 'data/tags_index';
method update_tags($_: Str $page, Str $new_tags) {
my $old_tags = .read_page_tags($page).chomp;
@@ -37,7 +38,9 @@ class November::Tags {
}
unless any($index{$t}.values) eq $page {
$index{$t}.push($page);
- $index{$t} = grep { $_ ne '' }, $index{$t}.values;
+ # RAKUDO: bug w/ var on both lhs and rhs
+ my @tmp = grep { $_ ne '' }, $index{$t}.values;
+ $index{$t} = @tmp;
}
}
@@ -64,48 +67,50 @@ class November::Tags {
# RAKUDO: @ not implemented yet
#if $index{$t} && any(@ $index{$t}) eq $page {
if $index{$t} && any($index{$t}.values) eq $page {
- $index{$t} = grep { $_ ne $page }, $index{$t}.values;
+ # RAKUDO: bug w/ var on both lhs and rhs
+ my @tmp = grep { $_ ne $page }, $index{$t}.values;
+ $index{$t} = @tmp;
}
}
self.write_tags_index($index);
}
method read_page_tags(Str $page) {
- my $file = $page_tags_path ~ $page;
+ my $file = $.page_tags_path ~ $page;
return '' unless $file.IO ~~ :e;
return slurp($file);
}
method write_page_tags(Str $page, Str $tags) {
- my $file = $page_tags_path ~ $page;
+ my $file = $.page_tags_path ~ $page;
my $fh = open( $file, :w );
$fh.say($tags);
$fh.close;
}
method read_tags_count() {
- my $file = $tags_count_path;
+ my $file = $.tags_count_path;
return {} unless $file.IO ~~ :e;
return eval slurp $file;
}
method write_tags_count(Hash $counts) {
- my $file = $tags_count_path;
+ my $file = $.tags_count_path;
my $fh = open( $file, :w );
$fh.say( $counts.perl );
$fh.close;
}
method read_tags_index() {
- my $file = $tags_index_path;
+ my $file = $.tags_index_path;
return {} unless $file.IO ~~ :e;
return eval slurp $file;
}
method write_tags_index(Hash $index) {
- my $file = $tags_index_path;
+ my $file = $.tags_index_path;
my $fh = open( $file, :w );
- $fh.say( $index.perl );
+- $fh.say( $index.perl );
$fh.close;
}
View
24 lib/November/URI.pm
@@ -25,17 +25,17 @@ submethod BUILD(:$uri) {
unless $/ { die "Could not parse URI: $uri" }
$!uri = $/;
- @!chunks = $/<path><chunk> // ('');
+ @!chunks = @($<path><chunk>) || ('');
}
method scheme {
- my $s = $.uri<scheme> // '';
+ my $s = $.uri<scheme> || '';
# RAKUDO: return 1 if use ~ below die because can`t do lc on Math after
return ~$s.lc;
}
method authority {
- my $a = $.uri<authority> // '';
+ my $a = $.uri<authority> || '';
# RAKUDO: return 1 if use ~ below die because can`t do lc on Math after
return ~$a.lc;
}
@@ -43,34 +43,38 @@ method authority {
method host {
#RAKUDO: $.uri<authority>[0]<host> return full <authority> now
my $h = ~$.uri<authority>[0]<host>;
- return $h.lc // '';
+ return $h.lc || '';
}
method port {
# TODO: send rakudobug
# RAKUDO: $.uri<authority><port> return full <authority> now
# workaround:
- item $.uri<authority>[0]<port> // '';
+ item $.uri<authority>[0]<port> || '';
}
method path {
- my $p = ~$.uri<path> // '';
+ my $p = ~$.uri<path> || '';
return $p.lc;
}
method absolute {
- return ?($.uri<path><slash> // $.scheme);
+ # RAKUDO: The grammar uses <slash>?, so this should be either Nil or a
+ # Match object. But Rakudo returns [] or [Match] instead, so we must use
+ # || instead of // to test.
+ return ?($.uri<path><slash> || $.scheme);
}
method relative {
- return !($.uri<path><slash> // $.scheme);
+ # Rakudo: Must use || instead of //, see above.
+ return !($.uri<path><slash> || $.scheme);
}
method query {
- item $.uri<query> // '';
+ item $.uri<query> || '';
}
method frag {
- my $f = $.uri<fragment> // '';
+ my $f = $.uri<fragment> || '';
return ~$f.lc;
}
View
2  lib/November/Utils.pm
@@ -1,4 +1,4 @@
-use v6;
+module November::Utils;
sub r_remove( $str is rw ) is export {
$str .= subst( /\\r/, '', :g );
View
2  lib/Test/InputOutput.pm
@@ -1,5 +1,5 @@
use v6;
-use Test;
+use Test :EXPORT;
class Test::InputOutput {
has $.filter;
View
12 lib/Text/Markup/Wiki/MediaWiki.pm
@@ -8,7 +8,9 @@ grammar Tokenizer {
regex italic_marker { '&#039;&#039;' }
regex wikilink { '[[' \s* <page> \s* ']]' }
- regex page { [<!before ']]'> \N]+<!after \s> }
+ # RAKUDO <after> is not implemented
+ #regex page { [<!before ']]'> \N]+<!after \s> }
+ regex page { \N+? }
regex extlink { '[' \s* <url> [\s+ <title>]? \s* ']' }
regex url { [<!before ']'> \S]+ }
@@ -42,7 +44,9 @@ class Text::Markup::Wiki::MediaWiki {
}
my &strip_prefix = {
- .subst(/'<' ('/'?) <[uo]> 'li>'/, { '<' ~ $0 ~ 'li>' }, :g)
+ # RAKUDO: -> $/ hack is nonportable; rakudo can't directly use match
+ # vars in subst closures
+ .subst(/'<' ('/'?) <[uo]> 'li>'/, -> $/ { '<' ~ $0 ~ 'li>' }, :g)
};
my &surround_with_list = {
@@ -134,7 +138,9 @@ class Text::Markup::Wiki::MediaWiki {
my $url = ~$token<extlink><url>;
my $title;
- if defined $token<extlink><title> {
+ # RAKUDO: <foo>? should be Nil if no match, but is []
+ #if defined $token<extlink><title> {
+ if $token<extlink><title> {
# RAKUDO: return 1 from ~$token<extlink><title> if title defined,
# but thats works:
$title = ~$token<extlink><title>[0];
View
4 lib/Text/Markup/Wiki/Minimal.pm
@@ -18,12 +18,12 @@ method format($text, :$link_maker, :$extlink_maker) {
my $heading = ~$/<heading><parchunk>[0];
$heading .= subst( / ^ \s+ /, '' );
$heading .= subst( / \s+ $ /, '' );
- $result = "<h1>$heading</h1>";
+ $result = "<h1>{$heading}</h1>";
}
else {
$result = '<p>';
- for $/<parchunk> {
+ for $/<parchunk>.list {
if $_<twext> {
$result ~= $_<twext>;
}
View
10 t/cgi/01-cgi.t
@@ -24,7 +24,7 @@ my @queries = (
'test=5&params=3&words=first%0Asecond',
{ :test<5>, :params<3>, :words("first\nsecond") },
'test=foo&test=bar',
- { :test<foo bar> },
+ { test => [<foo bar>] },
'test=2;params=2',
{ :test<2>, :params<2> },
'test=3;params=3;words=first+second',
@@ -56,9 +56,9 @@ $cgi = November::CGI.new();
my @add_params = (
:key1<val> , { :key1<val> },
:key2<val> , { :key1<val>, :key2<val> },
- :key1<val2>, { :key1<val val2>, :key2<val> },
- :key3<4> , { :key1<val val2>, :key2<val>, :key3<4> },
- :key4<4.1> , { :key1<val val2>, :key2<val>, :key3<4>, :key4<4.1> },
+ :key1<val2>, { key1 => [<val val2>], :key2<val> },
+ :key3<4> , { key1 => [<val val2>], :key2<val>, :key3<4> },
+ :key4<4.1> , { key1 => [<val val2>], :key2<val>, :key3<4>, :key4<4.1> },
# Do not consistency :( but we don`t have adverbial syntax to set pairs
# with undefined value
@@ -71,7 +71,7 @@ for @add_params -> $in, $expected {
my $key = $in.key;
my $val = $in.value;
$cgi.add_param($key, $val);
- is_deeply( $cgi.params, $expected, "Add kv: :$key<" ~ ($val or '') ~ ">" );
+ is_deeply( $cgi.params, $expected, "Add kv: :{$key}<" ~ ($val or '') ~ ">" );
}
is( $cgi.param('key3'), '4', 'Test param' );
View
26 t/digest/01-digest.t
@@ -2,25 +2,25 @@
use Test;
use Digest;
-plan 6;
+plan 3;
my $text = "The quick brown fox jumps over the lazy dog";
-ok(Digest::digest($text)
+ok(digest($text)
eq "9e107d9d372bb6826bd81d3542a419d6",
'Default is MD5');
-ok(Digest::digest($text, "md5")
+ok(digest($text, "md5")
eq "9e107d9d372bb6826bd81d3542a419d6",
'MD5 is correct');
-ok(Digest::digest($text, "sha1")
- eq "2fd4e1c67a2d28fced849ee1bb76e7391b93eb12",
- 'SHA1 is correct');
-ok(Digest::digest($text, "sha256")
+#ok(Digest::digest($text, "sha1")
+# eq "2fd4e1c67a2d28fced849ee1bb76e7391b93eb12",
+# 'SHA1 is correct');
+ok(digest($text, "sha256")
eq "d7a8fbb307d7809469ca9abcb0082e4f8d5651e46d3cdb762d02d0bf37c9e592",
'SHA256 is correct');
-ok(Digest::digest($text, "sha512")
- eq "07e547d9586f6a73f73fbac0435ed76951218fb7d0c8d788a309d785436bbb642e93a252a954f23912547d1e8a3b5ed6e1bfd7097821233fa0538f3db854fee6",
- 'SHA512 is correct');
-ok(Digest::digest($text, "ripemd160")
- eq "37f332f68db77bd9d7edd4969571ad671cf9dd3b",
- 'ripemd160 is correct');
+#ok(Digest::digest($text, "sha512")
+# eq "07e547d9586f6a73f73fbac0435ed76951218fb7d0c8d788a309d785436bbb642e93a252a954f23912547d1e8a3b5ed6e1bfd7097821233fa0538f3db854fee6",
+# 'SHA512 is correct');
+#ok(Digest::digest($text, "ripemd160")
+# eq "37f332f68db77bd9d7edd4969571ad671cf9dd3b",
+# 'ripemd160 is correct');
View
5 t/dispatcher/01-basics.t
@@ -24,7 +24,10 @@ is( $d.dispatch(['']),
ok( $d.add( ['foo', 'bar'], { "Yay" } ),
'.add(@pattern, $code) -- shortcut for fast add Rule object' );
-nok( $d.dispatch(['foo']),
+# RAKUDO: dispatch() returns Failure here, and rakudo gives Null PMC access
+# when converting that to Bool; this works around it somehow
+#nok( $d.dispatch(['foo']),
+nok( $d.dispatch(['foo']) ?? True !! False,
'Dispatcher return False if can`t find matched Rule and do not have default' );
View
2  t/dispatcher/04-regex.t
@@ -17,7 +17,7 @@ $d.add: [
is( $d.dispatch(['foo']),
'Yep!',
- "Pattern with regex \w+, put Match in args"
+ 'Pattern with regex \w+, put Match in args'
);
is( $d.dispatch(['foo', '50']),
View
5 t/dispatcher/06-set-param.t
@@ -9,7 +9,7 @@ my $d = Dispatcher.new;
$d.add: [
[:controller(*), :action(*) ], { 'c:' ~ $:controller ~ ' a:' ~ $:action },
[:controller(*), / \d / ], { $:controller ~ '/' ~ $^a },
- [:controller(*), *, * ], { my $c = $:controller; use "$c"; is($^a, $^b, 'Test within Rule') },
+ [:controller(*), *, * ], { my $c = $:controller; require "$c"; is($^a, $^b, 'Test within Rule') },
];
is( $d.dispatch(['one', 5]),
@@ -23,8 +23,7 @@ is( $d.dispatch(['one', 'two']),
);
is( $d.dispatch(['Test', 3, 3]),
- Bool::False, # But this value hinges on Test.pm behaving wrongly;
- # should be changed to Bool::True once Test.pm is fixed.
+ Bool::True,
'Pattern set controller and action'
);
View
2  t/integration/01-view_page.t
@@ -26,7 +26,7 @@ for @markups X @skins -> $m, $s {
my $c = November::Config.new( markup => $m, skin => $s );
my $w = November.new( config => $c );
for %gets.kv -> $page, $description {
- my $uri = November::URI.new( 'http://testserver' ~ $page );
+ my $uri = November::URI.new( uri => 'http://testserver' ~ $page );
my $cgi = Test::CGI.new( uri => $uri );
$cgi.parse_params( $page );
lives_ok( { $w.handle_request( $cgi ) }, "$m, $s, $description" );
View
2  t/markup/mediawiki/04-paragraphs.t
@@ -12,7 +12,7 @@ my @pars =
"par 2\nwith\nnewlines in it",
"par 3";
my $input = join "\n\n", @pars;
-my $expected_output = join "\n\n", map { "<p>$_</p>" },
+my $expected_output = join "\n\n", map { "<p>{$_}</p>" },
"par 1", "par 2 with newlines in it", "par 3";
my $actual_output = $converter.format($input);
View
8 t/markup/mediawiki/06-links.t
@@ -10,9 +10,11 @@ my $link_maker = {
my $l = $^page.ucfirst;
my $t = $^title // $^page;
$l .= subst(' ', '_', :g);
- "<a href=\"/?page=$l\">$t</a>"
+ qq[<a href="/?page=$l">{$t}</a>];
+}
+my $extlink_maker = -> $href, $title {
+ qq[<a href="$href">{$title}</a>]
}
-my $extlink_maker = { "<a href=\"$^href\">$^title</a>" }
{
my $input = 'An example of a [[link]]';
@@ -104,7 +106,7 @@ my $extlink_maker = { "<a href=\"$^href\">$^title</a>" }
{
my $input = 'This is an [http://example.com] external link';
- my $expected_output = "<p>$input</p>";
+ my $expected_output = "<p>{$input}</p>";
my $actual_output = $converter.format($input);
is( $actual_output, $expected_output, 'no extlink maker, no conversion' );
View
2  t/markup/mediawiki/07-italic-and-bold.t
@@ -86,6 +86,8 @@ my @tests =
],
;
+# RAKUDO: Doesn't respect "use Test :EXPORT"
+use Test;
use Test::InputOutput;
plan +@tests;
View
2  t/markup/mediawiki/12-unordered-lists.t
@@ -26,6 +26,8 @@ my @tests =
],
;
+# RAKUDO: Doesn't respect "use Test :EXPORT"
+use Test;
use Test::InputOutput;
plan +@tests;
View
2  t/markup/mediawiki/13-numbered-lists.t
@@ -26,6 +26,8 @@ my @tests =
],
;
+# RAKUDO: Doesn't respect "use Test :EXPORT"
+use Test;
use Test::InputOutput;
plan +@tests;
View
2  t/markup/mediawiki/14-definition-lists.t
@@ -32,6 +32,8 @@ my @tests =
],
;
+# RAKUDO: Doesn't respect "use Test :EXPORT"
+use Test;
use Test::InputOutput;
plan +@tests;
View
2  t/markup/mediawiki/15-mixed-lists.t
@@ -22,6 +22,8 @@ my @tests =
],
;
+# RAKUDO: Doesn't respect "use Test :EXPORT"
+use Test;
use Test::InputOutput;
plan +@tests;
View
2  t/markup/mediawiki/16-pre.t
@@ -8,6 +8,8 @@ my @tests =
],
;
+# RAKUDO: Doesn't respect "use Test :EXPORT"
+use Test;
use Test::InputOutput;
plan +@tests;
todo 'Implement pre text';
View
2  t/markup/minimal/03-escaping.t
@@ -15,7 +15,7 @@ my $converter = Text::Markup::Wiki::Minimal.new;
for %h.kv -> $input, $abbr {
my $expected_escape = '&' ~ $abbr ~ ';';
- my $expected_output = "<p>$expected_escape</p>";
+ my $expected_output = "<p>{$expected_escape}</p>";
my $actual_output = $converter.format($input);
is( $actual_output, $expected_output, "$input -> $expected_escape" );
View
2  t/markup/minimal/04-paragraphs.t
@@ -12,7 +12,7 @@ my @pars =
"par 2\nwith\nnewlines in it",
"par 3";
my $input = join "\n\n", @pars;
-my $expected_output = join "\n\n", map { "<p>$_</p>" }, @pars;
+my $expected_output = join "\n\n", map { "<p>{$_}</p>" }, @pars;
my $actual_output = $converter.format($input);
is( $actual_output, $expected_output,
View
4 t/markup/minimal/06-links.t
@@ -108,9 +108,9 @@ my $converter = Text::Markup::Wiki::Minimal.new( link_maker => &make_link);
sub make_link($page, $title?) {
if $title {
if $page ~~ m/':'/ {
- return "<a href=\"$page\">$title</a>";
+ return "<a href=\"$page\">{$title}</a>";
} else {
- return "<a href=\"?action=view&page=$page\">$title</a>";
+ return "<a href=\"?action=view&page=$page\">{$title}</a>";
}
} else {
View
2  t/storage/index.t
@@ -29,7 +29,7 @@ is($s.read_index.perl, '["Foo"]', 'Add to index one page');
$s.add_to_index('Bar');
is($s.read_index.perl, '["Foo", "Bar"]', 'Add to index another page');
$s.add_to_index('Foo');
-is($s.read_index.perl, '["Foo", "Bar"]', 'Do not add to index page doubble');
+is($s.read_index.perl, '["Foo", "Bar"]', 'Do not add dup to index page');
$s.afterTest;
View
19 t/tags/norm.t
@@ -1,7 +1,7 @@
use v6;
use Test;
-plan 1;
+plan 2;
use November::Tags;
@@ -9,27 +9,22 @@ my @counts_to_test =
[ 2, 5, 6, 14 ],
[ 0, 4, 5, 10 ],
-# RAKUDO: yet another bug, see comments below
-# [ 5, 5, 2, 1 ],
-# [ 10, 10, 4, 0 ]
+ [ 5, 5, 2, 1 ],
+ [ 10, 10, 4, 0 ]
;
my $t = November::Tags.new;
-for @counts_to_test -> $in, $expected {
-
- # RAKUDO: list assigment do not implemented
- # my $min, $max = $in.min, $in.max;
- my $min = $in.min;
- my $max = $in.max;
+for @counts_to_test -> @in, @expected {
+ my ($min, $max) = @in.minmax.bounds;
# debugging
# say $in.perl ~ " min:$min, max:$max";
# RAKUDO: min and max there save its values, and I cant reasign it :(
# So, second map work with wrong min and max
- my $out = map { $t.norm($_, $min, $max) }, $in.values;
+ my @out = map { $t.norm($_, $min, $max) }, @in.values;
- is_deeply( $out, $expected, 'Normalize: ' ~ $in.perl );
+ is_deeply( @out, @expected, 'Normalize: ' ~ @in.perl );
}
# vim:ft=perl6
Please sign in to comment.
Something went wrong with that request. Please try again.