123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198 |
- # Copyright (C) 2006–2015 Alex Schroeder <alex@gnu.org>
- #
- # This program is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
- # the Free Software Foundation; either version 3 of the License, or
- # (at your option) any later version.
- #
- # This program is distributed in the hope that it will be useful,
- # but WITHOUT ANY WARRANTY; without even the implied warranty of
- # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- # GNU General Public License for more details.
- #
- # You should have received a copy of the GNU General Public License
- # along with this program. If not, see <http://www.gnu.org/licenses/>.
- require 't/test.pl';
- package OddMuse;
- use Test::More tests => 89;
- use utf8; # tests contain UTF-8 characters and it matters
- add_module('mac.pl');
- # Search for broken regular expressions
- test_page(get_page('search=%2Btest'), 'Search for: \+test');
- # Test search, make sure ordinary users don't see the replacement form
- update_page('SearchAndReplace', 'This is fooz and this is barz.', '', 1);
- $page = get_page('search=fooz');
- test_page($page,
- '<h1>Search for: fooz</h1>',
- '<p class="result">1 pages found.</p>',
- 'This is <strong>fooz</strong> and this is barz.');
- xpath_test($page, '//span[@class="result"]/a[@class="local"][@href="http://localhost/wiki.pl/SearchAndReplace"][text()="SearchAndReplace"]');
- test_page_negative($page, 'Replace:');
- # Search page name
- $page = get_page('search=andreplace');
- test_page($page,
- '<h1>Search for: andreplace</h1>',
- '<p class="result">1 pages found.</p>');
- # FIXME: Not sure this should work... 'Search<strong>AndReplace</strong>'
- xpath_test($page, '//span[@class="result"]/a[@class="local"][@href="http://localhost/wiki.pl/SearchAndReplace"][text()="SearchAndReplace"]');
- # Brackets in the page name
- test_page(update_page('Search (and replace)', 'Muu'),
- 'search=%22Search\+%5c\(and\+replace%5c\)%22');
- # Make sure only admins can replace
- test_page(get_page('search=foo pwd=foo'),
- 'Replace:');
- test_page(get_page('search=foo replace=bar'),
- 'This operation is restricted to administrators only...');
- # Preview simple replacement operation
- test_page(get_page('search=fooz replace=fuuz preview=1 pwd=foo'), split('\n',<<'EOT'));
- <h1>Preview: fooz → fuuz</h1>
- <p class="result">1 pages found.</p>
- <div class="old"><p>< This is <strong class="changes">fooz</strong> and this is barz.
- <div class="new"><p>> This is <strong class="changes">fuuz</strong> and this is barz.
- EOT
- # Verify that the change has not been made
- test_page(get_page('SearchAndReplace'), 'This is fooz and this is barz.');
- # Simple replace where the replacement pattern is found
- test_page(get_page('search=fooz replace=fuuz pwd=foo'), split('\n',<<'EOT'));
- <h1>Replaced: fooz → fuuz</h1>
- <p class="result">1 pages found.</p>
- This is <strong>fuuz</strong> and this is barz.
- EOT
- # Verify that the change has been made
- test_page(get_page('SearchAndReplace'), 'This is fuuz and this is barz.');
- # Replace with empty string
- test_page(get_page('search=this%20is%20 replace= pwd=foo delete=1'), split('\n',<<'EOT'));
- <h1>Replaced: this is → </h1>
- <p class="result">1 pages found.</p>
- fuuz and barz.
- EOT
- test_page(get_page('SearchAndReplace'), '<p>fuuz and barz.');
- # Creating 12 pages
- for my $i ('A' .. 'M') {
- OpenPage("Page_$i");
- Save("Page_$i", 'Something');
- }
- # Testing default pagination (10 pages)
- $page = get_page('search=Something replace=Other preview=1 pwd=foo');
- test_page($page, split('\n',<<'EOT'));
- <h1>Preview: Something → Other</h1>
- <p class="result">13 pages found.</p>
- <div class="old"><p>< <strong class="changes">Something</strong>
- <div class="new"><p>> <strong class="changes">Other</strong>
- EOT
- test_page($page, map { "Page_$_" } ('A' .. 'J'));
- test_page_negative($page, map { "Page_$_" } ('K' .. 'M'));
- xpath_test($page, '//a[@class="more"][@href="http://localhost/wiki.pl?search=Something;preview=1;offset=10;num=10;replace=Other"]');
- # Next page
- $page = get_page('search=Something preview=1 offset=10 num=10 replace=Other pwd=foo');
- test_page($page, map { "Page_$_" } ('K' .. 'M'));
- # Now do the replacement
- $page = get_page('search=Something replace=Other pwd=foo');
- test_page($page, 'Replaced: Something → Other', '13 pages found',
- map { "Page_$_" } ('A' .. 'M'));
- # Verify that the change has been made
- test_page(get_page('search=Other'), 'Search for: Other', '13 pages found');
- # Replace with backreferences, where the replacement pattern is no longer found.
- # Take 'fuuz and barz.' and replace ([a-z]+)z with x$1 results in 'xfuu and xbar.'
- test_page(get_page('"search=([a-z]%2b)z" replace=x%241 pwd=foo'), '1 pages found');
- test_page(get_page('SearchAndReplace'), 'xfuu and xbar.');
- # Create an extra page that should not be found
- update_page('NegativeSearchTest', 'this page contains an ab');
- update_page('NegativeSearchTestTwo', 'this page contains another ab');
- test_page(get_page('search=xb replace=[xa]b pwd=foo'), '1 pages found'); # not two ab!
- test_page(get_page('SearchAndReplace'), 'xfuu and \[xa\]bar.');
- # Handle quoting
- test_page(get_page('search=xfuu replace=/fuu/ pwd=foo'), '1 pages found'); # not two ab!
- test_page(get_page('SearchAndReplace'), '/fuu/ and \[xa\]bar.');
- test_page(get_page('search=/fuu/ replace={{fuu}} pwd=foo'), '1 pages found');
- test_page(get_page('SearchAndReplace'), '\{\{fuu\}\} and \[xa\]bar.');
- # Check headers especially the quoting of non-ASCII characters.
- $page = update_page("Alexander_Schröder", "Edit [[Alexander Schröder]]!");
- xpath_test($page,
- '//h1/a[@title="Click to search for references to this page"][@href="http://localhost/wiki.pl?search=%22Alexander+Schr%c3%b6der%22"][text()="Alexander Schröder" or text()="' . Encode::encode_utf8('Alexander Schröder') . '"]',
- '//a[@class="local"][@href="http://localhost/wiki.pl/Alexander_Schr%c3%b6der"][text()="Alexander Schröder" or text()="' . Encode::encode_utf8('Alexander Schröder') . '"]');
- xpath_test(update_page('IncludeSearch',
- "first line\n<search \"ab\">\nlast line"),
- '//p[text()="first line "]', # note the NL -> SPC
- '//div[@class="search"]/p/span[@class="result"]/a[@class="local"][@href="http://localhost/wiki.pl/NegativeSearchTest"][text()="NegativeSearchTest"]',
- '//div[@class="search"]/p/span[@class="result"]/a[@class="local"][@href="http://localhost/wiki.pl/NegativeSearchTestTwo"][text()="NegativeSearchTestTwo"]',
- '//p[text()=" last line"]'); # note the NL -> SPC
- xpath_test(get_page('search=Schröder'),
- '//input[@name="search"][@value="Schröder"]');
- # Search for zero
- update_page("Zero", "This is about 0 and the empty string ''.");
- test_page(get_page('search=0'),
- '<h1>Search for: 0</h1>',
- '<p class="result">1 pages found.</p>',
- "This is about <strong>0</strong> and the empty string ''.",
- 'meta name="robots" content="NOINDEX,FOLLOW"');
- # Search for tags
- update_page("Tag", "This is <b>bold</b>.");
- test_page(get_page('search="<b>"'),
- '<h1>Search for: <b></h1>',
- '<p class="result">1 pages found.</p>',
- "This is <strong><b></strong>.");
- # Search for quoted strings
- update_page("Tugend", "Ein wirklich tugendhafter Mensch
- bemüht sich nicht um seine Tugend,
- darum ist er tugendhaft.");
- update_page("Laster", "Ein scheinbar tugendhafter Mensch
- bemüht sich dauernd um seine Tugend,
- darum ist er nicht wirklich tugendhaft.");
- # unordered words
- test_page(get_page('search="darum ist er tugendhaft" raw=1'),
- 'title: Tugend', 'title: Laster');
- # in order
- $page = get_page('search="\"darum ist er tugendhaft\"" raw=1');
- test_page($page, 'title: Tugend');
- test_page_negative($page, 'title: Laster');
|