3 class media_searchlist_test
extends DokuWikiTest
{
6 * @var string namespace used for testing
8 protected $upload_ns = 'media_searchlist_test';
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');
22 * Called for each test
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) {
55 @media_printfile
(array(), 0, '');
61 * Build search result header as in media_searchlist() with $fullscreen = false
63 * @param $query search query
64 * @param $ns namespece where we search
68 protected function media_searchlist_header($query, $ns) {
71 $header = '<h1 id="media__ns">'.sprintf($lang['searchmedia_in'],hsc($ns).':*').'</h1>'.NL
;
73 media_searchform($ns,$query);
74 $header .= ob_get_contents();
81 * Wrap around media_printfile: return the result.
86 protected function media_printfile($item) {
88 media_printfile($item,$item['perm'],'',true);
89 $out = ob_get_contents();
96 * Wrap around media_searchlist: return the result
97 * Reset media_printfile static variables afterwards
103 protected function media_searchlist($query, $ns) {
105 media_searchlist($query, $ns);
106 $out = ob_get_contents();
109 //reset media_printfile static variables
110 $this->reset_media_printfile();
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) {
122 foreach ($rel_ids as $rel_id){
123 $file = mediaFN($this->upload_ns
. ':' . $rel_id);
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);
135 $info['isimg'] = false;
137 $info['hash'] = md5(io_readFile(mediaFN($info['id']),false));
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)
153 protected function media_searchlist_except($rel_ids, $query, $ns) {
154 //build a search result header
155 $expect = $this->media_searchlist_header($query, $ns);
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();
169 public function test_noglobbing(){
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(){
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(){
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(){
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(){
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(){
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(){
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(){
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(){
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);