[svn:parrot] r39394 - branches/pmc_pct/compilers/vtdumper/t

cotto at svn.parrot.org cotto at svn.parrot.org
Thu Jun 4 20:57:46 UTC 2009


Author: cotto
Date: Thu Jun  4 20:57:45 2009
New Revision: 39394
URL: https://trac.parrot.org/parrot/changeset/39394

Log:
[vtdumper] add tests for sections, factor out some repeated code

Added:
   branches/pmc_pct/compilers/vtdumper/t/02-sections.t
Modified:
   branches/pmc_pct/compilers/vtdumper/t/01-functions.t
   branches/pmc_pct/compilers/vtdumper/t/common.pir

Modified: branches/pmc_pct/compilers/vtdumper/t/01-functions.t
==============================================================================
--- branches/pmc_pct/compilers/vtdumper/t/01-functions.t	Thu Jun  4 20:23:05 2009	(r39393)
+++ branches/pmc_pct/compilers/vtdumper/t/01-functions.t	Thu Jun  4 20:57:45 2009	(r39394)
@@ -18,32 +18,21 @@
 
     parse_tests = new ['Hash']
 
-    parse_tests['comments: before function'] =<<"VTABLE"
+    parse_tests['comments: before function'] = <<"VTABLE"
 #HAVE A NICE DAY
 void do_foo()
 VTABLE
 
-    parse_tests['comments: after function'] =<<"VTABLE"
+    parse_tests['comments: after function'] = <<"VTABLE"
 void do_foo()
 #I've got a lovely bunch of coconuts.
 VTABLE
 
-    parse_tests['comments: with function'] =<<"VTABLE"
+    parse_tests['comments: with function'] = <<"VTABLE"
 void do_foo() #This is an important function that does important things.
 VTABLE
 
-    .local pmc it, key
-    .local string vtable, test_result
-
-    it = iter parse_tests
-  iter_loop:
-    unless it goto iter_done
-    key = shift it
-    vtable = parse_tests[key]
-    test_result = 'test_parse_one'(vtable)
-    is(test_result, '', key)
-    goto iter_loop
-  iter_done:
+    test_parse_loop(parse_tests, 0)
 
 .end
 
@@ -53,66 +42,55 @@
 
     parse_tests = new ['Hash']
 
-    parse_tests['valid: void retval, no args'] =<<"VTABLE"
+    parse_tests['valid: void retval, no args'] = <<"VTABLE"
 void do_foo()
 VTABLE
 
-    parse_tests['valid: void retval, 1 simple arg'] =<<"VTABLE"
+    parse_tests['valid: void retval, 1 simple arg'] = <<"VTABLE"
 void do_foo(INTVAL i)
 VTABLE
 
-    parse_tests['valid: void retval, 2 simple args'] =<<"VTABLE"
+    parse_tests['valid: void retval, 2 simple args'] = <<"VTABLE"
 void do_foo(INTVAL i, FLOATVAL j)
 VTABLE
 
-    parse_tests['valid: void retval, 3 simple args'] =<<"VTABLE"
+    parse_tests['valid: void retval, 3 simple args'] = <<"VTABLE"
 void do_foo(FLOATVAL f, INTVAL i, INTVAL j)
 VTABLE
 
-    parse_tests['valid: simple retval, no args'] =<<"VTABLE"
+    parse_tests['valid: simple retval, no args'] = <<"VTABLE"
 INTVAL do_foo()
 VTABLE
 
-    parse_tests['valid: pointer retval, no args'] =<<"VTABLE"
+    parse_tests['valid: pointer retval, no args'] = <<"VTABLE"
 PMC* do_foo()
 VTABLE
 
-    parse_tests['valid: void pointer retval, no args'] =<<"VTABLE"
+    parse_tests['valid: void pointer retval, no args'] = <<"VTABLE"
 void* do_foo()
 VTABLE
 
-    parse_tests['valid: alt. pointer retval, no args'] =<<"VTABLE"
+    parse_tests['valid: alt. pointer retval, no args'] = <<"VTABLE"
 PMC *do_foo()
 VTABLE
 
-    parse_tests['valid: void retval, 1 pointer arg'] =<<"VTABLE"
+    parse_tests['valid: void retval, 1 pointer arg'] = <<"VTABLE"
 void do_foo(PMC *p)
 VTABLE
 
-    parse_tests['valid: void retval, 2 pointer args'] =<<"VTABLE"
+    parse_tests['valid: void retval, 2 pointer args'] = <<"VTABLE"
 void do_foo(PMC *p, STRING* s)
 VTABLE
 
-    parse_tests['valid: void retval, 3 pointer args'] =<<"VTABLE"
+    parse_tests['valid: void retval, 3 pointer args'] = <<"VTABLE"
 void do_foo(PMC *p, STRING *s, void *s)
 VTABLE
 
-    parse_tests['valid: pointer retval, mixed args 1'] =<<"VTABLE"
+    parse_tests['valid: pointer retval, mixed args 1'] = <<"VTABLE"
 PMC* do_foo(INTVAL i, PMC* p, STRING* s)
 VTABLE
 
-    .local pmc it, key
-    .local string vtable, test_result
-
-    it = iter parse_tests
-  iter_loop:
-    unless it goto iter_done
-    key = shift it
-    vtable = parse_tests[key]
-    test_result = 'test_parse_one'(vtable)
-    is(test_result, '', key)
-    goto iter_loop
-  iter_done:
+    test_parse_loop(parse_tests, 0)
 
 .end
 
@@ -121,49 +99,39 @@
 
     parse_tests = new ['Hash']
 
-    parse_tests['invalid: void void retval'] =<<"VTABLE"
+    parse_tests['invalid: void void retval'] = <<"VTABLE"
 void void do_foo()
 VTABLE
 
-    parse_tests['invalid: bad pointer retval 1'] =<<"VTABLE"
+    parse_tests['invalid: bad pointer retval 1'] = <<"VTABLE"
 *PMC do_foo(INTVAL i)
 VTABLE
 
-    parse_tests['invalid: bad pointer retval 2'] =<<"VTABLE"
+    parse_tests['invalid: bad pointer retval 2'] = <<"VTABLE"
 PMC *PMC do_foo()
 VTABLE
 
-    parse_tests['invalid: unicorns'] =<<"VTABLE"
+    parse_tests['invalid: unicorns'] = <<"VTABLE"
 PMC* do_foo(unicorns)
 VTABLE
 
-    parse_tests['invalid: bad first arg'] =<<"VTABLE"
+    parse_tests['invalid: bad first arg'] = <<"VTABLE"
 PMC *do_foo(PMC*)
 VTABLE
 
-    parse_tests['invalid: bad second arg'] =<<"VTABLE"
+    parse_tests['invalid: bad second arg'] = <<"VTABLE"
 PMC *do_foo(INTVAL i, k, INTVAL q)
 VTABLE
 
-    parse_tests['invalid: space in function name'] =<<"VTABLE"
+    parse_tests['invalid: space in function name'] = <<"VTABLE"
 PMC *do foo()
 VTABLE
 
-    .local pmc it, key
-    .local string vtable, test_result
-
-    it = iter parse_tests
-  iter_loop:
-    unless it goto iter_done
-    key = shift it
-    vtable = parse_tests[key]
-    test_result = 'test_parse_one'(vtable)
-    isnt(test_result, '', key)
-    goto iter_loop
-  iter_done:
+    test_parse_loop(parse_tests, 1)
 
 .end
 
+
 .sub function_parsing
     .local pmc parse_test
 
@@ -239,7 +207,7 @@
     $S0 = do_bar['arguments';1;'identifier']
     is($S0, "p2", "do_bar second arg name")
 
-    
+
     #test quuxle
     #INTVAL1 quuxle(PMC3* p3, PMC4* p4)
 
@@ -264,9 +232,9 @@
     $S0 = quuxle['arguments';1;'identifier']
     is($S0, "p4", "quuxle second arg name")
 
+.end
 
 
-.end
 # Don't forget to update plan!
 
 # Local Variables:

Added: branches/pmc_pct/compilers/vtdumper/t/02-sections.t
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/pmc_pct/compilers/vtdumper/t/02-sections.t	Thu Jun  4 20:57:45 2009	(r39394)
@@ -0,0 +1,112 @@
+#! ../../parrot
+
+.include 't/common.pir'
+
+.sub 'main' :main
+    .include 'test_more.pir'
+    load_bytecode 'vtdumper.pbc'
+
+    plan(13)
+    comments()
+    invalid_sections()
+    section_assignment()
+.end
+
+.sub comments
+    .local pmc parse_tests
+
+    parse_tests = new ['Hash']
+
+    parse_tests['comments: before section'] = <<"VTABLE"
+#HAVE A NICE DAY
+[NICE_DAY]
+VTABLE
+
+    parse_tests['comments: after section'] = <<"VTABLE"
+[COCONUTS]
+#I've got a lovely bunch of coconuts.
+VTABLE
+
+parse_tests['comments: with section'] = <<"VTABLE"
+[VERY_IMPORTANT] #This is an important function that does important things.
+VTABLE
+
+    test_parse_loop(parse_tests, 0)
+
+.end
+
+
+.sub invalid_sections
+    .local pmc parse_tests
+
+    parse_tests = new ['Hash']
+
+    parse_tests['invalid: empty name'] = <<"VTABLE"
+[]
+VTABLE
+
+    parse_tests['invalid: space in name'] = <<"VTABLE"
+[FOO BAR]
+VTABLE
+
+    parse_tests['invalid: non-identifier characters in name'] = <<"VTABLE"
+[FOO*BAR]
+VTABLE
+
+    parse_tests['invalid: non-identifier name'] = <<"VTABLE"
+[???]
+VTABLE
+    
+    test_parse_loop(parse_tests, 1)
+
+.end
+
+
+.sub section_assignment
+
+    .local pmc parse_test
+
+    parse_test = new ['String']
+
+    parse_test = <<"VTABLE"
+void in_main()    
+[BOGUS]
+[HAPPY]
+INTVAL pants(PMC* p)
+[STRANGE]
+INTVAL attraction()
+VTABLE
+
+    .local pmc emitter, past, node
+    .local string section, name
+    (emitter, past) = get_emitter_and_capture(parse_test, "past")
+
+    node    = past[0]
+    name    = node['name']
+    section = node['section']
+    is(name, 'in_main', 'in_main has expected name')
+    is(section, 'MAIN', 'in_main is in MAIN section by default')
+    
+    node    = past[1]
+    name    = node['name']
+    section = node['section']
+    is(name, 'pants', 'pants has expected name')
+    is(section, 'HAPPY', 'pants are HAPPY')
+    
+    node    = past[2]
+    name    = node['name']
+    section = node['section']
+    is(name, 'attraction', 'attraction has expected name')
+    is(section, 'STRANGE', 'attraction is in STRANGE section')
+    
+
+.end
+
+# Don't forget to update plan!
+
+# Local Variables:
+#   mode: cperl
+#   cperl-indent-level: 4
+#   fill-column: 100
+# End:
+# vim: expandtab shiftwidth=4 ft=pir:

Modified: branches/pmc_pct/compilers/vtdumper/t/common.pir
==============================================================================
--- branches/pmc_pct/compilers/vtdumper/t/common.pir	Thu Jun  4 20:23:05 2009	(r39393)
+++ branches/pmc_pct/compilers/vtdumper/t/common.pir	Thu Jun  4 20:57:45 2009	(r39394)
@@ -2,6 +2,29 @@
 
 =cut
 
+.sub test_parse_loop
+    .param pmc hash
+    .param int expect_fail
+
+    .local pmc it, key
+    .local string vtable, test_result
+
+    it = iter hash
+  iter_loop:
+    unless it goto iter_done
+    key = shift it
+    vtable = hash[key]
+    test_result = 'test_parse_one'(vtable)
+    if expect_fail == 1 goto test_isnt
+    is(test_result, '', key)
+    goto iter_loop
+  test_isnt:
+    isnt(test_result, '', key)
+    goto iter_loop
+  iter_done:
+.end
+
+
 .sub test_parse_one
     .param string vtable
     .local pmc compiler


More information about the parrot-commits mailing list