#!perl
# Copyright (C) 2006-2007, The Perl Foundation.
# $Id: parrotinterpreter.t 20664 2007-08-18 01:47:55Z chromatic $

use strict;
use warnings;
use lib qw( . lib ../lib ../../lib );
use Test::More;
use Parrot::Test tests => 4;

=head1 NAME

t/pmc/parrotinterpreter.t - test the ParrotInterpreter PMC


=head1 SYNOPSIS

    % prove t/pmc/parrotinterpreter.t

=head1 DESCRIPTION

Tests the ParrotInterpreter PMC.

=cut

pir_output_is( <<'CODE', <<'OUT', 'create new interpreter' );
.sub 'test' :main
    new P0, 'ParrotInterpreter'
    print "ok 1\n"
.end
CODE
ok 1
OUT

pir_output_is( <<'CODE', <<'OUT', 'run passed code pmc in another interpreter' );
.sub main :main
    $S0 = <<"PIR"
.sub test :main
    print "Hello, world\\n"
.end
PIR
    # Compile it.
    $P0 = compreg "PIR"
    $P1 = $P0($S0)
    # Invoke in different interpreter.
    $P2 = new 'ParrotInterpreter'
    runinterp $P2, $P1
    print "survived\n"
.end
CODE
Hello, world
survived
OUT

pir_output_is( <<'CODE', <<'OUT', 'running passed code pmc in another interpreter' );
.sub 'main' :main
     $S0 = <<'PIR'
 .sub 'main' :main
     say "help, i'm stuck inside an interpreter!"
 .end
PIR
     $P0 = new 'ParrotInterpreter'
     $P1 = compreg 'PIR'
     $P2 = $P1($S0)
     runinterp $P0, $P2
     say "nobody cares."
	 end
 .end
CODE
help, i'm stuck inside an interpreter!
nobody cares.
OUT

pir_output_is( <<'CODE', <<'OUT', 'accessing PMCs from nested interp' );
.sub 'main' :main
     $S0 = <<'PIR'
 .sub 'main' :main
 	$P0 = find_global 'some_string'
    $P0 = 'Accessing globals from other interpreters.'
 .end
PIR
     $P3 = new 'String'
	 store_global 'some_string', $P3

     $P0 = new 'ParrotInterpreter'
     $P1 = compreg 'PIR'
     $P2 = $P1($S0)
     runinterp $P0, $P2
	 $S1 = $P3
	 say $S1
	 end
 .end
CODE
Accessing globals from other interpreters.
OUT

# Local Variables:
#   mode: cperl
#   cperl-indent-level: 4
#   fill-column: 100
# End:
# vim: expandtab shiftwidth=4:


syntax highlighted by Code2HTML, v. 0.9.1