1<?php 2 3namespace Sabre\CardDAV; 4 5require_once 'Sabre/CardDAV/AbstractPluginTest.php'; 6 7class ValidateFilterTest extends AbstractPluginTest { 8 9 /** 10 * @dataProvider data 11 */ 12 function testFilter($input, $filters, $test, $result, $message = null) { 13 14 if ($result) { 15 $this->assertTrue($this->plugin->validateFilters($input, $filters, $test), $message); 16 } else { 17 $this->assertFalse($this->plugin->validateFilters($input, $filters, $test), $message); 18 } 19 20 } 21 22 function data() { 23 24 $body1 = <<<HELLO 25BEGIN:VCARD 26VERSION:3.0 27ORG:Company; 28TITLE:Title 29TEL;TYPE=IPHONE;TYPE=pref:(222) 22 22 22 30TEL;TYPE=HOME:(33) 333 66 66 31TEL;TYPE=WORK:(444) 44 44 44 32TEL;TYPE=MAIN:(55) 555 55 55 33ITEM4.TEL:(111) 11 11 11 34ITEM5.TEL:(6) 66 66 66 66 35ITEM6.TEL:(77) 777 77 77 36UID:3151DE6A-BC35-4612-B340-B53A034A2B27 37ITEM1.EMAIL:1111@111.com 38ITEM2.EMAIL:bbbbb@bbbb.com 39ITEM3.EMAIL:ccccc@ccccc.com 40FN:First Last 41N:Last;First;Middle;Dr 42BDAY:1985-07-20 43ADR;TYPE=HOME:;;Street;City;;3556;Montenegro 44ADR;TYPE=WORK:;;Street\\nStreet2;Harkema;;35444;Australia 45URL:http://google.com 46END:VCARD 47HELLO; 48 49 // Check if TITLE is defined 50 $filter1 = 51 array('name' => 'title', 'is-not-defined' => false, 'param-filters' => array(), 'text-matches' => array()); 52 53 // Check if FOO is defined 54 $filter2 = 55 array('name' => 'foo', 'is-not-defined' => false, 'param-filters' => array(), 'text-matches' => array()); 56 57 // Check if TITLE is not defined 58 $filter3 = 59 array('name' => 'title', 'is-not-defined' => true, 'param-filters' => array(), 'text-matches' => array()); 60 61 // Check if FOO is not defined 62 $filter4 = 63 array('name' => 'foo', 'is-not-defined' => true, 'param-filters' => array(), 'text-matches' => array()); 64 65 // Check if TEL[TYPE] is defined 66 $filter5 = 67 array( 68 'name' => 'tel', 69 'is-not-defined' => false, 70 'test' => 'anyof', 71 'param-filters' => array( 72 array( 73 'name' => 'type', 74 'is-not-defined' => false, 75 'text-match' => null 76 ), 77 ), 78 'text-matches' => array(), 79 ); 80 81 // Check if TEL[FOO] is defined 82 $filter6 = $filter5; 83 $filter6['param-filters'][0]['name'] = 'FOO'; 84 85 // Check if TEL[TYPE] is not defined 86 $filter7 = $filter5; 87 $filter7['param-filters'][0]['is-not-defined'] = true; 88 89 // Check if TEL[FOO] is not defined 90 $filter8 = $filter5; 91 $filter8['param-filters'][0]['name'] = 'FOO'; 92 $filter8['param-filters'][0]['is-not-defined'] = true; 93 94 // Combining property filters 95 $filter9 = $filter5; 96 $filter9['param-filters'][] = $filter6['param-filters'][0]; 97 98 $filter10 = $filter5; 99 $filter10['param-filters'][] = $filter6['param-filters'][0]; 100 $filter10['test'] = 'allof'; 101 102 // Check if URL contains 'google' 103 $filter11 = 104 array( 105 'name' => 'url', 106 'is-not-defined' => false, 107 'test' => 'anyof', 108 'param-filters' => array(), 109 'text-matches' => array( 110 array( 111 'match-type' => 'contains', 112 'value' => 'google', 113 'negate-condition' => false, 114 'collation' => 'i;octet', 115 ), 116 ), 117 ); 118 119 // Check if URL contains 'bing' 120 $filter12 = $filter11; 121 $filter12['text-matches'][0]['value'] = 'bing'; 122 123 // Check if URL does not contain 'google' 124 $filter13 = $filter11; 125 $filter13['text-matches'][0]['negate-condition'] = true; 126 127 // Check if URL does not contain 'bing' 128 $filter14 = $filter11; 129 $filter14['text-matches'][0]['value'] = 'bing'; 130 $filter14['text-matches'][0]['negate-condition'] = true; 131 132 // Param filter with text 133 $filter15 = $filter5; 134 $filter15['param-filters'][0]['text-match'] = array( 135 'match-type' => 'contains', 136 'value' => 'WORK', 137 'collation' => 'i;octet', 138 'negate-condition' => false, 139 ); 140 $filter16 = $filter15; 141 $filter16['param-filters'][0]['text-match']['negate-condition'] = true; 142 143 144 // Param filter + text filter 145 $filter17 = $filter5; 146 $filter17['test'] = 'anyof'; 147 $filter17['text-matches'][] = array( 148 'match-type' => 'contains', 149 'value' => '444', 150 'collation' => 'i;octet', 151 'negate-condition' => false, 152 ); 153 154 $filter18 = $filter17; 155 $filter18['text-matches'][0]['negate-condition'] = true; 156 157 $filter18['test'] = 'allof'; 158 159 return array( 160 161 // Basic filters 162 array($body1, array($filter1), 'anyof',true), 163 array($body1, array($filter2), 'anyof',false), 164 array($body1, array($filter3), 'anyof',false), 165 array($body1, array($filter4), 'anyof',true), 166 167 // Combinations 168 array($body1, array($filter1, $filter2), 'anyof',true), 169 array($body1, array($filter1, $filter2), 'allof',false), 170 array($body1, array($filter1, $filter4), 'anyof',true), 171 array($body1, array($filter1, $filter4), 'allof',true), 172 array($body1, array($filter2, $filter3), 'anyof',false), 173 array($body1, array($filter2, $filter3), 'allof',false), 174 175 // Basic parameters 176 array($body1, array($filter5), 'anyof', true, 'TEL;TYPE is defined, so this should return true'), 177 array($body1, array($filter6), 'anyof', false, 'TEL;FOO is not defined, so this should return false'), 178 179 array($body1, array($filter7), 'anyof', false, 'TEL;TYPE is defined, so this should return false'), 180 array($body1, array($filter8), 'anyof', true, 'TEL;TYPE is not defined, so this should return true'), 181 182 // Combined parameters 183 array($body1, array($filter9), 'anyof', true), 184 array($body1, array($filter10), 'anyof', false), 185 186 // Text-filters 187 array($body1, array($filter11), 'anyof', true), 188 array($body1, array($filter12), 'anyof', false), 189 array($body1, array($filter13), 'anyof', false), 190 array($body1, array($filter14), 'anyof', true), 191 192 // Param filter with text-match 193 array($body1, array($filter15), 'anyof', true), 194 array($body1, array($filter16), 'anyof', false), 195 196 // Param filter + text filter 197 array($body1, array($filter17), 'anyof', true), 198 array($body1, array($filter18), 'anyof', false), 199 array($body1, array($filter18), 'anyof', false), 200 ); 201 202 } 203 204} 205