1<?php 2 3namespace dokuwiki\tpl\mikio\test; 4 5use dokuwiki\template\mikio\mikio; 6use DokuWikiTest; 7 8/** 9 * General tests for the mikio template 10 * 11 * @group tpl_mikio 12 * @group plugins 13 */ 14class general_tpl_mikio_test extends DokuWikiTest 15{ 16 17 /** 18 * Simple test to make sure the template.info.txt is in correct format 19 */ 20 public function test_templateinfo() 21 { 22 $file = __DIR__ . '/../template.info.txt'; 23 $this->assertFileExists($file); 24 25 $info = confToHash($file); 26 27 $this->assertArrayHasKey('base', $info); 28 $this->assertArrayHasKey('author', $info); 29 $this->assertArrayHasKey('email', $info); 30 $this->assertArrayHasKey('date', $info); 31 $this->assertArrayHasKey('name', $info); 32 $this->assertArrayHasKey('desc', $info); 33 $this->assertArrayHasKey('url', $info); 34 35 $this->assertEquals('mikio', $info['base']); 36 $this->assertRegExp('/^https?:\/\//', $info['url']); 37 $this->assertTrue(mail_isvalid($info['email'])); 38 $this->assertRegExp('/^\d\d\d\d-\d\d-\d\d$/', $info['date']); 39 $this->assertTrue(false !== strtotime($info['date'])); 40 } 41 42 /** 43 * Test to ensure that every conf['...'] entry in conf/default.php has a corresponding meta['...'] entry in 44 * conf/metadata.php. 45 */ 46 public function test_tpl_conf_and_meta_exists(): void 47 { 48 global $conf, $meta; 49 50 $conf_existing_keys = []; 51 if(!is_null($conf)) { 52 $conf_existing_keys = array_keys($conf); 53 } 54 55 $conf_file = __DIR__ . '/../conf/default.php'; 56 57 if (file_exists($conf_file)) { 58 include $conf_file; 59 } 60 61 $meta_existing_keys = []; 62 if(!is_null($meta)) { 63 $meta_existing_keys = array_keys($meta); 64 } 65 66 $meta_file = __DIR__ . '/../conf/metadata.php'; 67 68 if (file_exists($meta_file)) { 69 include $meta_file; 70 } 71 72 $this->assertEquals( 73 gettype($conf), 74 gettype($meta), 75 'Both conf/default.php and conf/metadata.php have to exist and contain the same keys.' 76 ); 77 78 if (!is_null($conf) && !is_null($meta)) { 79 foreach ($conf as $key => $value) { 80 if(in_array($key, $conf_existing_keys, true)) { 81 continue; 82 } 83 84 $this->assertArrayHasKey( 85 $key, 86 $meta, 87 'Key $meta[\'' . $key . '\'] missing in conf/metadata.php' 88 ); 89 } 90 91 foreach ($meta as $key => $value) { 92 if(in_array($key, $meta_existing_keys, true)) { 93 continue; 94 } 95 96 $this->assertArrayHasKey( 97 $key, 98 $conf, 99 'Key $conf[\'' . $key . '\'] missing in conf/default.php' 100 ); 101 } 102 } 103 } 104 105 /** 106 * Test to ensure that every conf['...'] entry in conf/default.php has a corresponding lang['...'] entry in 107 * lang/../setting.php. 108 */ 109 public function test_tpl_lang_settings_conf_exists(): void 110 { 111 global $conf, $lang; 112 113 $conf_existing_keys = []; 114 if(!is_null($conf)) { 115 $conf_existing_keys = array_keys($conf); 116 } 117 118 $conf_file = __DIR__ . '/../conf/default.php'; 119 120 $this->assertFileExists( 121 $conf_file, 122 'conf/default.php has to exist.' 123 ); 124 125 include $conf_file; 126 127 if (!is_null($conf)) { 128 $lang_dir = __DIR__ . '/../lang/'; 129 $lang_dir_codes = scandir($lang_dir); 130 131 $lang_orig_keys = array_keys($lang); 132 133 foreach ($lang_dir_codes as $lang_code) { 134 if($lang_code !== '.' && $lang_code !== '..' && is_dir($lang_dir . $lang_code)) { 135 $lang_file_path = $lang_dir . $lang_code . '/settings.php'; 136 $this->assertFileExists( 137 $lang_file_path, 138 'lang/' . $lang_code . '/lang.php has to exist.' 139 ); 140 141 include $lang_file_path; 142 143 foreach ($conf as $key => $value) { 144 if(in_array($key, $conf_existing_keys, true)) { 145 continue; 146 } 147 148 $this->assertArrayHasKey( 149 $key, 150 $lang, 151 'Key $lang[\'' . $key . '\'] missing in lang/' . $lang_code . '/lang.php' 152 ); 153 } 154 155 foreach(array_keys($lang) as $lang_key) { 156 if(in_array($lang_key, $lang_orig_keys, true)) { 157 continue; 158 } 159 160 unset($lang[$lang_key]); 161 } 162 } 163 } 164 } 165 } 166 167 /** 168 * Test to ensure that every lang['...'] entry in lang/../lang.php has a corresponding lang['...'] entry in 169 * lang/en/lang.php. 170 */ 171 public function test_tpl_lang_exists_in_non_en_lang(): void 172 { 173 global $lang; 174 175 $lang_dir = __DIR__ . '/../lang/'; 176 177 $lang_existing_keys = []; 178 if(!is_null($lang)) { 179 $lang_existing_keys = array_keys($lang); 180 } 181 182 $lang_en_file = $lang_dir . 'en/lang.php'; 183 184 $this->assertFileExists( 185 $lang_en_file, 186 'lang/en/lang.php has to exist.' 187 ); 188 189 include $lang_en_file; 190 191 $lang_en_keys = array_diff(array_keys($lang), $lang_existing_keys); 192 foreach($lang_en_keys as $lang_key) { 193 unset($lang[$lang_key]); 194 } 195 196 $lang_dir_codes = scandir($lang_dir); 197 198 foreach ($lang_dir_codes as $lang_code) { 199 if($lang_code !== '.' && $lang_code !== '..' && $lang_code !== 'en' && is_dir($lang_dir . $lang_code)) { 200 $lang_file_path = $lang_dir . $lang_code . '/lang.php'; 201 $this->assertFileExists( 202 $lang_file_path, 203 'lang/' . $lang_code . '/lang.php has to exist.' 204 ); 205 206 include $lang_file_path; 207 208 foreach ($lang_en_keys as $key) { 209 $this->assertArrayHasKey( 210 $key, 211 $lang, 212 'Key $lang[\'' . $key . '\'] missing in lang/' . $lang_code . '/lang.php' 213 ); 214 215 unset($lang[$key]); 216 } 217 } 218 } 219 } 220 221 /** 222 * Test to ensure that the mikio class is a singleton 223 */ 224 public function test_singleton_pattern() 225 { 226 $instance1 = mikio::getInstance(); 227 $instance2 = mikio::getInstance(); 228 $this->assertSame($instance1, $instance2); 229 } 230} 231