Writing Tests ============= Here's how to write tests. 1. Create a new file in the t directory, called foo.t. Start with the following two lines: require 't/test.pl'; package OddMuse; use Test::More tests => $num clear_pages(); This will load the testing library, make all its functions available to you, announce that you plan to make $num tests, and clear all the pages from the test wiki. The test wiki will be created in /tmp/oddmuse. 2. The wiki is accessed via the command line only. You don't need to have your code installed on a webserver! Just run the test from the parent directory: perl t/foo.t 3. Write $num tests. :) add_module, remove_module, and remove_rule ------------------------------------------ Load a module before you run any tests: add_module('usemod.pl'); Modules and rules need rarely be removed, since every *.t file starts in a new process. If you then want to run additional tests without the module you added (in the same *.t file!), then remove both the module and the rules it added. You'll have to do this manually, unfortunately. remove_module('usemod.pl'); remove_rule(\&UsemodRule); update_page ----------- $page = update_page($pagename, $content); update_page($pagename, $content, $summary, $minor, $admin, @rest); @rest is a list of parameter=value string pairs: @rest = ('username=joe', 'ns=Moore'); If updating the page resultet in a redirect, the redirect is stored in the variable $redirect, and you still get the result page returned. test_page($redirect, split('\n',<<'EOT')); banned text wiki administrator matched See .*BannedContent.* for more information EOT You can even create pages containing file uploads directly: $page = update_page('alex pic', "#FILE image/png\niVBORw0KGgoAAAA"); get_page -------- $page = get_page('action=calendar'); $page = get_page('action=rc all=1 showedit=1'); $page = get_page('action=rc', 'all=1', 'showedit=1'); test_page(get_page('action=all'), 'restricted to administrators'); Return the text of the page. The parameters are the parameters available to you from the command line when using the CGI library: keyword1 keyword2 keyword3 keyword1+keyword2+keyword3 name1=value1 name2=value2 name1=value1&name2=value2 "name1='I am a long value'" "name2=two\ words" /your/path/here?name1=value1&name2=value2 run_tests --------- Takes a list of alternating input and output strings, applies rules (and thus @MyRules) to input and compares it to the output. If you have html attributes in the output you want to test, use xpath_run_tests, because the order of the attributes is not guaranteed and varies with CGI library version. run_tests(q{"Get lost!", they say.}, q{“Get lost!”, they say.}); run_tests(split('\n', <<'EOT')); input1 output1 input2 output2 EOT Newline excapes \n in the input and output are translated to real newlines when running the tests. run_tests(split('\n',<<'EOT')); * ''one\n** two