1 /* 2 * Copyright (C) 2007 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package tests.api.org.xml.sax.helpers; 18 19 import junit.framework.TestCase; 20 21 import org.xml.sax.Attributes; 22 import org.xml.sax.helpers.AttributesImpl; 23 24 public class AttributesImplTest extends TestCase { 25 26 private AttributesImpl empty = new AttributesImpl(); 27 28 private AttributesImpl multi = new AttributesImpl(); 29 30 @Override 31 public void setUp() { 32 multi.addAttribute("http://some.uri", "foo", "ns1:foo", 33 "string", "abc"); 34 multi.addAttribute("http://some.uri", "bar", "ns1:bar", 35 "string", "xyz"); 36 multi.addAttribute("http://some.other.uri", "answer", "ns2:answer", 37 "int", "42"); 38 39 multi.addAttribute("", "gabbaHey", "", "string", "1-2-3-4"); 40 multi.addAttribute("", "", "gabba:hey", "string", "1-2-3-4"); 41 } 42 43 public void testAttributesImpl() { 44 assertEquals(0, empty.getLength()); 45 assertEquals(5, multi.getLength()); 46 } 47 48 public void testAttributesImplAttributes() { 49 // Ordinary case 50 AttributesImpl ai = new AttributesImpl(empty); 51 assertEquals(0, ai.getLength()); 52 53 // Another ordinary case 54 ai = new AttributesImpl(multi); 55 assertEquals(5, ai.getLength()); 56 57 // No Attributes 58 try { 59 ai = new AttributesImpl(null); 60 assertEquals(0, ai.getLength()); 61 fail("NullPointerException expected"); 62 } catch (NullPointerException e) { 63 // Expected 64 } 65 } 66 67 public void testGetLength() { 68 AttributesImpl ai = new AttributesImpl(empty); 69 assertEquals(0, ai.getLength()); 70 71 ai = new AttributesImpl(multi); 72 assertEquals(5, ai.getLength()); 73 74 for (int i = 4; i >= 0; i--) { 75 ai.removeAttribute(i); 76 assertEquals(i, ai.getLength()); 77 } 78 } 79 80 public void testGetURI() { 81 // Ordinary cases 82 assertEquals("http://some.uri", multi.getURI(0)); 83 assertEquals("http://some.uri", multi.getURI(1)); 84 assertEquals("http://some.other.uri", multi.getURI(2)); 85 assertEquals("", multi.getURI(3)); 86 assertEquals("", multi.getURI(4)); 87 88 // Out of range 89 assertEquals(null, multi.getURI(-1)); 90 assertEquals(null, multi.getURI(5)); 91 } 92 93 public void testGetLocalName() { 94 // Ordinary cases 95 assertEquals("foo", multi.getLocalName(0)); 96 assertEquals("bar", multi.getLocalName(1)); 97 assertEquals("answer", multi.getLocalName(2)); 98 assertEquals("gabbaHey", multi.getLocalName(3)); 99 assertEquals("", multi.getLocalName(4)); 100 101 // Out of range 102 assertEquals(null, multi.getLocalName(-1)); 103 assertEquals(null, multi.getLocalName(5)); 104 } 105 106 public void testGetQName() { 107 // Ordinary cases 108 assertEquals("ns1:foo", multi.getQName(0)); 109 assertEquals("ns1:bar", multi.getQName(1)); 110 assertEquals("ns2:answer", multi.getQName(2)); 111 assertEquals("", multi.getQName(3)); 112 assertEquals("gabba:hey", multi.getQName(4)); 113 114 // Out of range 115 assertEquals(null, multi.getQName(-1)); 116 assertEquals(null, multi.getQName(5)); 117 } 118 119 public void testGetTypeInt() { 120 // Ordinary cases 121 assertEquals("string", multi.getType(0)); 122 assertEquals("string", multi.getType(1)); 123 assertEquals("int", multi.getType(2)); 124 assertEquals("string", multi.getType(3)); 125 assertEquals("string", multi.getType(4)); 126 127 // Out of range 128 assertEquals(null, multi.getType(-1)); 129 assertEquals(null, multi.getType(5)); 130 } 131 132 public void testGetValueInt() { 133 // Ordinary cases 134 assertEquals("abc", multi.getValue(0)); 135 assertEquals("xyz", multi.getValue(1)); 136 assertEquals("42", multi.getValue(2)); 137 assertEquals("1-2-3-4", multi.getValue(3)); 138 assertEquals("1-2-3-4", multi.getValue(4)); 139 140 // Out of range 141 assertEquals(null, multi.getValue(-1)); 142 assertEquals(null, multi.getValue(5)); 143 } 144 145 public void testGetIndexStringString() { 146 // Ordinary cases 147 assertEquals(0, multi.getIndex("http://some.uri", "foo")); 148 assertEquals(1, multi.getIndex("http://some.uri", "bar")); 149 assertEquals(2, multi.getIndex("http://some.other.uri", "answer")); 150 151 // Not found 152 assertEquals(-1, multi.getIndex("john", "doe")); 153 154 // null cases 155 assertEquals(-1, multi.getIndex("http://some.uri", null)); 156 assertEquals(-1, multi.getIndex(null, "foo")); 157 } 158 159 public void testGetIndexString() { 160 // Ordinary cases 161 assertEquals(0, multi.getIndex("ns1:foo")); 162 assertEquals(1, multi.getIndex("ns1:bar")); 163 assertEquals(2, multi.getIndex("ns2:answer")); 164 assertEquals(4, multi.getIndex("gabba:hey")); 165 166 // Not found 167 assertEquals(-1, multi.getIndex("john:doe")); 168 169 // null case 170 assertEquals(-1, multi.getIndex(null)); 171 } 172 173 public void testGetTypeStringString() { 174 // Ordinary cases 175 assertEquals("string", multi.getType("http://some.uri", "foo")); 176 assertEquals("string", multi.getType("http://some.uri", "bar")); 177 assertEquals("int", multi.getType("http://some.other.uri", "answer")); 178 179 // Not found 180 assertEquals(null, multi.getType("john", "doe")); 181 182 // null cases 183 assertEquals(null, multi.getType("http://some.uri", null)); 184 assertEquals(null, multi.getType(null, "foo")); 185 } 186 187 public void testGetTypeString() { 188 // Ordinary cases 189 assertEquals("string", multi.getType("ns1:foo")); 190 assertEquals("string", multi.getType("ns1:bar")); 191 assertEquals("int", multi.getType("ns2:answer")); 192 assertEquals("string", multi.getType("gabba:hey")); 193 194 // Not found 195 assertEquals(null, multi.getType("john:doe")); 196 197 // null case 198 assertEquals(null, multi.getType(null)); 199 } 200 201 public void testGetValueStringString() { 202 // Ordinary cases 203 assertEquals("abc", multi.getValue("http://some.uri", "foo")); 204 assertEquals("xyz", multi.getValue("http://some.uri", "bar")); 205 assertEquals("42", multi.getValue("http://some.other.uri", "answer")); 206 207 // Not found 208 assertEquals(null, multi.getValue("john", "doe")); 209 210 // null cases 211 assertEquals(null, multi.getValue("http://some.uri", null)); 212 assertEquals(null, multi.getValue(null, "foo")); 213 } 214 215 public void testGetValueString() { 216 // Ordinary cases 217 assertEquals("abc", multi.getValue("ns1:foo")); 218 assertEquals("xyz", multi.getValue("ns1:bar")); 219 assertEquals("42", multi.getValue("ns2:answer")); 220 assertEquals("1-2-3-4", multi.getValue("gabba:hey")); 221 222 // Not found 223 assertEquals(null, multi.getValue("john:doe")); 224 225 // null case 226 assertEquals(null, multi.getValue(null)); 227 } 228 229 public void testClear() { 230 assertEquals(5, multi.getLength()); 231 multi.clear(); 232 assertEquals(0, multi.getLength()); 233 } 234 235 public void testSetAttributes() { 236 // Ordinary cases 237 AttributesImpl attrs = new AttributesImpl(); 238 attrs.addAttribute("http://yet.another.uri", "doe", "john:doe", 239 "boolean", "false"); 240 241 attrs.setAttributes(empty); 242 assertEquals(0, attrs.getLength()); 243 244 attrs.setAttributes(multi); 245 assertEquals(multi.getLength(), attrs.getLength()); 246 247 for (int i = 0; i < multi.getLength(); i++) { 248 assertEquals(multi.getURI(i), attrs.getURI(i)); 249 assertEquals(multi.getLocalName(i), attrs.getLocalName(i)); 250 assertEquals(multi.getQName(i), attrs.getQName(i)); 251 assertEquals(multi.getType(i), attrs.getType(i)); 252 assertEquals(multi.getValue(i), attrs.getValue(i)); 253 } 254 255 // null case 256 try { 257 attrs.setAttributes(null); 258 fail("NullPointerException expected"); 259 } catch (NullPointerException e) { 260 // Expected, but must be empty now 261 assertEquals(0, attrs.getLength()); 262 } 263 } 264 265 public void testAddAttribute() { 266 // Ordinary case 267 multi.addAttribute("http://yet.another.uri", "doe", "john:doe", 268 "boolean", "false"); 269 270 assertEquals("http://yet.another.uri", multi.getURI(5)); 271 assertEquals("doe", multi.getLocalName(5)); 272 assertEquals("john:doe", multi.getQName(5)); 273 assertEquals("boolean", multi.getType(5)); 274 assertEquals("false", multi.getValue(5)); 275 276 // Duplicate case 277 multi.addAttribute("http://yet.another.uri", "doe", "john:doe", 278 "boolean", "false"); 279 280 assertEquals("http://yet.another.uri", multi.getURI(6)); 281 assertEquals("doe", multi.getLocalName(6)); 282 assertEquals("john:doe", multi.getQName(6)); 283 assertEquals("boolean", multi.getType(6)); 284 assertEquals("false", multi.getValue(6)); 285 286 // null case 287 multi.addAttribute(null, null, null, null, null); 288 assertEquals(null, multi.getURI(7)); 289 assertEquals(null, multi.getLocalName(7)); 290 assertEquals(null, multi.getQName(7)); 291 assertEquals(null, multi.getType(7)); 292 assertEquals(null, multi.getValue(7)); 293 } 294 295 public void testSetAttribute() { 296 // Ordinary case 297 multi.setAttribute(0, "http://yet.another.uri", "doe", "john:doe", 298 "boolean", "false"); 299 assertEquals("http://yet.another.uri", multi.getURI(0)); 300 assertEquals("doe", multi.getLocalName(0)); 301 assertEquals("john:doe", multi.getQName(0)); 302 assertEquals("boolean", multi.getType(0)); 303 assertEquals("false", multi.getValue(0)); 304 305 // null case 306 multi.setAttribute(1, null, null, null, null, null); 307 assertEquals(null, multi.getURI(1)); 308 assertEquals(null, multi.getLocalName(1)); 309 assertEquals(null, multi.getQName(1)); 310 assertEquals(null, multi.getType(1)); 311 assertEquals(null, multi.getValue(1)); 312 313 // Out of range 314 try { 315 multi.setAttribute(-1, "http://yet.another.uri", "doe", "john:doe", 316 "boolean", "false"); 317 fail("ArrayIndexOutOfBoundsException expected"); 318 } catch (ArrayIndexOutOfBoundsException e) { 319 // Expected 320 } 321 322 try { 323 multi.setAttribute(5, "http://yet.another.uri", "doe", "john:doe", 324 "boolean", "false"); 325 fail("ArrayIndexOutOfBoundsException expected"); 326 } catch (ArrayIndexOutOfBoundsException e) { 327 // Expected 328 } 329 } 330 331 public void testRemoveAttribute() { 332 // Ordinary case 333 multi.removeAttribute(0); 334 assertEquals("http://some.uri", multi.getURI(0)); 335 assertEquals("bar", multi.getLocalName(0)); 336 assertEquals("ns1:bar", multi.getQName(0)); 337 assertEquals("string", multi.getType(0)); 338 assertEquals("xyz", multi.getValue(0)); 339 340 // Out of range 341 try { 342 multi.removeAttribute(-1); 343 fail("ArrayIndexOutOfBoundsException expected"); 344 } catch (ArrayIndexOutOfBoundsException e) { 345 // Expected 346 } 347 348 try { 349 multi.removeAttribute(4); 350 fail("ArrayIndexOutOfBoundsException expected"); 351 } catch (ArrayIndexOutOfBoundsException e) { 352 // Expected 353 } 354 } 355 356 public void testSetURI() { 357 // Ordinary case 358 multi.setURI(0, "http://yet.another.uri"); 359 assertEquals("http://yet.another.uri", multi.getURI(0)); 360 361 // null case 362 multi.setURI(1, null); 363 assertEquals(null, multi.getURI(1)); 364 365 // Out of range 366 try { 367 multi.setURI(-1, "http://yet.another.uri"); 368 fail("ArrayIndexOutOfBoundsException expected"); 369 } catch (ArrayIndexOutOfBoundsException e) { 370 // Expected 371 } 372 373 try { 374 multi.setURI(5, "http://yet.another.uri"); 375 fail("ArrayIndexOutOfBoundsException expected"); 376 } catch (ArrayIndexOutOfBoundsException e) { 377 // Expected 378 } 379 } 380 381 public void testSetLocalName() { 382 // Ordinary case 383 multi.setLocalName(0, "john"); 384 assertEquals("john", multi.getLocalName(0)); 385 386 // null case 387 multi.setLocalName(1, null); 388 assertEquals(null, multi.getLocalName(1)); 389 390 // Out of range 391 try { 392 multi.setLocalName(-1, "john"); 393 fail("ArrayIndexOutOfBoundsException expected"); 394 } catch (ArrayIndexOutOfBoundsException e) { 395 // Expected 396 } 397 398 try { 399 multi.setLocalName(5, "john"); 400 fail("ArrayIndexOutOfBoundsException expected"); 401 } catch (ArrayIndexOutOfBoundsException e) { 402 // Expected 403 } 404 } 405 406 public void testSetQName() { 407 // Ordinary case 408 multi.setQName(0, "john:doe"); 409 assertEquals("john:doe", multi.getQName(0)); 410 411 // null case 412 multi.setQName(1, null); 413 assertEquals(null, multi.getQName(1)); 414 415 // Out of range 416 try { 417 multi.setQName(-1, "john:doe"); 418 fail("ArrayIndexOutOfBoundsException expected"); 419 } catch (ArrayIndexOutOfBoundsException e) { 420 // Expected 421 } 422 423 try { 424 multi.setQName(5, "john:doe"); 425 fail("ArrayIndexOutOfBoundsException expected"); 426 } catch (ArrayIndexOutOfBoundsException e) { 427 // Expected 428 } 429 } 430 431 public void testSetType() { 432 // Ordinary case 433 multi.setType(0, "float"); 434 assertEquals("float", multi.getType(0)); 435 436 // null case 437 multi.setType(1, null); 438 assertEquals(null, multi.getType(1)); 439 440 // Out of range 441 try { 442 multi.setType(-1, "float"); 443 fail("ArrayIndexOutOfBoundsException expected"); 444 } catch (ArrayIndexOutOfBoundsException e) { 445 // Expected 446 } 447 448 try { 449 multi.setType(5, "float"); 450 fail("ArrayIndexOutOfBoundsException expected"); 451 } catch (ArrayIndexOutOfBoundsException e) { 452 // Expected 453 } 454 } 455 456 public void testSetValue() { 457 // Ordinary case 458 multi.setValue(0, "too much"); 459 assertEquals("too much", multi.getValue(0)); 460 461 // null case 462 multi.setValue(1, null); 463 assertEquals(null, multi.getValue(1)); 464 465 // Out of range 466 try { 467 multi.setValue(-1, "too much"); 468 fail("ArrayIndexOutOfBoundsException expected"); 469 } catch (ArrayIndexOutOfBoundsException e) { 470 // Expected 471 } 472 473 try { 474 multi.setValue(5, "too much"); 475 fail("ArrayIndexOutOfBoundsException expected"); 476 } catch (ArrayIndexOutOfBoundsException e) { 477 // Expected 478 } 479 } 480 481 } 482