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