1<?php
2
3class common_dokupref_test extends DokuWikiTest {
4
5    function test_get_default() {
6        $this->assertEquals('nil', get_doku_pref('foo', 'nil'));
7    }
8
9    function test_set() {
10        set_doku_pref('foo1', 'bar1');
11        set_doku_pref('foo2', 'bar2');
12        $this->assertEquals('bar1', get_doku_pref('foo1', 'nil'));
13        $this->assertEquals('bar2', get_doku_pref('foo2', 'nil'));
14    }
15
16    function test_set_encode() {
17        set_doku_pref('foo#1', 'bar#1');
18        set_doku_pref('foo#2', 'bar2');
19        $this->assertEquals('bar#1', get_doku_pref('foo#1', 'nil'));
20        $this->assertEquals('bar2', get_doku_pref('foo#2', 'nil'));
21
22        set_doku_pref('foo#2', 'bar#2');
23        $this->assertEquals('bar#1', get_doku_pref('foo#1', 'nil'));
24        $this->assertEquals('bar#2', get_doku_pref('foo#2', 'nil'));
25    }
26
27    // mitigate bug in #2721
28    function test_duplicate_entries() {
29        $_COOKIE['DOKU_PREFS'] = 'foo1#bar1#foo2#bar1#foo2#bar2';
30        $this->assertEquals('bar2', get_doku_pref('foo2', 'nil'));
31
32        set_doku_pref('foo2', 'new2');
33        $this->assertEquals('bar1', get_doku_pref('foo1', 'nil'));
34        $this->assertEquals('new2', get_doku_pref('foo2', 'nil'));
35        $this->assertEquals('foo1#bar1#foo2#new2', $_COOKIE['DOKU_PREFS'],
36                            'cookie should not have duplicate entries');
37    }
38
39    // This is a definition from #1129
40    function test_empty() {
41        set_doku_pref('foo', '');
42        $this->assertSame('', get_doku_pref('foo', 'nil'));
43
44        set_doku_pref('foo', 0);
45        $this->assertSame('0', get_doku_pref('foo', 'nil'));
46
47        set_doku_pref('foo', null);
48        $this->assertSame('', get_doku_pref('foo', 'nil'));
49
50        set_doku_pref('foo', false);
51        $this->assertSame('nil', get_doku_pref('foo', 'nil'));
52    }
53
54    // #2721
55    function test_set_empty_string() {
56        set_doku_pref('foo1', 'bar1');
57        set_doku_pref('foo2', 'bar1');
58
59        set_doku_pref('foo2', '');
60        $this->assertEquals('bar1', get_doku_pref('foo1', 'nil'));
61        $this->assertEquals('', get_doku_pref('foo2', 'nil'));
62
63        set_doku_pref('foo2', 'bar2');
64        $this->assertEquals('bar1', get_doku_pref('foo1', 'nil'));
65        $this->assertEquals('bar2', get_doku_pref('foo2', 'nil'));
66        $this->assertEquals('foo1#bar1#foo2#bar2', $_COOKIE['DOKU_PREFS'],
67                            'cookie should not have duplicate entries');
68    }
69
70    // #2721
71    function test_set_delete() {
72        set_doku_pref('foo1', 'bar1');
73        set_doku_pref('foo2', 'bar2');
74
75        set_doku_pref('foo1', false);
76        $this->assertEquals('nil', get_doku_pref('foo1', 'nil'));
77        $this->assertEquals('bar2', get_doku_pref('foo2', 'nil'));
78
79        set_doku_pref('foo2', false);
80        $this->assertEquals('nil', get_doku_pref('foo1', 'nil'));
81        $this->assertEquals('nil', get_doku_pref('foo2', 'nil'));
82    }
83
84}
85
86//Setup VIM: ex: et ts=4 :
87