xref: /template/mikio/_test/general.test.php (revision e287fb59b7567c8b149dc9a8dd3765ccd5abc1f5)
1206668c3SJames Collins<?php
2206668c3SJames Collins
3206668c3SJames Collinsnamespace dokuwiki\tpl\mikio\test;
4206668c3SJames Collins
5206668c3SJames Collinsuse dokuwiki\template\mikio\mikio;
6206668c3SJames Collinsuse DokuWikiTest;
7206668c3SJames Collins
8206668c3SJames Collins/**
9*e287fb59SJames Collins * General tests for the mikio template
10206668c3SJames Collins *
11*e287fb59SJames Collins * @group tpl_mikio
12206668c3SJames Collins * @group plugins
13206668c3SJames Collins */
14206668c3SJames Collinsclass general_tpl_mikio_test extends DokuWikiTest
15206668c3SJames Collins{
16206668c3SJames Collins
17206668c3SJames Collins    /**
18206668c3SJames Collins     * Simple test to make sure the template.info.txt is in correct format
19206668c3SJames Collins     */
20206668c3SJames Collins    public function test_templateinfo()
21206668c3SJames Collins    {
22206668c3SJames Collins        $file = __DIR__ . '/../template.info.txt';
23206668c3SJames Collins        $this->assertFileExists($file);
24206668c3SJames Collins
25206668c3SJames Collins        $info = confToHash($file);
26206668c3SJames Collins
27206668c3SJames Collins        $this->assertArrayHasKey('base', $info);
28206668c3SJames Collins        $this->assertArrayHasKey('author', $info);
29206668c3SJames Collins        $this->assertArrayHasKey('email', $info);
30206668c3SJames Collins        $this->assertArrayHasKey('date', $info);
31206668c3SJames Collins        $this->assertArrayHasKey('name', $info);
32206668c3SJames Collins        $this->assertArrayHasKey('desc', $info);
33206668c3SJames Collins        $this->assertArrayHasKey('url', $info);
34206668c3SJames Collins
35206668c3SJames Collins        $this->assertEquals('mikio', $info['base']);
36206668c3SJames Collins        $this->assertRegExp('/^https?:\/\//', $info['url']);
37206668c3SJames Collins        $this->assertTrue(mail_isvalid($info['email']));
38206668c3SJames Collins        $this->assertRegExp('/^\d\d\d\d-\d\d-\d\d$/', $info['date']);
39206668c3SJames Collins        $this->assertTrue(false !== strtotime($info['date']));
40206668c3SJames Collins    }
41206668c3SJames Collins
42206668c3SJames Collins    /**
43206668c3SJames Collins     * Test to ensure that every conf['...'] entry in conf/default.php has a corresponding meta['...'] entry in
44206668c3SJames Collins     * conf/metadata.php.
45206668c3SJames Collins     */
46*e287fb59SJames Collins    public function test_tpl_conf_and_meta_exists(): void
47206668c3SJames Collins    {
48*e287fb59SJames Collins        global $conf, $meta;
49*e287fb59SJames Collins
50*e287fb59SJames Collins        $conf_existing_keys = [];
51*e287fb59SJames Collins        if(!is_null($conf)) {
52*e287fb59SJames Collins            $conf_existing_keys = array_keys($conf);
53*e287fb59SJames Collins        }
54*e287fb59SJames Collins
55206668c3SJames Collins        $conf_file = __DIR__ . '/../conf/default.php';
56206668c3SJames Collins
57206668c3SJames Collins        if (file_exists($conf_file)) {
58206668c3SJames Collins            include $conf_file;
59206668c3SJames Collins        }
60206668c3SJames Collins
61*e287fb59SJames Collins        $meta_existing_keys = [];
62*e287fb59SJames Collins        if(!is_null($meta)) {
63*e287fb59SJames Collins            $meta_existing_keys = array_keys($meta);
64*e287fb59SJames Collins        }
65*e287fb59SJames Collins
66206668c3SJames Collins        $meta_file = __DIR__ . '/../conf/metadata.php';
67206668c3SJames Collins
68206668c3SJames Collins        if (file_exists($meta_file)) {
69206668c3SJames Collins            include $meta_file;
70206668c3SJames Collins        }
71206668c3SJames Collins
72206668c3SJames Collins        $this->assertEquals(
73206668c3SJames Collins            gettype($conf),
74206668c3SJames Collins            gettype($meta),
75206668c3SJames Collins            'Both conf/default.php and conf/metadata.php have to exist and contain the same keys.'
76206668c3SJames Collins        );
77206668c3SJames Collins
78*e287fb59SJames Collins        if (!is_null($conf) && !is_null($meta)) {
79206668c3SJames Collins            foreach ($conf as $key => $value) {
80*e287fb59SJames Collins                if(in_array($key, $conf_existing_keys, true)) {
81*e287fb59SJames Collins                    continue;
82*e287fb59SJames Collins                }
83*e287fb59SJames Collins
84206668c3SJames Collins                $this->assertArrayHasKey(
85206668c3SJames Collins                    $key,
86206668c3SJames Collins                    $meta,
87206668c3SJames Collins                    'Key $meta[\'' . $key . '\'] missing in conf/metadata.php'
88206668c3SJames Collins                );
89206668c3SJames Collins            }
90206668c3SJames Collins
91206668c3SJames Collins            foreach ($meta as $key => $value) {
92*e287fb59SJames Collins                if(in_array($key, $meta_existing_keys, true)) {
93*e287fb59SJames Collins                    continue;
94*e287fb59SJames Collins                }
95*e287fb59SJames Collins
96206668c3SJames Collins                $this->assertArrayHasKey(
97206668c3SJames Collins                    $key,
98206668c3SJames Collins                    $conf,
99206668c3SJames Collins                    'Key $conf[\'' . $key . '\'] missing in conf/default.php'
100206668c3SJames Collins                );
101206668c3SJames Collins            }
102206668c3SJames Collins        }
103206668c3SJames Collins    }
104206668c3SJames Collins
105*e287fb59SJames Collins    /**
106*e287fb59SJames Collins     * Test to ensure that every conf['...'] entry in conf/default.php has a corresponding lang['...'] entry in
107*e287fb59SJames Collins     * lang/../setting.php.
108*e287fb59SJames Collins     */
109*e287fb59SJames Collins    public function test_tpl_lang_settings_conf_exists(): void
110*e287fb59SJames Collins    {
111*e287fb59SJames Collins        global $conf, $lang;
112*e287fb59SJames Collins
113*e287fb59SJames Collins        $conf_existing_keys = [];
114*e287fb59SJames Collins        if(!is_null($conf)) {
115*e287fb59SJames Collins            $conf_existing_keys = array_keys($conf);
116*e287fb59SJames Collins        }
117*e287fb59SJames Collins
118*e287fb59SJames Collins        $conf_file = __DIR__ . '/../conf/default.php';
119*e287fb59SJames Collins
120*e287fb59SJames Collins        $this->assertFileExists(
121*e287fb59SJames Collins            $conf_file,
122*e287fb59SJames Collins            'conf/default.php has to exist.'
123*e287fb59SJames Collins        );
124*e287fb59SJames Collins
125*e287fb59SJames Collins        include $conf_file;
126*e287fb59SJames Collins
127*e287fb59SJames Collins        if (!is_null($conf)) {
128*e287fb59SJames Collins            $lang_dir = __DIR__ . '/../lang/';
129*e287fb59SJames Collins            $lang_dir_codes = scandir($lang_dir);
130*e287fb59SJames Collins
131*e287fb59SJames Collins            $lang_orig_keys = array_keys($lang);
132*e287fb59SJames Collins
133*e287fb59SJames Collins            foreach ($lang_dir_codes as $lang_code) {
134*e287fb59SJames Collins                if($lang_code !== '.' && $lang_code !== '..' && is_dir($lang_dir . $lang_code)) {
135*e287fb59SJames Collins                    $lang_file_path = $lang_dir . $lang_code . '/settings.php';
136*e287fb59SJames Collins                    $this->assertFileExists(
137*e287fb59SJames Collins                        $lang_file_path,
138*e287fb59SJames Collins                        'lang/' . $lang_code . '/lang.php has to exist.'
139*e287fb59SJames Collins                    );
140*e287fb59SJames Collins
141*e287fb59SJames Collins                    include $lang_file_path;
142*e287fb59SJames Collins
143*e287fb59SJames Collins                    foreach ($conf as $key => $value) {
144*e287fb59SJames Collins                        if(in_array($key, $conf_existing_keys, true)) {
145*e287fb59SJames Collins                            continue;
146*e287fb59SJames Collins                        }
147*e287fb59SJames Collins
148*e287fb59SJames Collins                        $this->assertArrayHasKey(
149*e287fb59SJames Collins                            $key,
150*e287fb59SJames Collins                            $lang,
151*e287fb59SJames Collins                            'Key $lang[\'' . $key . '\'] missing in lang/' . $lang_code . '/lang.php'
152*e287fb59SJames Collins                        );
153*e287fb59SJames Collins                    }
154*e287fb59SJames Collins
155*e287fb59SJames Collins                    foreach(array_keys($lang) as $lang_key) {
156*e287fb59SJames Collins                        if(in_array($lang_key, $lang_orig_keys, true)) {
157*e287fb59SJames Collins                            continue;
158*e287fb59SJames Collins                        }
159*e287fb59SJames Collins
160*e287fb59SJames Collins                        unset($lang[$lang_key]);
161*e287fb59SJames Collins                    }
162*e287fb59SJames Collins                }
163*e287fb59SJames Collins            }
164*e287fb59SJames Collins        }
165*e287fb59SJames Collins    }
166*e287fb59SJames Collins
167*e287fb59SJames Collins    /**
168*e287fb59SJames Collins     * Test to ensure that every lang['...'] entry in lang/../lang.php has a corresponding lang['...'] entry in
169*e287fb59SJames Collins     * lang/en/lang.php.
170*e287fb59SJames Collins     */
171*e287fb59SJames Collins    public function test_tpl_lang_exists_in_non_en_lang(): void
172*e287fb59SJames Collins    {
173*e287fb59SJames Collins        global $lang;
174*e287fb59SJames Collins
175*e287fb59SJames Collins        $lang_dir = __DIR__ . '/../lang/';
176*e287fb59SJames Collins
177*e287fb59SJames Collins        $lang_existing_keys = [];
178*e287fb59SJames Collins        if(!is_null($lang)) {
179*e287fb59SJames Collins            $lang_existing_keys = array_keys($lang);
180*e287fb59SJames Collins        }
181*e287fb59SJames Collins
182*e287fb59SJames Collins        $lang_en_file = $lang_dir . 'en/lang.php';
183*e287fb59SJames Collins
184*e287fb59SJames Collins        $this->assertFileExists(
185*e287fb59SJames Collins            $lang_en_file,
186*e287fb59SJames Collins            'lang/en/lang.php has to exist.'
187*e287fb59SJames Collins        );
188*e287fb59SJames Collins
189*e287fb59SJames Collins        include $lang_en_file;
190*e287fb59SJames Collins
191*e287fb59SJames Collins        $lang_en_keys = array_diff(array_keys($lang), $lang_existing_keys);
192*e287fb59SJames Collins        foreach($lang_en_keys as $lang_key) {
193*e287fb59SJames Collins            unset($lang[$lang_key]);
194*e287fb59SJames Collins        }
195*e287fb59SJames Collins
196*e287fb59SJames Collins        $lang_dir_codes = scandir($lang_dir);
197*e287fb59SJames Collins
198*e287fb59SJames Collins        foreach ($lang_dir_codes as $lang_code) {
199*e287fb59SJames Collins            if($lang_code !== '.' && $lang_code !== '..' && $lang_code !== 'en' && is_dir($lang_dir . $lang_code)) {
200*e287fb59SJames Collins                $lang_file_path = $lang_dir . $lang_code . '/lang.php';
201*e287fb59SJames Collins                $this->assertFileExists(
202*e287fb59SJames Collins                    $lang_file_path,
203*e287fb59SJames Collins                    'lang/' . $lang_code . '/lang.php has to exist.'
204*e287fb59SJames Collins                );
205*e287fb59SJames Collins
206*e287fb59SJames Collins                include $lang_file_path;
207*e287fb59SJames Collins
208*e287fb59SJames Collins                foreach ($lang_en_keys as $key) {
209*e287fb59SJames Collins                    $this->assertArrayHasKey(
210*e287fb59SJames Collins                        $key,
211*e287fb59SJames Collins                        $lang,
212*e287fb59SJames Collins                        'Key $lang[\'' . $key . '\'] missing in lang/' . $lang_code . '/lang.php'
213*e287fb59SJames Collins                    );
214*e287fb59SJames Collins
215*e287fb59SJames Collins                    unset($lang[$key]);
216*e287fb59SJames Collins                }
217*e287fb59SJames Collins            }
218*e287fb59SJames Collins        }
219*e287fb59SJames Collins    }
220*e287fb59SJames Collins
221*e287fb59SJames Collins    /**
222*e287fb59SJames Collins     * Test to ensure that the mikio class is a singleton
223*e287fb59SJames Collins     */
224*e287fb59SJames Collins    public function test_singleton_pattern()
225206668c3SJames Collins    {
226206668c3SJames Collins        $instance1 = mikio::getInstance();
227206668c3SJames Collins        $instance2 = mikio::getInstance();
228206668c3SJames Collins        $this->assertSame($instance1, $instance2);
229206668c3SJames Collins    }
230206668c3SJames Collins}
231