The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/perl -w
# -*- perl -*-

#
# $Id: 94_js_plugin.t,v 1.6 2004/12/12 11:40:47 eserte Exp $
# Author: Slaven Rezic
#

use strict;

BEGIN {
    if (!eval q{
	use Test::More;
	use Template;
	use JavaScript;
	1;
    }) {
	print "# tests only work with installed Test, Template, and JavaScript modules\n";
	print "1..1\n";
	print "ok 1\n";
	exit;
    }
}

BEGIN { plan tests => 11 }

my $runtime = new JavaScript::Runtime();
my $context = $runtime->create_context();

######################################################################
# all characters
{
    my $text = <<EOF;
[%- USE JS -%]
var s1 = '[%- all_characters | js_q -%]';
var s2 = "[%- all_characters | js_q -%]";
var s3 = s1 + s2;
s3;
EOF

    my $all_characters = join("", map { chr($_) } (8,9,10,12,13,32..126,160..255));

    my $t = Template->new({PLUGIN_BASE => "WE_Frontend::Plugin"});
    my $output;
    my $ret = $t->process(\$text, {all_characters => $all_characters}, \$output);
    ok($ret, "js_q test") or diag $t->error;

    my $js_ret = $context->eval($output);
    is($js_ret, $all_characters . $all_characters,
       "js_q test through libjs");
}

######################################################################
# real life test
{
    my $text = <<EOF;
[%- USE JS -%]
var s1 = "[% 'Seite "Foobar" erfolgreich gespeichert.' | js_q %]";
var s2 = '[% 'Seite "Foobar" erfolgreich gespeichert.' | js_q %]';
var s3 = s1 + s2;
s3
EOF

    my $t = Template->new({PLUGIN_BASE => "WE_Frontend::Plugin"});
    my $output;
    my $ret = $t->process(\$text, {}, \$output);
    ok($ret, "real js_q test") or diag $t->error;

    my $js_ret = $context->eval($output);
    is($js_ret, "Seite \"Foobar\" erfolgreich gespeichert."x2,
       "real js_q test thorugh libjs");
}

{
    my $text = <<EOF;
[%- USE JS -%]
var s1 = unescape("[% 'Seite "Foobar" erfolgreich gespeichert.' | js_escape %]");
s1
EOF

    my $t = Template->new({PLUGIN_BASE => "WE_Frontend::Plugin"});
    my $output;
    my $ret = $t->process(\$text, {}, \$output);
    ok($ret, "js_escape test") or diag $t->error;

    my $js_ret = $context->eval($output);
    is($js_ret, "Seite \"Foobar\" erfolgreich gespeichert.",
       "js_escape test through libjs");
}

{
    my $text = <<EOF;
[%- USE JS -%]
[% "Euro \x{20ac}" | js_escape %]
EOF

    my $t = Template->new({PLUGIN_BASE => "WE_Frontend::Plugin"});
    my $output;
    my $ret = $t->process(\$text, {}, \$output);
    ok($ret, "js_escape with unicode test") or diag $t->error;
    is($output, <<EOF);
Euro%20%u20ac
EOF
}

{
    my $text = <<EOF;
[%- USE JS -%]
var a1 = "[%- FILTER js_uni -%]
normal characters:    ABC
umlauts in latin1:    \xe4\xf6\xfc
unicode range (euro): \x{20ac}
[% END -%]";
a1
EOF
    my $t = Template->new({PLUGIN_BASE => "WE_Frontend::Plugin"});
    my $output;
    my $ret = $t->process(\$text, {}, \$output);
    ok($ret, "js_uni test") or diag $t->error;

    is($output, <<'EOF', "correct javascript output");
var a1 = "normal characters:    ABC\numlauts in latin1:    \u00e4\u00f6\u00fc\nunicode range (euro): \u20ac\n";
a1
EOF

    local $TODO = "libjs seems to have problems with unicode";
    my $js_ret = $context->eval($output);
    is($js_ret, <<EOF, "js_uni test through libjs");
normal characters:    ABC
umlauts in latin1:    \xe4\xf6\xfc
unicode range (euro): \x{20ac}
EOF
}

######################################################################
#kann wech XXX
#  my $x=qq{x = "init('Seite \x5c"Foobar\x5c" erfolgreich gespeichert und freigegeben.'); x;"};
#  warn $context->eval($x);

__END__