git-cgi.t: Exercise an alphanumeric, but non-ASCII, root page
My previous attempt to reproduce this bug used a non-alphanumeric ASCII character. This is not currently considered to be a valid value for rootpage, although for a "do what I mean" approach, perhaps we should accept it and pass it through titlepage() or linkpage(). Using Chinese characters (which are considered to match [[:alnum:]] even though the Chinese script is not, strictly speaking, an alphabet), as in the original bug report, reproduces the bug. Signed-off-by: Simon McVittie <smcv@debian.org>master
parent
e8dea1b924
commit
4ba3c11592
|
@ -64,28 +64,21 @@ not deal with Chinese char, the below link can work
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
> Please could you try to make a minimal example or test, perhaps in the [[sandbox]]
|
> [Request for clarification removed]
|
||||||
> on this wiki or as a unit test in `t/git-cgi.t` in the ikiwiki source code, that
|
|
||||||
> demonstrates this bug and would be fixed by your patch? I tried to write a test
|
|
||||||
> for this, and I was able to make a test that uses a UTF-8 `rootpage` and fails;
|
|
||||||
> but your patch doesn't seem to fix it, so you must be seeing something different.
|
|
||||||
> I think there might be more than one bug here.
|
|
||||||
>
|
>
|
||||||
> If you've found multiple bugs, a separate example or test for each one would be
|
> I've now been able to reproduce this bug, and confirmed that your patch
|
||||||
> easiest to deal with.
|
> fixes it. [[Patch now applied|done]].
|
||||||
>
|
>
|
||||||
> In your original report, you said the `rootpage` was ASCII and started with `./`:
|
> (For other maintainers' reference: when testing Unicode bugs that
|
||||||
> `./bugs`. Then you mentioned Chinese characters (any non-ASCII character like é or ¬
|
> relate to page titles, using Unicode that is considered to be
|
||||||
> should behave the same as Chinese here) and attached a patch that alters how those
|
> punctuation, like ¬ or emoji, will probably not work; page titles
|
||||||
> are handled, without affecting what would happen to a `rootpage` that starts
|
> treat `[:alnum:]` and `^[:alnum:]` differently.)
|
||||||
> with `./`; so I'm confused about what the bug was, and what you are fixing?
|
|
||||||
>
|
>
|
||||||
> I've added tests to `t/git-cgi.t` which demonstrate
|
> In future bug reports it would be useful if you could provide a minimal
|
||||||
> [a blog form for a `rootpage` named `writable/blog` working correctly](http://source.ikiwiki.branchable.com/?p=source.git;a=commitdiff;h=9c0694b14c0c8ed0dee4ff4ed57f689919707cd7;hp=a10d86bbaebee2d6a30b66b4366d3f0247264678)
|
> example or test, perhaps on the [[sandbox]] on this wiki or as a unit
|
||||||
> (which passes), and
|
> test in `t/*.t` in the ikiwiki source code, that demonstrates this bug
|
||||||
> [a `rootpage` named `writable/¬blog` not working correctly](http://source.ikiwiki.branchable.com/?p=source.git;a=commitdiff;h=2bd72cd0e01b8bb433b368e11ff9db779a21ccef;hp=9c0694b14c0c8ed0dee4ff4ed57f689919707cd7)
|
> and would be fixed by the patch. If you've found multiple bugs, a
|
||||||
> (which fails, and is marked as *TODO*).
|
> separate example or test for each one would be easiest to deal with.
|
||||||
> The patch above doesn't seem to make the second new test pass.
|
|
||||||
>
|
>
|
||||||
> You can run all the tests with:
|
> You can run all the tests with:
|
||||||
>
|
>
|
||||||
|
|
22
t/git-cgi.t
22
t/git-cgi.t
|
@ -1,7 +1,9 @@
|
||||||
#!/usr/bin/perl
|
#!/usr/bin/perl
|
||||||
|
use utf8;
|
||||||
use warnings;
|
use warnings;
|
||||||
use strict;
|
use strict;
|
||||||
|
|
||||||
|
use Encode;
|
||||||
use Test::More;
|
use Test::More;
|
||||||
|
|
||||||
BEGIN {
|
BEGIN {
|
||||||
|
@ -133,7 +135,7 @@ sub run_cgi {
|
||||||
} keys(%envvars);
|
} keys(%envvars);
|
||||||
});
|
});
|
||||||
|
|
||||||
return $out;
|
return decode_utf8($out);
|
||||||
}
|
}
|
||||||
|
|
||||||
sub run_git {
|
sub run_git {
|
||||||
|
@ -169,6 +171,8 @@ sub test {
|
||||||
'[[!inline pages="writable/blog/*" actions=yes rootpage=writable/blog postform=yes show=0]]');
|
'[[!inline pages="writable/blog/*" actions=yes rootpage=writable/blog postform=yes show=0]]');
|
||||||
write_old_file('doc/writable/__172__blog.mdwn', 't/tmp/in',
|
write_old_file('doc/writable/__172__blog.mdwn', 't/tmp/in',
|
||||||
'[[!inline pages="writable/¬blog/*" actions=yes rootpage="writable/¬blog" postform=yes show=0]]');
|
'[[!inline pages="writable/¬blog/*" actions=yes rootpage="writable/¬blog" postform=yes show=0]]');
|
||||||
|
write_old_file('doc/writable/中文.mdwn', 't/tmp/in',
|
||||||
|
'[[!inline pages="writable/中文/*" actions=yes rootpage="writable/中文" postform=yes show=0]]');
|
||||||
|
|
||||||
unless ($installed) {
|
unless ($installed) {
|
||||||
ok(! system(qw(cp -pRL doc/wikiicons t/tmp/in/doc/)));
|
ok(! system(qw(cp -pRL doc/wikiicons t/tmp/in/doc/)));
|
||||||
|
@ -332,24 +336,20 @@ sub test {
|
||||||
);
|
);
|
||||||
like($content, qr{<option selected="selected" value="writable/blog/hello">writable/blog/hello</option>});
|
like($content, qr{<option selected="selected" value="writable/blog/hello">writable/blog/hello</option>});
|
||||||
|
|
||||||
# This attempts to reproduce the bug from
|
# Regression test for a bug in which we couldn't use an
|
||||||
# doc/bugs/About___37__2F_problem, in which you can't make new posts
|
# alphanumeric, but non-ASCII, root page.
|
||||||
# to a blog with a non-ASCII rootpage.
|
$content = readfile('t/tmp/out/writable/中文/index.html');
|
||||||
$content = readfile('t/tmp/out/writable/__172__blog/index.html');
|
like($content, qr{<input type="hidden" name="from" value="writable/中文"});
|
||||||
like($content, qr{<input type="hidden" name="from" value="writable/¬blog"});
|
|
||||||
TODO: {
|
|
||||||
local $TODO = 'doc/bugs/About___37__2F_problem';
|
|
||||||
$content = run_cgi(method => 'get',
|
$content = run_cgi(method => 'get',
|
||||||
params => {
|
params => {
|
||||||
do => 'blog',
|
do => 'blog',
|
||||||
from => 'writable/¬blog',
|
from => 'writable/中文',
|
||||||
subpage => '1',
|
subpage => '1',
|
||||||
title => 'hello',
|
title => 'hello',
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
like($content, qr{<option selected="selected" value="writable/¬blog/hello">writable/¬blog/hello</option>});
|
like($content, qr{<option selected="selected" value="writable/中文/hello">writable/中文/hello</option>});
|
||||||
unlike($content, qr{Error: bad page name});
|
unlike($content, qr{Error: bad page name});
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
test();
|
test();
|
||||||
|
|
Loading…
Reference in New Issue