Ticket #1090 (closed patch: done)

Opened 5 years ago

Last modified 5 years ago

Convert t/pmc/exporter.t to PIR

Reported by: kurahaupo Owned by:
Priority: minor Milestone:
Component: testing Version: 1.6.0
Severity: low Keywords:
Cc: Language:
Patch status: rejected Platform: all

Description

Index: t/pmc/exporter.t =================================================================== --- t/pmc/exporter.t (revision 41672) +++ t/pmc/exporter.t (working copy) @@ -1,13 +1,7 @@ -#!perl +#!parrot

# Copyright (C) 2007, Parrot Foundation. # $Id$

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

=head1 NAME

t/pmc/exporter.t - test the Exporter PMC

@@ -23,30 +17,43 @@

=cut

# L<PDD17/Exporter PMC>

-pir_output_is( <<'CODE', <<'OUT', 'new' ); -.sub 'test' :main + +.sub 'main' :main + .include 'test_more.pir' + plan(26) + + test_1() # 3 tests + test_2() # 4 tests + test_3() # 5 tests + test_4() # 6 tests + test_5() # 1 tests + test_6() # 1 tests + test_7() # 1 tests + test_8() # 1 tests + test_9() # 1 tests + test_10() # 1 tests + test_11() # 1 tests + test_12() # 1 tests + +.end + +.sub 'test_1'

$P0 = new Exporter?

- say "ok 1 - $P0 = new Exporter?" + $I0 = isnull $P0 + is( $I0, 0, 'Constructed "Exporter" object' )

$I0 = isa $P0, 'Exporter'

- if $I0 goto ok_2 - print 'not ' - ok_2: - say "ok 2 - isa $P0, 'Exporter'" + ok( $I0, '... isa "Exporter"' ) + + $I0 = can $P0, 'destination' + ok( $I0, '... can "destination"' )

.end

-CODE -ok 1 - $P0 = new Exporter? -ok 2 - isa $P0, 'Exporter' -OUT -pir_output_is( <<'CODE', <<'OUT', 'source' ); -.sub 'test' :main +.sub 'test_2'

$P0 = new Exporter? $P1 = $P0.'source'()

- if null $P1 goto ok_1 - print 'not ' - ok_1: - say 'ok 1 - source() returns PMCNULL upon Exporter init' + $I0 = isnull $P1 + ok( $I0, 'source() returns PMCNULL upon Exporter init' )

# get a NameSpace PMC for testing # RT #46859 replace with make_namespace, when implemented

@@ -55,111 +62,70 @@

$P0.'source'(ns) $P1 = $P0.'source'()

- if $P1 == 'Eponymous' goto ok_2 - print 'not ' - ok_2: - say 'ok 2 - source() with args sets source namespace' + is( $P1, 'Eponymous', 'source() with args sets source namespace' )

$P1 = clone ns

- + $I0 = 1

push_eh ok_3 $P0.'source'(ns, $P1)

+ $I0 = 0 + ok_3:

pop_eh

+ ok( $I0, 'source() with too many args fails' ) - print 'not ' - ok_3: - say 'ok 3 - source() with too many args fails' -

push_eh ok_4

+ $I0 = 1

$P0.'source'('foo')

- pop_eh - print 'not ' + $I0 = 0

ok_4:

- say 'ok 4 - source() with non-namespace arg throws exception' + pop_eh + ok( $I0, 'source() with non-namespace arg throws exception' )

.end

- -# RT #46859 replace with make_namespace, when implemented -.namespace Eponymous? -.sub 'Eponymous' :anon -.end -CODE -ok 1 - source() returns PMCNULL upon Exporter init -ok 2 - source() with args sets source namespace -ok 3 - source() with too many args fails -ok 4 - source() with non-namespace arg throws exception -OUT - -pir_output_is( <<'CODE', <<'OUT', 'destination' ); -.sub 'test' :main +.sub 'test_3'

$P0 = new Exporter? $P1 = $P0.'destination'()

- unless null $P1 goto ok_1 - print 'not ' - ok_1: - say 'ok 1 - destination() with no args returns destination namespace' + $I0 = isnull $P1 + is( $I0, 0, 'destination() with no args returns destination namespace' )

$P99 = get_namespace

- if $P1 == $P99 goto ok_2 - print 'not ' - ok_2: - say 'ok 2 - ...which is current namespace at first' + is( $P1, $P99, 'ok 2 - ...which is current namespace at first' )

# get a NameSpace PMC for testing # RT #46859 replace with make_namespace, when implemented .local pmc ns ns = get_namespace Eponymous?

-

$P0.'destination'(ns) $P1 = $P0.'destination'()

- if $P1 == 'Eponymous' goto ok_3 - print 'not ' - ok_3: - say 'ok 3 - destination() with args sets destination namespace' + is( $P1, 'Eponymous', 'destination() with args sets destination namespace' )

$P1 = clone ns

-

push_eh ok_4

+ $I0 = 1

$P0.'destination'(ns, $P1)

+ $I0 = 0 + ok_4:

pop_eh

+ ok( $I0, 'destination() with too many args fails' ) - print 'not ' - ok_4: - say 'ok 4 - destination() with too many args fails' -

push_eh ok_5

+ $I0 = 1

$P0.'destination'('foo')

+ $I0 = 0 + ok_5:

pop_eh

- print 'not ' + ok( $I0, 'destination() with non-namespace arg throws exception' ) - ok_5: - say 'ok 5 - destination() with non-namespace arg throws exception'

.end

-# RT #46859 replace with make_namespace, when implemented -.namespace Eponymous? -.sub 'Eponymous' :anon -.end -CODE -ok 1 - destination() with no args returns destination namespace -ok 2 - ...which is current namespace at first -ok 3 - destination() with args sets destination namespace -ok 4 - destination() with too many args fails -ok 5 - destination() with non-namespace arg throws exception -OUT - -pir_output_is( <<'CODE', <<'OUT', 'globals' ); -.sub 'test' :main +.sub 'test_4'

$P0 = new Exporter?

$P1 = $P0.'globals'() $I0 = isnull $P1

- if $I0 goto ok_1 - print 'not ' - ok_1: - say 'ok 1 - globals() returns PMCNULL upon Exporter init' + ok( $I0, 'globals() returns PMCNULL upon Exporter init' )

# create an array to store globals in $P99 = new ResizableStringArray?

@@ -167,30 +133,29 @@

$P0.'globals'($P99) $P1 = $P0.'globals'() $I0 = isnull $P1

- if $I0 goto ok_2 - print 'not ' - ok_2: - say 'ok 2 - globals() with empty array arg sets PMCNULL' + ok( $I0, 'globals() with empty array arg sets PMCNULL' )

$P99 = push 'Alex' $P99 = push 'Prince'

+ $I9 = 1

$P0.'globals'($P99) $P1 = $P0.'globals'() $I0 = does $P1, 'hash'

+ eq $I0, 0, nok_3

$I99 = $P99 $I1 = $P1

- unless $I0 == 1 goto nok_3 - unless $I1 == $I99 goto nok_3 - unless $I1 == 2 goto ok_3 + ne $I1, $I99, nok_3 + ne $I1, 2, ok_3 # <<< should this be nok_3 instead?!?

$I0 = exists $P1Prince?

- unless $I0 goto nok_3 + eq $I0, 0, nok_3

$I0 = exists $P1Alex?

+ eq $I0, 0, nok_3

goto ok_3

nok_3:

- print 'not ' + $I9 = 0

ok_3:

- say 'ok 3 - globals() with array arg sets globals hash (hash with two keys)' + ok( $I9, 'globals() with array arg sets globals hash (hash with two keys)' )

# create a hash to store globals in $P99 = new Hash?

@@ -198,14 +163,12 @@

$P0.'globals'($P99) $P1 = $P0.'globals'() $I0 = isnull $P1

- if $I0 goto ok_4 - print 'not ' - ok_4: - say 'ok 4 - globals() with empty hash arg sets PMCNULL' + ok( $I0, 'globals() with empty hash arg sets PMCNULL' )

$P99Prince? = $P99Alex? =

+ $I9 = 1

$P0.'globals'($P99) $P1 = $P0.'globals'() $I99 = $P99

@@ -218,71 +181,46 @@

unless $I0 goto nok_5 goto ok_5

nok_5:

- print 'not ' + $I9 = 0

ok_5:

- say 'ok 5 - globals() with hash arg sets globals hash (hash with two keys)' + ok( $I9, 'globals() with hash arg sets globals hash (hash with two keys)' ) -

$P98 = clone $P99

push_eh ok_6

+ $I1 = 1

$P0.'globals'($P99, $P98)

+ $I1 = 0 + ok_6:

pop_eh

+ ok( $I1, 'globals() with too many args fails' ) - print 'not ' - ok_6: - say 'ok 6 - globals() with too many args fails' -

.end

-CODE -ok 1 - globals() returns PMCNULL upon Exporter init -ok 2 - globals() with empty array arg sets PMCNULL -ok 3 - globals() with array arg sets globals hash (hash with two keys) -ok 4 - globals() with empty hash arg sets PMCNULL -ok 5 - globals() with hash arg sets globals hash (hash with two keys) -ok 6 - globals() with too many args fails -OUT -pir_error_output_like( <<'CODE', <<'OUT', 'import - no args' ); -.sub 'test' :main +.sub 'test_5'

$P0 = new Exporter?

+ push_eh e1 + $I0 = 1

$P0.'import'()

- say 'ok 1 - import() with no args throws an exception' - + $I0 = 0 +e1: + pop_eh +# /source namespace not set\n/ + ok( $I0, 'import() with no args throws an exception' )

.end

-CODE -/source namespace not set\n/ -OUT -pir_output_is( <<'CODE', <<'OUT', 'import - same source and destination namespaces' ); -.sub 'test' :main +.sub 'test_6'

.local pmc exporter, src

src = get_namespace

exporter = new Exporter? exporter.'import'( src :named('source'), src :named('destination'), 'plan ok' :named('globals') )

- plan(1)

ok(1)

.end

-.sub 'plan' - .param int one - say '1..1' -.end - -.sub 'ok' - .param int one - say 'ok 1' -.end -CODE -1..1 -ok 1 -OUT - -pir_output_is( <<'CODE', <<'OUT', 'import - globals as string' ); -.sub 'test' :main +.sub 'test_7'

load_bytecode 'Test/More.pbc' .local pmc exporter, src

@@ -290,16 +228,10 @@

exporter = new Exporter? exporter.'import'( src :named('source'), 'plan ok' :named('globals') )

- plan(1)

ok(1)

.end

-CODE -1..1 -ok 1 -OUT -pir_output_is( <<'CODE', <<'OUT', 'import - globals with source passed separately' ); -.sub 'test' :main +.sub 'test_8'

load_bytecode 'Test/More.pbc' .local pmc exporter, src

@@ -308,16 +240,10 @@

exporter = new Exporter? exporter.'source'( src ) exporter.'import'( 'plan ok' :named('globals') )

- plan(1)

ok(1)

.end

-CODE -1..1 -ok 1 -OUT -pir_output_is( <<'CODE', <<'OUT', 'import - globals as array' ); -.sub 'test' :main +.sub 'test_9'

load_bytecode 'Test/More.pbc' .local pmc exporter, src, globals

@@ -328,16 +254,10 @@

exporter = new Exporter? exporter.'import'( src :named('source'), globals :named('globals') )

- plan(1)

ok(1)

.end

-CODE -1..1 -ok 1 -OUT -pir_output_is( <<'CODE', <<'OUT', 'import - globals as hash - null + empty string' ); -.sub 'test' :main +.sub 'test_10'

load_bytecode 'Test/More.pbc' .local pmc exporter, src, globals, nul

@@ -349,16 +269,10 @@

exporter = new Exporter? exporter.'import'( src :named('source'), globals :named('globals') )

- plan(1)

ok(1)

.end

-CODE -1..1 -ok 1 -OUT -pir_output_is( <<'CODE', <<'OUT', 'import - globals as hash - with dest names (latin)' ); -.sub 'test' :main +.sub 'test_11'

load_bytecode 'Test/More.pbc' .local pmc exporter, src, globals

@@ -369,16 +283,11 @@

exporter = new Exporter? exporter.'import'( src :named('source'), globals :named('globals') )

- consilium(1) + #consilium(1)

rectus(1)

.end

-CODE -1..1 -ok 1 -OUT -pir_output_is( <<'CODE', <<'OUT', 'import - globals with destination' ); -.sub 'test' :main +.sub 'test_12'

load_bytecode 'Test/More.pbc' .local pmc exporter, src, dest, globals

@@ -397,14 +306,14 @@

.namespace foo? .sub 'bar'

- plan(1)

ok(1)

.end

-CODE -1..1 -ok 1 -OUT +# RT #46859 replace with make_namespace, when implemented +.namespace Eponymous? +.sub 'Eponymous' :anon +.end +

# RT #46861 test exporting mmd subs

# Local Variables:

@@ -412,4 +321,4 @@

# cperl-indent-level: 4 # fill-column: 100 # End:

-# vim: expandtab shiftwidth=4: +# vim: expandtab shiftwidth=4 ft=pir:

Attachments

exporter.t.patch Download (10.9 KB) - added by kurahaupo 5 years ago.
Patch

Change History

Changed 5 years ago by dukeleto

Could you attach the patch with the "Attach file" button on the ticket? It will make it a lot easier for people to get at it.

Changed 5 years ago by kurahaupo

Patch

Changed 5 years ago by kurahaupo

I'm a bit worried that this will not exercise the exporter properly because it has fewer scopes because it has fewer compilation units. (Or it might also over-exercise it by including "test_more.pir"; I haven't checked yet.)

Also, the check for number of elements in the global hash in the original bypassed the other checks if it was not 2, with a successful result; this seems a bit odd, and probably not doing the right thing.

Changed 5 years ago by dukeleto

  • status changed from new to closed
  • resolution set to done
  • patch changed from new to rejected

Changed 5 years ago by kurahaupo

a new improved version of this has been submitted as #1386

Note: See TracTickets for help on using tickets.