replaced deprecated utf8 functions
[dokuwiki.git] / _test / tests / inc / media_searchlist.test.php
blobb881ccc9555894c30420bc4ad6168c530f6383c2
1 <?php
3 class media_searchlist_test extends DokuWikiTest {
5 /**
6 * @var string namespace used for testing
7 */
8 protected $upload_ns = 'media_searchlist_test';
10 /**
11 * Save the file
13 * @param $name name of saving file
14 * @param $copy file used as a content of uploaded file
16 protected function save($name, $copy) {
17 $media_id = $this->upload_ns.':'.$name;
18 media_save(array('name' => $copy), $media_id, true, AUTH_UPLOAD, 'copy');
21 /**
22 * Called for each test
24 * @throws Exception
26 function setUp() {
27 //create some files to search
28 $png = mediaFN('wiki:kind_zu_katze.png');
29 $ogv = mediaFN('wiki:kind_zu_katze.ogv');
30 $webm = mediaFN('wiki:kind_zu_katze.webm');
32 $this->save('a.png', $png);
33 $this->save('aa.png', $png);
34 $this->save('ab.png', $png);
36 $this->save('a.ogv', $ogv);
37 $this->save('aa.ogv', $ogv);
38 $this->save('ab.ogv', $ogv);
40 $this->save('a:a.png', $png);
41 $this->save('b:a.png', $png);
43 $this->save('0.webm', $webm);
48 * Reset media_printfile static variable $twibble to stat state
50 protected function reset_media_printfile() {
51 $reflect = new ReflectionFunction('media_printfile');
52 $static = $reflect->getStaticVariables();
53 if ($static['twibble'] == -1) {
54 ob_start();
55 @media_printfile(array(), 0, '');
56 ob_end_clean();
60 /**
61 * Build search result header as in media_searchlist() with $fullscreen = false
63 * @param $query search query
64 * @param $ns namespece where we search
66 * @return string
68 protected function media_searchlist_header($query, $ns) {
69 global $lang;
71 $header = '<h1 id="media__ns">'.sprintf($lang['searchmedia_in'],hsc($ns).':*').'</h1>'.NL;
72 ob_start();
73 media_searchform($ns,$query);
74 $header .= ob_get_contents();
75 ob_end_clean();
77 return $header;
80 /**
81 * Wrap around media_printfile: return the result.
83 * @param $item
84 * @return string
86 protected function media_printfile($item) {
87 ob_start();
88 media_printfile($item,$item['perm'],'',true);
89 $out = ob_get_contents();
90 ob_end_clean();
92 return $out;
95 /**
96 * Wrap around media_searchlist: return the result
97 * Reset media_printfile static variables afterwards
99 * @param $query
100 * @param $ns
101 * @return string
103 protected function media_searchlist($query, $ns) {
104 ob_start();
105 media_searchlist($query, $ns);
106 $out = ob_get_contents();
107 ob_end_clean();
109 //reset media_printfile static variables
110 $this->reset_media_printfile();
112 return $out;
117 * @param array[string] $rel_ids media ids relative to $this->upload_ns
118 * @return array $items as required by media_printfile
120 protected function create_media_items($rel_ids) {
121 $items = array();
122 foreach ($rel_ids as $rel_id){
123 $file = mediaFN($this->upload_ns . ':' . $rel_id);
124 $info = array();
125 $info['id'] = $this->upload_ns . ':' . $rel_id;
126 $info['perm'] = auth_quickaclcheck(getNS($info['id']).':*');
127 $info['file'] = \dokuwiki\Utf8\PhpString::basename($file);
128 $info['size'] = filesize($file);
129 $info['mtime'] = filemtime($file);
130 $info['writable'] = is_writable($file);
131 if(preg_match("/\.(jpe?g|gif|png)$/",$file)){
132 $info['isimg'] = true;
133 $info['meta'] = new JpegMeta($file);
134 }else{
135 $info['isimg'] = false;
137 $info['hash'] = md5(io_readFile(mediaFN($info['id']),false));
139 $items[] = $info;
141 return $items;
145 * Output result as in 'media_searchlist' but use an arbitrary media IDs list instead of actual searching
146 * Reset media_printfile static variables afterwards
148 * @param array[string] $rel_ids media ids relative to $this->upload_ns
149 * @param string $query actual seqrch query (used for filling search filed input)
150 * @param string $ns
151 * @return string
153 protected function media_searchlist_except($rel_ids, $query, $ns) {
154 //build a search result header
155 $expect = $this->media_searchlist_header($query, $ns);
157 //get the items list
158 $items = $this->create_media_items($rel_ids);
159 foreach ($items as $item) {
160 $expect .= $this->media_printfile($item);
163 //reset media_printfile static variables
164 $this->reset_media_printfile();
166 return $expect;
169 public function test_noglobbing(){
170 $query = 'a.png';
171 $ns = $this->upload_ns;
173 $result = $this->media_searchlist($query, $ns);
174 $expect = $this->media_searchlist_except(array('a:a.png', 'b:a.png', 'a.png', 'aa.png'), $query, $ns);
176 $this->assertEquals($expect, $result);
179 public function test_globbing_asterisk(){
180 $query = 'a*.png';
181 $ns = $this->upload_ns;
183 $result = $this->media_searchlist($query, $ns);
184 $expect = $this->media_searchlist_except(array('a:a.png', 'b:a.png', 'a.png', 'aa.png', 'ab.png'), $query, $ns);
186 $this->assertEquals($expect, $result);
189 public function test_globbing_find_by_ext(){
190 $query = '*.ogv';
191 $ns = $this->upload_ns;
193 $result = $this->media_searchlist($query, $ns);
194 $expect = $this->media_searchlist_except(array('a.ogv', 'aa.ogv', 'ab.ogv'), $query, $ns);
196 $this->assertEquals($expect, $result);
199 public function test_globbing_question_mark(){
200 $query = 'a?.png';
201 $ns = $this->upload_ns;
203 $result = $this->media_searchlist($query, $ns);
204 $expect = $this->media_searchlist_except(array('aa.png', 'ab.png'), $query, $ns);
206 $this->assertEquals($expect, $result);
209 public function test_globbing_question_mark_and_asterisk(){
210 $query = 'a?.*';
211 $ns = $this->upload_ns;
213 $result = $this->media_searchlist($query, $ns);
214 $expect = $this->media_searchlist_except(array('aa.ogv', 'aa.png', 'ab.ogv', 'ab.png'), $query, $ns);
216 $this->assertEquals($expect, $result);
219 public function test_globbing_question_mark_on_the_begining(){
220 $query = '?.png';
221 $ns = $this->upload_ns;
223 $result = $this->media_searchlist($query, $ns);
224 $expect = $this->media_searchlist_except(array('a:a.png', 'b:a.png', 'a.png'), $query, $ns);
226 $this->assertEquals($expect, $result);
229 public function test_globbing_two_question_marks_on_the_begining(){
230 $query = '??.png';
231 $ns = $this->upload_ns;
233 $result = $this->media_searchlist($query, $ns);
234 $expect = $this->media_searchlist_except(array('aa.png', 'ab.png'), $query, $ns);
236 $this->assertEquals($expect, $result);
239 public function test_globbing_two_letter_file_names(){
240 $query = '??.*';
241 $ns = $this->upload_ns;
243 $result = $this->media_searchlist($query, $ns);
244 $expect = $this->media_searchlist_except(array('aa.ogv', 'aa.png', 'ab.ogv', 'ab.png'), $query, $ns);
246 $this->assertEquals($expect, $result);
249 public function test_zero_search(){
250 $query = '0';
251 $ns = $this->upload_ns;
253 $result = $this->media_searchlist($query, $ns);
254 $expect = $this->media_searchlist_except(array('0.webm'), $query, $ns);
256 $this->assertEquals($expect, $result);