1 /* 2 * Copyright (C) 2008 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 org.apache.harmony.prefs.tests.java.util.prefs; 18 19 import dalvik.annotation.TestLevel; 20 import dalvik.annotation.TestTargetClass; 21 import dalvik.annotation.TestTargetNew; 22 import dalvik.annotation.TestTargets; 23 import junit.framework.TestCase; 24 25 import java.io.ByteArrayInputStream; 26 import java.io.ByteArrayOutputStream; 27 import java.io.IOException; 28 import java.util.prefs.AbstractPreferences; 29 import java.util.prefs.BackingStoreException; 30 import java.util.prefs.InvalidPreferencesFormatException; 31 import java.util.prefs.NodeChangeEvent; 32 import java.util.prefs.NodeChangeListener; 33 import java.util.prefs.PreferenceChangeEvent; 34 import java.util.prefs.PreferenceChangeListener; 35 import java.util.prefs.Preferences; 36 37 @TestTargetClass(AbstractPreferences.class) 38 public class AbstractPreferencesTest extends TestCase { 39 40 AbstractPreferences pref; 41 42 static AbstractPreferences root; 43 44 static final String nodeName = "mock"; 45 46 static AbstractPreferences parent = null; 47 48 String oldUserHome = System.getProperty("user.home"); 49 String oldJavaHome = System.getProperty("java.home"); 50 51 protected void setUp() throws Exception { 52 super.setUp(); 53 54 root = (AbstractPreferences) Preferences.userRoot(); 55 parent = (AbstractPreferences) Preferences.userNodeForPackage(this.getClass()); 56 57 pref = (AbstractPreferences) parent.node(nodeName); 58 } 59 60 protected void tearDown() throws Exception { 61 super.tearDown(); 62 } 63 64 @TestTargetNew( 65 level = TestLevel.COMPLETE, 66 notes = "", 67 method = "toString", 68 args = {} 69 ) 70 public void testToString() { 71 assertTrue(pref.toString().contains(nodeName)); 72 } 73 74 @TestTargets({ 75 @TestTargetNew( 76 level = TestLevel.COMPLETE, 77 notes = "Tests putSpi indirectly", 78 method = "put", 79 args = {java.lang.String.class, java.lang.String.class} 80 ), 81 @TestTargetNew( 82 level = TestLevel.COMPLETE, 83 notes = "Tests putSpi indirectly", 84 method = "putSpi", 85 args = {java.lang.String.class, java.lang.String.class} 86 ) 87 }) 88 public void testPut() throws BackingStoreException { 89 pref.put("Value", "String"); 90 pref.flush(); 91 92 assertEquals("String", pref.get("Value", ":")); 93 94 try { 95 pref.put(null, "Exception"); 96 fail("NullPointerException expected"); 97 } catch (NullPointerException e) { 98 //expected 99 } 100 101 int i; 102 StringBuffer sb = new StringBuffer(); 103 104 for (i = 0; i < Preferences.MAX_KEY_LENGTH + 1; i++) { 105 sb.append('c'); 106 } 107 108 try { 109 pref.put(new String(sb), "Exception"); 110 fail("IllegalArgumentException expected"); 111 } catch (IllegalArgumentException e) { 112 //expected 113 } 114 115 sb = new StringBuffer(); 116 117 for (i = 0; i < Preferences.MAX_VALUE_LENGTH + 1; i++) { 118 sb.append('c'); 119 } 120 121 try { 122 pref.put("DoubleValue", new String(sb)); 123 fail("IllegalArgumentException expected"); 124 } catch (IllegalArgumentException e) { 125 //expected 126 } 127 128 pref.removeNode(); 129 130 try { 131 pref.put("DoubleValue", "Exception"); 132 fail("IllegalStateException expected"); 133 } catch (IllegalStateException e) { 134 //expected 135 } 136 } 137 138 @TestTargets({ 139 @TestTargetNew( 140 level = TestLevel.COMPLETE, 141 notes = "getSpi tested indirectly.", 142 method = "get", 143 args = {java.lang.String.class, java.lang.String.class} 144 ), 145 @TestTargetNew( 146 level = TestLevel.COMPLETE, 147 notes = "getSpi tested indirectly.", 148 method = "getSpi", 149 args = {java.lang.String.class} 150 ) 151 }) 152 public void testGet() throws BackingStoreException { 153 pref.put("Value", "String"); 154 pref.putDouble("DoubleValue", new Double(9.10938188e-31)); 155 pref.putBoolean("BoolValue", true); 156 pref.flush(); 157 158 assertEquals("String", pref.get("Value", ":")); 159 assertEquals("true", pref.get("BoolValue", ":")); 160 assertEquals("9.10938188E-31", pref.get("DoubleValue", null)); 161 162 try { 163 pref.get(null, "Exception"); 164 fail("NullPointerException expected"); 165 } catch (NullPointerException e) { 166 //expected 167 } 168 169 pref.removeNode(); 170 171 try { 172 pref.get("DoubleValue", "Exception"); 173 fail("IllegalStateException expected"); 174 } catch (IllegalStateException e) { 175 //expected 176 } 177 } 178 179 @TestTargets({ 180 @TestTargetNew( 181 level = TestLevel.COMPLETE, 182 notes = "Indirectly checks removeSpi", 183 method = "remove", 184 args = {java.lang.String.class} 185 ), 186 @TestTargetNew( 187 level = TestLevel.COMPLETE, 188 notes = "Indirectly checks removeSpi", 189 method = "removeSpi", 190 args = {java.lang.String.class} 191 ) 192 }) 193 public void testRemove() throws BackingStoreException { 194 String[] keyArray = new String[]{"Value", "DoubleValue", "LongValue", "IntValue"}; 195 pref.put(keyArray[0], "String"); 196 pref.putDouble(keyArray[1], new Double(9.10938188e-31)); 197 pref.putLong(keyArray[2], new Long(Long.MIN_VALUE)); 198 pref.putInt(keyArray[3], 299792458); 199 pref.node("New node"); 200 pref.flush(); 201 202 String[] str = pref.keys(); 203 assertEquals(keyArray.length, str.length); 204 for(int i = 0; i < keyArray.length; i++) { 205 pref.remove(keyArray[i]); 206 str = pref.keys(); 207 assertEquals(keyArray.length - i - 1, str.length); 208 } 209 assertEquals(1, pref.childrenNames().length); 210 pref.remove("New node"); 211 assertEquals(1, pref.childrenNames().length); 212 213 pref.removeNode(); 214 215 try { 216 pref.remove("New node"); 217 fail("IllegalStateException expected"); 218 } catch (IllegalStateException e) { 219 //expected 220 } 221 } 222 223 @TestTargetNew( 224 level = TestLevel.COMPLETE, 225 notes = "", 226 method = "clear", 227 args = {} 228 ) 229 public void testClear() throws BackingStoreException { 230 AbstractPreferences ap = (AbstractPreferences) pref.node("New node"); 231 pref.putInt("IntValue", 33); 232 pref.putBoolean("BoolValue", true); 233 pref.flush(); 234 assertTrue(pref.getBoolean("BoolValue", false)); 235 assertEquals(33, pref.getInt("IntValue", 22)); 236 assertEquals(1, pref.childrenNames().length); 237 pref.clear(); 238 assertFalse(pref.getBoolean("BoolValue", false)); 239 assertEquals(22, pref.getInt("IntValue", 22)); 240 assertEquals(1, pref.childrenNames().length); 241 242 pref.removeNode(); 243 244 try { 245 pref.clear(); 246 fail("IllegalStateException expected"); 247 } catch (IllegalStateException e) { 248 //expected 249 } 250 251 try { 252 ap.clear(); 253 fail("IllegalStateException expected"); 254 } catch (IllegalStateException e) { 255 //expected 256 } 257 } 258 259 @TestTargetNew( 260 level = TestLevel.COMPLETE, 261 notes = "", 262 method = "putInt", 263 args = {java.lang.String.class, int.class} 264 ) 265 public void testPutInt() throws BackingStoreException { 266 pref.putInt("IntValue", 299792458); 267 pref.flush(); 268 269 assertEquals(299792458, pref.getInt("IntValue", new Integer(1))); 270 271 try { 272 pref.putInt(null, new Integer(1)); 273 fail("NullPointerException expected"); 274 } catch (NullPointerException e) { 275 //expected 276 } 277 278 int i; 279 StringBuffer sb = new StringBuffer(); 280 281 for (i = 0; i < Preferences.MAX_KEY_LENGTH + 1; i++) { 282 sb.append('c'); 283 } 284 285 try { 286 pref.putInt(new String(sb), new Integer(1)); 287 fail("IllegalArgumentException expected"); 288 } catch (IllegalArgumentException e) { 289 //expected 290 } 291 292 pref.removeNode(); 293 294 try { 295 pref.putInt("IntValue", new Integer(1)); 296 fail("IllegalStateException expected"); 297 } catch (IllegalStateException e) { 298 //expected 299 } 300 } 301 302 @TestTargetNew( 303 level = TestLevel.COMPLETE, 304 notes = "", 305 method = "getInt", 306 args = {java.lang.String.class, int.class} 307 ) 308 public void testGetInt() throws BackingStoreException { 309 pref.put("Value", "String"); 310 pref.putDouble("DoubleValue", new Double(9.10938188e-31)); 311 pref.putLong("LongValue", new Long(Long.MIN_VALUE)); 312 pref.putInt("IntValue", 299792458); 313 pref.flush(); 314 315 assertEquals(1, pref.getInt("Value", new Integer(1))); 316 assertEquals(1, pref.getInt("LongValue", new Integer(1))); 317 assertEquals(1, pref.getInt("DoubleValue", new Integer(1))); 318 assertEquals(299792458, pref.getInt("IntValue", new Integer(1))); 319 320 try { 321 pref.getInt(null, new Integer(1)); 322 fail("NullPointerException expected"); 323 } catch (NullPointerException e) { 324 //expected 325 } 326 327 pref.removeNode(); 328 329 try { 330 pref.getInt("IntValue", new Integer(1)); 331 fail("IllegalStateException expected"); 332 } catch (IllegalStateException e) { 333 //expected 334 } 335 } 336 337 @TestTargetNew( 338 level = TestLevel.COMPLETE, 339 notes = "", 340 method = "putLong", 341 args = {java.lang.String.class, long.class} 342 ) 343 public void testPutLong() throws BackingStoreException { 344 pref.putLong("LongValue", new Long(299792458)); 345 pref.flush(); 346 347 assertEquals(299792458L, pref.getLong("LongValue", new Long(1))); 348 349 try { 350 pref.putLong(null, new Long(1)); 351 fail("NullPointerException expected"); 352 } catch (NullPointerException e) { 353 //expected 354 } 355 356 int i; 357 StringBuffer sb = new StringBuffer(); 358 359 for (i = 0; i < Preferences.MAX_KEY_LENGTH + 1; i++) { 360 sb.append('c'); 361 } 362 363 try { 364 pref.putLong(new String(sb), new Long(1)); 365 fail("IllegalArgumentException expected"); 366 } catch (IllegalArgumentException e) { 367 //expected 368 } 369 370 pref.removeNode(); 371 372 try { 373 pref.putLong("LongValue", new Long(1)); 374 fail("IllegalStateException expected"); 375 } catch (IllegalStateException e) { 376 //expected 377 } 378 } 379 380 @TestTargetNew( 381 level = TestLevel.COMPLETE, 382 notes = "", 383 method = "getLong", 384 args = {java.lang.String.class, long.class} 385 ) 386 public void testGetLong() throws BackingStoreException { 387 pref.put("Value", "String"); 388 pref.putDouble("DoubleValue", new Double(9.10938188e-31)); 389 pref.putLong("LongValue", new Long(Long.MIN_VALUE)); 390 pref.putInt("IntValue", 299792458); 391 pref.flush(); 392 393 assertEquals(1L, pref.getLong("Value", new Long(1))); 394 assertEquals(Long.MIN_VALUE, pref.getLong("LongValue", new Long(1))); 395 assertEquals(1L, pref.getLong("DoubleValue", new Long(1))); 396 assertEquals(299792458L, pref.getLong("IntValue", new Long(1))); 397 398 try { 399 pref.getLong(null, new Long(1)); 400 fail("NullPointerException expected"); 401 } catch (NullPointerException e) { 402 //expected 403 } 404 405 pref.removeNode(); 406 407 try { 408 pref.getLong("LongValue", new Long(1)); 409 fail("IllegalStateException expected"); 410 } catch (IllegalStateException e) { 411 //expected 412 } 413 } 414 415 @TestTargetNew( 416 level = TestLevel.COMPLETE, 417 notes = "", 418 method = "putBoolean", 419 args = {java.lang.String.class, boolean.class} 420 ) 421 public void testPutBoolean() throws BackingStoreException { 422 pref.putBoolean("BoolValue", true); 423 pref.flush(); 424 425 assertTrue(pref.getBoolean("BoolValue", false)); 426 427 try { 428 pref.putBoolean(null, true); 429 fail("NullPointerException expected"); 430 } catch (NullPointerException e) { 431 //expected 432 } 433 434 int i; 435 StringBuffer sb = new StringBuffer(); 436 437 for (i = 0; i < Preferences.MAX_KEY_LENGTH + 1; i++) { 438 sb.append('c'); 439 } 440 441 try { 442 pref.putBoolean(new String(sb), true); 443 fail("IllegalArgumentException expected"); 444 } catch (IllegalArgumentException e) { 445 //expected 446 } 447 448 pref.removeNode(); 449 450 try { 451 pref.putBoolean("DoubleValue", true); 452 fail("IllegalStateException expected"); 453 } catch (IllegalStateException e) { 454 //expected 455 } 456 } 457 458 @TestTargetNew( 459 level = TestLevel.COMPLETE, 460 notes = "", 461 method = "getBoolean", 462 args = {java.lang.String.class, boolean.class} 463 ) 464 public void testGetBoolean() throws BackingStoreException { 465 pref.put("Value", "String"); 466 pref.putDouble("DoubleValue", new Double(9.10938188e-31)); 467 pref.putBoolean("BoolValue", true); 468 pref.flush(); 469 470 assertFalse(pref.getBoolean("Value", false)); 471 assertTrue(pref.getBoolean("BoolValue", false)); 472 assertFalse(pref.getBoolean("DoubleValue", false)); 473 474 try { 475 pref.getBoolean(null, true); 476 fail("NullPointerException expected"); 477 } catch (NullPointerException e) { 478 //expected 479 } 480 481 pref.removeNode(); 482 483 try { 484 pref.getBoolean("DoubleValue", true); 485 fail("IllegalStateException expected"); 486 } catch (IllegalStateException e) { 487 //expected 488 } 489 } 490 491 @TestTargetNew( 492 level = TestLevel.COMPLETE, 493 notes = "", 494 method = "putFloat", 495 args = {java.lang.String.class, float.class} 496 ) 497 public void testPutFloat() throws BackingStoreException { 498 pref.putFloat("FloatValue", new Float(1.602e-19)); 499 pref.flush(); 500 501 assertEquals(new Float(1.602e-19), pref.getFloat("FloatValue", new Float(0.2))); 502 503 try { 504 pref.putFloat(null, new Float(0.1)); 505 fail("NullPointerException expected"); 506 } catch (NullPointerException e) { 507 //expected 508 } 509 510 int i; 511 StringBuffer sb = new StringBuffer(); 512 513 for (i = 0; i < Preferences.MAX_KEY_LENGTH + 1; i++) { 514 sb.append('c'); 515 } 516 517 try { 518 pref.putFloat(new String(sb), new Float(0.1)); 519 fail("IllegalArgumentException expected"); 520 } catch (IllegalArgumentException e) { 521 //expected 522 } 523 524 pref.removeNode(); 525 526 try { 527 pref.putFloat("FloatValue", new Float(0.1)); 528 fail("IllegalStateException expected"); 529 } catch (IllegalStateException e) { 530 //expected 531 } 532 } 533 534 @TestTargetNew( 535 level = TestLevel.COMPLETE, 536 notes = "", 537 method = "getFloat", 538 args = {java.lang.String.class, float.class} 539 ) 540 public void testGetFloat() throws BackingStoreException { 541 pref.put("Value", "String"); 542 pref.putDouble("DoubleValue", new Double(9.10938188e-31)); 543 pref.putFloat("FloatValue", new Float(-0.123)); 544 pref.putInt("IntValue", 299792458); 545 pref.flush(); 546 547 assertEquals(new Float(0.1), pref.getFloat("Value", new Float(0.1))); 548 assertEquals(new Float(-0.123), pref.getFloat("FloatValue", new Float(0.2))); 549 assertEquals(new Float(9.109382e-31), pref.getFloat("DoubleValue", new Float(2.14))); 550 assertEquals(new Float(2.99792448e8), pref.getFloat("IntValue", new Float(5))); 551 552 try { 553 pref.getFloat(null, new Float(0.1)); 554 fail("NullPointerException expected"); 555 } catch (NullPointerException e) { 556 //expected 557 } 558 559 pref.removeNode(); 560 561 try { 562 pref.getFloat("FloatValue", new Float(0.1)); 563 fail("IllegalStateException expected"); 564 } catch (IllegalStateException e) { 565 //expected 566 } 567 } 568 569 @TestTargetNew( 570 level = TestLevel.COMPLETE, 571 notes = "", 572 method = "putDouble", 573 args = {java.lang.String.class, double.class} 574 ) 575 public void testPutDouble() throws BackingStoreException { 576 pref.putDouble("DoubleValue", new Double(9.10938188e-31)); 577 pref.flush(); 578 579 assertEquals(new Double(9.10938188e-31), pref.getDouble("DoubleValue", new Double(2.14))); 580 581 try { 582 pref.putDouble(null, new Double(0.1)); 583 fail("NullPointerException expected"); 584 } catch (NullPointerException e) { 585 //expected 586 } 587 588 int i; 589 StringBuffer sb = new StringBuffer(); 590 591 for (i = 0; i < Preferences.MAX_KEY_LENGTH + 1; i++) { 592 sb.append('c'); 593 } 594 595 try { 596 pref.putDouble(new String(sb), new Double(0.1)); 597 fail("IllegalArgumentException expected"); 598 } catch (IllegalArgumentException e) { 599 //expected 600 } 601 602 pref.removeNode(); 603 604 try { 605 pref.putDouble("DoubleValue", new Double(0.1)); 606 fail("IllegalStateException expected"); 607 } catch (IllegalStateException e) { 608 //expected 609 } 610 } 611 612 @TestTargetNew( 613 level = TestLevel.COMPLETE, 614 notes = "", 615 method = "getDouble", 616 args = {java.lang.String.class, double.class} 617 ) 618 public void testGetDouble() throws BackingStoreException { 619 pref.put("Value", "String"); 620 pref.putDouble("DoubleValue", new Double(9.10938188e-31)); 621 pref.putBoolean("BoolValue", true); 622 pref.putInt("IntValue", 299792458); 623 pref.flush(); 624 625 assertEquals(new Double(0.1), pref.getDouble("Value", new Double(0.1))); 626 assertEquals(new Double(0.2), pref.getDouble("BoolValue", new Double(0.2))); 627 assertEquals(new Double(9.10938188e-31), pref.getDouble("DoubleValue", new Double(2.14))); 628 assertEquals(new Double(2.99792458e8), pref.getDouble("IntValue", new Double(5))); 629 630 try { 631 pref.getDouble(null, new Double(0.1)); 632 fail("NullPointerException expected"); 633 } catch (NullPointerException e) { 634 //expected 635 } 636 637 pref.removeNode(); 638 639 try { 640 pref.getDouble("DoubleValue", new Double(0.1)); 641 fail("IllegalStateException expected"); 642 } catch (IllegalStateException e) { 643 //expected 644 } 645 } 646 647 @TestTargetNew( 648 level = TestLevel.COMPLETE, 649 notes = "", 650 method = "putByteArray", 651 args = {java.lang.String.class, byte[].class} 652 ) 653 public void testPutByteArray() throws BackingStoreException { 654 byte[] bArray = new byte[]{1, 2, 3, 4, 5}; 655 byte[] array = null; 656 int i; 657 pref.putByteArray("Array", bArray); 658 pref.flush(); 659 660 array = pref.getByteArray("Array", null); 661 assertEquals(bArray.length, array.length); 662 for(i = 0; i < bArray.length; i++) { 663 assertEquals(bArray[i], array[i]); 664 } 665 666 try { 667 pref.putByteArray(null, bArray); 668 fail("NullPointerException expected"); 669 } catch (NullPointerException e) { 670 //expected 671 } 672 673 StringBuffer sb = new StringBuffer(); 674 675 for (i = 0; i < Preferences.MAX_KEY_LENGTH + 1; i++) { 676 sb.append('c'); 677 } 678 679 try { 680 pref.putByteArray(new String(sb), bArray); 681 fail("IllegalArgumentException expected"); 682 } catch (IllegalArgumentException e) { 683 //expected 684 } 685 686 bArray = new byte[Preferences.MAX_VALUE_LENGTH * 3 / 4 + 1]; 687 688 try { 689 pref.putByteArray("Big array", bArray); 690 fail("IllegalArgumentException expected"); 691 } catch (IllegalArgumentException e) { 692 //expected 693 } 694 695 pref.removeNode(); 696 697 try { 698 pref.putByteArray("Array", new byte[10]); 699 fail("IllegalStateException expected"); 700 } catch (IllegalStateException e) { 701 //expected 702 } 703 } 704 705 @TestTargetNew( 706 level = TestLevel.COMPLETE, 707 notes = "", 708 method = "getByteArray", 709 args = {java.lang.String.class, byte[].class} 710 ) 711 public void testGetByteArray() throws BackingStoreException { 712 byte[] bArray = new byte[]{1, 2, 3, 4, 5}; 713 byte[] tmp = new byte[]{5}; 714 byte[] array = null; 715 int i; 716 pref.put("Value", "String"); 717 pref.putDouble("DoubleValue", new Double(9.10938188e-31)); 718 pref.putByteArray("Array", bArray); 719 pref.flush(); 720 721 array = pref.getByteArray("Value", tmp); 722 assertEquals(tmp.length, array.length); 723 for(i = 0; i < tmp.length; i++) { 724 assertEquals(tmp[i], array[i]); 725 } 726 727 array = pref.getByteArray("DoubleValue", tmp); 728 assertEquals(tmp.length, array.length); 729 for(i = 0; i < tmp.length; i++) { 730 assertEquals(tmp[i], array[i]); 731 } 732 733 array = pref.getByteArray("Array", tmp); 734 assertEquals(bArray.length, array.length); 735 for(i = 0; i < bArray.length; i++) { 736 assertEquals(bArray[i], array[i]); 737 } 738 739 try { 740 pref.getByteArray(null, tmp); 741 fail("NullPointerException expected"); 742 } catch (NullPointerException e) { 743 //expected 744 } 745 746 pref.removeNode(); 747 748 try { 749 pref.getByteArray("Array", tmp); 750 fail("IllegalStateException expected"); 751 } catch (IllegalStateException e) { 752 //expected 753 } 754 } 755 756 @TestTargets({ 757 @TestTargetNew( 758 level = TestLevel.COMPLETE, 759 notes = "keysSpi tested indirectly", 760 method = "keys", 761 args = {} 762 ), 763 @TestTargetNew( 764 level = TestLevel.COMPLETE, 765 notes = "keysSpi tested indirectly", 766 method = "keysSpi", 767 args = {} 768 ) 769 }) 770 public void testKeys() throws BackingStoreException { 771 String[] keyArray = new String[]{"Value", "DoubleValue", "BoolValue", "IntValue"}; 772 String nodeStr = "New node"; 773 pref.node(nodeStr); 774 pref.put(keyArray[0], "String"); 775 pref.putDouble(keyArray[1], new Double(9.10938188e-31)); 776 pref.putBoolean(keyArray[2], true); 777 pref.putInt(keyArray[3], 299792458); 778 pref.flush(); 779 780 String[] str = pref.keys(); 781 assertEquals(keyArray.length, str.length); 782 for(int i = 0; i < str.length; i++) { 783 boolean flag = false; 784 for(int j = 0; j < keyArray.length; j++) { 785 if (str[i].compareTo(keyArray[j]) == 0) { 786 flag = true; 787 break; 788 } 789 } 790 assertTrue(str[i].compareTo(nodeStr) != 0); 791 assertTrue(flag); 792 } 793 794 pref.removeNode(); 795 796 try { 797 pref.keys(); 798 fail("IllegalStateException expected"); 799 } catch(IllegalStateException e) { 800 //expected 801 } 802 } 803 804 @TestTargets({ 805 @TestTargetNew( 806 level = TestLevel.COMPLETE, 807 notes = "BackingStoreException can not be checked. childrenNamesSpi checked indirectly.", 808 method = "childrenNames", 809 args = {} 810 ), 811 @TestTargetNew( 812 level = TestLevel.COMPLETE, 813 notes = "BackingStoreException can not be checked. childrenNamesSpi checked indirectly.", 814 method = "childrenNamesSpi", 815 args = {} 816 ) 817 }) 818 public void testChildrenNames() throws BackingStoreException { 819 AbstractPreferences first = (AbstractPreferences) pref.node("First node"); 820 AbstractPreferences second = (AbstractPreferences) pref.node("Second node"); 821 822 assertEquals(2, pref.childrenNames().length); 823 assertEquals(0, first.childrenNames().length); 824 assertEquals(0, second.childrenNames().length); 825 826 second.removeNode(); 827 828 try { 829 second.childrenNames(); 830 fail("IllegalStateException expected"); 831 } catch (IllegalStateException e) { 832 //expected 833 } 834 835 pref.removeNode(); 836 837 try { 838 first.childrenNames(); 839 fail("IllegalStateException expected"); 840 } catch (IllegalStateException e) { 841 //expected 842 } 843 } 844 845 @TestTargetNew( 846 level = TestLevel.PARTIAL_COMPLETE, 847 notes = "", 848 method = "nodeExists", 849 args = {String.class} 850 ) 851 public void test_nodeExists() throws BackingStoreException { 852 AbstractPreferences test = (AbstractPreferences) Preferences.userRoot() 853 .node("test"); 854 try { 855 test.nodeExists(null); 856 fail("should throw NullPointerException"); 857 } catch (NullPointerException e) { 858 // Expected 859 } 860 861 test.removeNode(); 862 try { 863 test.nodeExists(null); 864 fail("should throw NullPointerException"); 865 } catch (NullPointerException e) { 866 // Expected 867 } 868 } 869 870 @TestTargetNew( 871 level = TestLevel.COMPLETE, 872 notes = "", 873 method = "parent", 874 args = {} 875 ) 876 public void testParent() throws BackingStoreException { 877 AbstractPreferences node = (AbstractPreferences) pref.node("First node/sub node"); 878 879 assertTrue(node.parent().name().compareTo("First node") == 0); 880 881 pref.removeNode(); 882 883 try { 884 node.parent(); 885 fail("IllegalStateException expected"); 886 } catch (IllegalStateException e) { 887 //expected 888 } 889 } 890 891 @TestTargets({ 892 @TestTargetNew( 893 level = TestLevel.COMPLETE, 894 notes = "Indirecly checks childSpi", 895 method = "node", 896 args = {java.lang.String.class} 897 ), 898 @TestTargetNew( 899 level = TestLevel.COMPLETE, 900 notes = "Indirecly checks childSpi", 901 method = "childSpi", 902 args = {java.lang.String.class} 903 ) 904 }) 905 public void testNode() throws BackingStoreException { 906 AbstractPreferences first = (AbstractPreferences) pref.node("First node"); 907 AbstractPreferences second = (AbstractPreferences) pref.node("Second node"); 908 909 try { 910 first.node("blabla/"); 911 fail("IllegalArgumentException expected"); 912 } catch (IllegalArgumentException e) { 913 //expected 914 } 915 916 try { 917 first.node("///invalid"); 918 fail("IllegalArgumentException expected"); 919 } catch (IllegalArgumentException e) { 920 //expected 921 } 922 923 StringBuffer sb = new StringBuffer(); 924 925 for (int i = 0; i < Preferences.MAX_NAME_LENGTH; i++) { 926 sb.append('c'); 927 } 928 first.node(new String(sb)); 929 sb.append('c'); 930 931 try { 932 first.node(new String(sb)); 933 fail("IllegalArgumentException expected"); 934 } catch (IllegalArgumentException e) { 935 //expected 936 } 937 938 second.removeNode(); 939 940 try { 941 second.node(""); 942 fail("IllegalStateException expected"); 943 } catch (IllegalStateException e) { 944 //expected 945 } 946 pref.removeNode(); 947 try { 948 first.node(""); 949 fail("IllegalStateException expected"); 950 } catch (IllegalStateException e) { 951 //expected 952 } 953 } 954 955 @TestTargets({ 956 @TestTargetNew( 957 level = TestLevel.COMPLETE, 958 notes = "getChild tested indirectly", 959 method = "nodeExists", 960 args = {java.lang.String.class} 961 ), 962 @TestTargetNew( 963 level = TestLevel.COMPLETE, 964 notes = "getChild tested indirectly", 965 method = "getChild", 966 args = {java.lang.String.class} 967 ) 968 }) 969 public void testNodeExists() throws BackingStoreException { 970 AbstractPreferences ap1 = (AbstractPreferences) pref.node("First node"); 971 AbstractPreferences ap2 = (AbstractPreferences) pref.node("Second node"); 972 pref.putInt("IntegerValue", 33); 973 pref.putBoolean("BoolValue", true); 974 pref.flush(); 975 976 assertTrue(pref.nodeExists("First node")); 977 assertTrue(pref.nodeExists("Second node")); 978 assertFalse(pref.nodeExists("IntegerValue")); 979 assertFalse(pref.nodeExists("BoolValue")); 980 assertFalse(pref.nodeExists("Value")); 981 assertFalse(pref.nodeExists(nodeName)); 982 983 try { 984 pref.nodeExists("///invalid"); 985 fail("IllegalArgumentException expected"); 986 } catch (IllegalArgumentException e) { 987 //expected 988 } 989 990 pref.removeNode(); 991 992 try { 993 pref.nodeExists("Exception"); 994 fail("IllegalStateException expected"); 995 } catch (IllegalStateException e) { 996 //expected 997 } 998 } 999 1000 @TestTargets({ 1001 @TestTargetNew( 1002 level = TestLevel.COMPLETE, 1003 notes = "", 1004 method = "removeNode", 1005 args = {} 1006 ), 1007 @TestTargetNew( 1008 level = TestLevel.COMPLETE, 1009 notes = "", 1010 method = "removeNodeSpi", 1011 args = {} 1012 ) 1013 }) 1014 public void testRemoveNode() throws BackingStoreException { 1015 String[] nodeArray = new String[]{"First node", "Second node", "Last node"}; 1016 int i; 1017 pref.put("Key", "String"); 1018 for (i = 0; i < nodeArray.length; i++) { 1019 pref.node(nodeArray[i]); 1020 } 1021 pref.flush(); 1022 1023 String[] str = pref.childrenNames(); 1024 assertEquals(nodeArray.length, str.length); 1025 for(i = 0; i < nodeArray.length; i++) { 1026 pref.node(nodeArray[i]).removeNode(); 1027 str = pref.childrenNames(); 1028 assertEquals(nodeArray.length - i - 1, str.length); 1029 } 1030 assertEquals(1, pref.keys().length); 1031 pref.node("Key").removeNode(); 1032 assertEquals(1, pref.keys().length); 1033 1034 pref.removeNode(); 1035 1036 try { 1037 pref.removeNode(); 1038 fail("IllegalStateException expected"); 1039 } catch (IllegalStateException e) { 1040 //expected 1041 } 1042 1043 try { 1044 root.removeNode(); 1045 fail("UnsupportedOperationException expected"); 1046 } catch (UnsupportedOperationException e) { 1047 //expected 1048 } 1049 } 1050 1051 @TestTargetNew( 1052 level = TestLevel.COMPLETE, 1053 notes = "", 1054 method = "name", 1055 args = {} 1056 ) 1057 public void testName() { 1058 AbstractPreferences first = (AbstractPreferences) pref.node("First node"); 1059 AbstractPreferences second = (AbstractPreferences) pref.node("Second node/sub node"); 1060 1061 assertTrue(first.name().compareTo("First node") == 0); 1062 assertFalse(first.name().compareTo("Second node") == 0); 1063 assertTrue(second.name().compareTo("sub node") == 0); 1064 } 1065 1066 @TestTargetNew( 1067 level = TestLevel.COMPLETE, 1068 notes = "", 1069 method = "absolutePath", 1070 args = {} 1071 ) 1072 public void testAbsolutePath() { 1073 assertEquals(parent.absolutePath() + "/" + nodeName, pref.absolutePath()); 1074 assertEquals(parent.absolutePath() + "/" + "new node", parent.node("new node").absolutePath()); 1075 } 1076 1077 @TestTargetNew( 1078 level = TestLevel.COMPLETE, 1079 notes = "", 1080 method = "isUserNode", 1081 args = {} 1082 ) 1083 public void testIsUserNode() { 1084 assertTrue(parent.isUserNode()); 1085 assertFalse(Preferences.systemRoot().isUserNode()); 1086 } 1087 1088 @TestTargets({ 1089 @TestTargetNew( 1090 level = TestLevel.COMPLETE, 1091 notes = "Indirectly checks syncSpi", 1092 method = "sync", 1093 args = {} 1094 ), 1095 @TestTargetNew( 1096 level = TestLevel.COMPLETE, 1097 notes = "Indirectly checks syncSpi", 1098 method = "syncSpi", 1099 args = {} 1100 ) 1101 }) 1102 public void testSync() throws BackingStoreException { 1103 pref.node("new node/sub node"); 1104 pref.sync(); 1105 1106 pref.removeNode(); 1107 1108 try { 1109 pref.sync(); 1110 fail("IllegalStateException expected"); 1111 } catch (IllegalStateException e) { 1112 //expected 1113 } 1114 } 1115 1116 class MockPreferenceChangeListener implements PreferenceChangeListener { 1117 private boolean flagChange = false; 1118 1119 public void preferenceChange(PreferenceChangeEvent arg0) { 1120 flagChange = true; 1121 } 1122 1123 public boolean isChanged () { 1124 boolean retVal = flagChange; 1125 flagChange = false; 1126 return retVal; 1127 } 1128 } 1129 1130 @TestTargetNew( 1131 level = TestLevel.COMPLETE, 1132 notes = "", 1133 method = "addPreferenceChangeListener", 1134 args = {java.util.prefs.PreferenceChangeListener.class} 1135 ) 1136 public void testAddPreferenceChangeListener() throws BackingStoreException { 1137 MockPreferenceChangeListener mpcl = new MockPreferenceChangeListener(); 1138 parent.addPreferenceChangeListener(mpcl); 1139 assertFalse(mpcl.isChanged()); 1140 pref.node("new node"); 1141 pref.flush(); 1142 parent.flush(); 1143 assertFalse(mpcl.isChanged()); 1144 parent.node("new node"); 1145 parent.flush(); 1146 assertFalse(mpcl.isChanged()); 1147 parent.putInt("IntValue", 33); 1148 parent.flush(); 1149 parent.flush(); 1150 assertTrue(mpcl.isChanged()); 1151 assertEquals(33, parent.getInt("IntValue", 22)); 1152 parent.flush(); 1153 assertFalse(mpcl.isChanged()); 1154 assertEquals(22, parent.getInt("Missed Value", 22)); 1155 parent.flush(); 1156 assertFalse(mpcl.isChanged()); 1157 } 1158 1159 @TestTargetNew( 1160 level = TestLevel.COMPLETE, 1161 notes = "", 1162 method = "removePreferenceChangeListener", 1163 args = {java.util.prefs.PreferenceChangeListener.class} 1164 ) 1165 public void testRemovePreferenceChangeListener() throws BackingStoreException { 1166 MockPreferenceChangeListener mpcl = new MockPreferenceChangeListener(); 1167 parent.addPreferenceChangeListener(mpcl); 1168 assertFalse(mpcl.isChanged()); 1169 parent.putInt("IntValue", 33); 1170 parent.flush(); 1171 assertTrue(mpcl.isChanged()); 1172 parent.removePreferenceChangeListener(mpcl); 1173 parent.putInt("IntValue", 33); 1174 parent.flush(); 1175 assertFalse(mpcl.isChanged()); 1176 } 1177 1178 class MockNodeChangeListener implements NodeChangeListener { 1179 private boolean flagAdded = false; 1180 private boolean flagRemoved = false; 1181 1182 public void childAdded(NodeChangeEvent arg0) { 1183 flagAdded = true; 1184 } 1185 1186 public void childRemoved(NodeChangeEvent arg0) { 1187 flagRemoved = true; 1188 } 1189 1190 public boolean isAdded() { 1191 return flagAdded; 1192 } 1193 1194 public boolean isRemoved() { 1195 return flagRemoved; 1196 } 1197 } 1198 1199 @TestTargetNew( 1200 level = TestLevel.COMPLETE, 1201 notes = "", 1202 method = "addNodeChangeListener", 1203 args = {java.util.prefs.NodeChangeListener.class} 1204 ) 1205 public void testAddNodeChangeListener() throws BackingStoreException { 1206 MockNodeChangeListener mncl = new MockNodeChangeListener(); 1207 parent.addNodeChangeListener(mncl); 1208 pref.node("test"); 1209 pref.flush(); 1210 parent.flush(); 1211 assertFalse(mncl.isAdded()); 1212 assertFalse(mncl.isRemoved()); 1213 pref.removeNode(); 1214 parent.flush(); 1215 assertFalse(mncl.isAdded()); 1216 assertTrue(mncl.isRemoved()); 1217 parent.node("new node"); 1218 parent.flush(); 1219 assertTrue(mncl.isAdded()); 1220 assertTrue(mncl.isRemoved()); 1221 } 1222 1223 @TestTargetNew( 1224 level = TestLevel.COMPLETE, 1225 notes = "", 1226 method = "removeNodeChangeListener", 1227 args = {java.util.prefs.NodeChangeListener.class} 1228 ) 1229 public void testRemoveNodeChangeListener() throws BackingStoreException { 1230 MockNodeChangeListener mncl = new MockNodeChangeListener(); 1231 parent.addNodeChangeListener(mncl); 1232 pref.node("test"); 1233 pref.flush(); 1234 parent.flush(); 1235 assertFalse(mncl.isAdded()); 1236 assertFalse(mncl.isRemoved()); 1237 parent.removeNodeChangeListener(mncl); 1238 pref.removeNode(); 1239 parent.flush(); 1240 assertFalse(mncl.isAdded()); 1241 assertFalse(mncl.isRemoved()); 1242 parent.node("new node"); 1243 parent.flush(); 1244 assertFalse(mncl.isAdded()); 1245 assertFalse(mncl.isRemoved()); 1246 } 1247 1248 @TestTargets({ 1249 @TestTargetNew( 1250 level = TestLevel.COMPLETE, 1251 notes = "BackingStoreException, IOException can not be checked.", 1252 method = "exportNode", 1253 args = {java.io.OutputStream.class} 1254 ), 1255 @TestTargetNew( 1256 level = TestLevel.COMPLETE, 1257 notes = "BackingStoreException, IOException can not be checked.", 1258 method = "flush", 1259 args = {} 1260 ), 1261 @TestTargetNew( 1262 level = TestLevel.COMPLETE, 1263 notes = "BackingStoreException, IOException can not be checked.", 1264 method = "flushSpi", 1265 args = {} 1266 ) 1267 }) 1268 public void testExportNode() throws BackingStoreException, IOException, InvalidPreferencesFormatException { 1269 AbstractPreferences ap = (AbstractPreferences) pref.node("New node"); 1270 pref.putInt("IntValue", 33); 1271 pref.putBoolean("BoolValue", true); 1272 pref.flush(); 1273 1274 ByteArrayOutputStream baos = new ByteArrayOutputStream(); 1275 1276 pref.exportNode(baos); 1277 ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray()); 1278 1279 assertTrue(pref.getBoolean("BoolValue", false)); 1280 assertEquals(33, pref.getInt("IntValue", 22)); 1281 assertEquals(1, pref.childrenNames().length); 1282 1283 String xmlData = new String(baos.toByteArray()); 1284 1285 assertTrue(xmlData.contains("IntValue")); 1286 assertTrue(xmlData.contains("BoolValue")); 1287 assertTrue(xmlData.contains("33")); 1288 assertTrue(xmlData.contains("true")); 1289 1290 pref.removeNode(); 1291 1292 try { 1293 pref.exportNode(new ByteArrayOutputStream()); 1294 fail("IllegalStateException expected"); 1295 } catch (IllegalStateException e) { 1296 //expected 1297 } 1298 1299 try { 1300 pref.getBoolean("BoolValue", false); 1301 fail("IllegalStateException expected"); 1302 } catch (IllegalStateException e) { 1303 //expected 1304 } 1305 pref = (AbstractPreferences) parent.node(nodeName); 1306 1307 pref.importPreferences(bais); 1308 1309 assertTrue(pref.getBoolean("BoolValue", false)); 1310 assertEquals(33, pref.getInt("IntValue", 22)); 1311 assertEquals(0, pref.childrenNames().length); 1312 } 1313 1314 @TestTargets({ 1315 @TestTargetNew( 1316 level = TestLevel.COMPLETE, 1317 notes = "BackingStoreException, IOException can not be checked.", 1318 method = "exportSubtree", 1319 args = {java.io.OutputStream.class} 1320 ), 1321 @TestTargetNew( 1322 level = TestLevel.COMPLETE, 1323 notes = "BackingStoreException, IOException can not be checked.", 1324 method = "flush", 1325 args = {} 1326 ), 1327 @TestTargetNew( 1328 level = TestLevel.COMPLETE, 1329 notes = "BackingStoreException, IOException can not be checked.", 1330 method = "flushSpi", 1331 args = {} 1332 ) 1333 }) 1334 public void testExportSubtree() throws BackingStoreException, IOException, InvalidPreferencesFormatException { 1335 AbstractPreferences ap1 = (AbstractPreferences) pref.node("First node"); 1336 AbstractPreferences ap2 = (AbstractPreferences) pref.node("Second node"); 1337 pref.putInt("IntegerValue", 33); 1338 pref.putBoolean("BoolValue", true); 1339 pref.flush(); 1340 1341 ap1.putInt("FirstIntValue", 11); 1342 ap2.putDouble("DoubleValue", new Double(6.626e-34)); 1343 1344 ByteArrayOutputStream baos = new ByteArrayOutputStream(); 1345 1346 pref.exportSubtree(baos); 1347 ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray()); 1348 1349 assertTrue(pref.getBoolean("BoolValue", false)); 1350 assertEquals(33, pref.getInt("IntegerValue", 22)); 1351 assertEquals(2, pref.childrenNames().length); 1352 assertEquals(11, ap1.getInt("FirstIntValue", 22)); 1353 assertEquals(new Double(6.626e-34), ap2.getDouble("DoubleValue", new Double (3.14))); 1354 1355 String xmlData = new String(baos.toByteArray()); 1356 1357 assertTrue(xmlData.contains("IntegerValue")); 1358 assertTrue(xmlData.contains("BoolValue")); 1359 assertTrue(xmlData.contains("FirstIntValue")); 1360 assertTrue(xmlData.contains("DoubleValue")); 1361 assertTrue(xmlData.contains("33")); 1362 assertTrue(xmlData.contains("true")); 1363 assertTrue(xmlData.contains("11")); 1364 assertTrue(xmlData.contains("6.626E-34")); 1365 1366 pref.removeNode(); 1367 1368 try { 1369 pref.exportSubtree(new ByteArrayOutputStream()); 1370 fail("IllegalStateException expected"); 1371 } catch (IllegalStateException e) { 1372 //expected 1373 } 1374 1375 try { 1376 pref.getBoolean("BoolValue", false); 1377 fail("IllegalStateException expected"); 1378 } catch (IllegalStateException e) { 1379 //expected 1380 } 1381 pref = (AbstractPreferences) parent.node(nodeName); 1382 pref.importPreferences(bais); 1383 1384 ap1 = (AbstractPreferences) pref.node("First node"); 1385 ap2 = (AbstractPreferences) pref.node("Second node"); 1386 1387 assertTrue(pref.getBoolean("BoolValue", false)); 1388 assertEquals(33, pref.getInt("IntegerValue", 22)); 1389 assertEquals(2, pref.childrenNames().length); 1390 assertEquals(11, ap1.getInt("FirstIntValue", 22)); 1391 assertEquals(new Double(6.626e-34), ap2.getDouble("DoubleValue", new Double (3.14))); 1392 } 1393 1394 class MockAbstractPreferences extends AbstractPreferences { 1395 protected MockAbstractPreferences(AbstractPreferences parent, String name) { 1396 super(parent, name); 1397 } 1398 1399 @Override 1400 protected AbstractPreferences childSpi(String name) { 1401 return null; 1402 } 1403 1404 @Override 1405 protected String[] childrenNamesSpi() throws BackingStoreException { 1406 return null; 1407 } 1408 1409 @Override 1410 protected void flushSpi() throws BackingStoreException { 1411 } 1412 1413 @Override 1414 protected String getSpi(String key) { 1415 return null; 1416 } 1417 1418 @Override 1419 protected String[] keysSpi() throws BackingStoreException { 1420 return null; 1421 } 1422 1423 @Override 1424 protected void putSpi(String key, String value) { 1425 } 1426 1427 @Override 1428 protected void removeNodeSpi() throws BackingStoreException { 1429 } 1430 1431 @Override 1432 protected void removeSpi(String key) { 1433 } 1434 1435 @Override 1436 protected void syncSpi() throws BackingStoreException { 1437 } 1438 } 1439 1440 @TestTargetNew( 1441 level = TestLevel.COMPLETE, 1442 notes = "", 1443 method = "AbstractPreferences", 1444 args = {java.util.prefs.AbstractPreferences.class, java.lang.String.class} 1445 ) 1446 public void testAbstractPreferences() { 1447 assertNotNull(new MockAbstractPreferences(pref, "node name")); 1448 try { 1449 new MockAbstractPreferences(pref, "node/name"); 1450 fail("IllegalArgumentException expected"); 1451 } catch (IllegalArgumentException e) { 1452 //expected 1453 } 1454 1455 try { 1456 new MockAbstractPreferences(null, "node"); 1457 fail("IllegalArgumentException expected"); 1458 } catch (IllegalArgumentException e) { 1459 //expected 1460 } 1461 } 1462 1463 @TestTargetNew( 1464 level = TestLevel.COMPLETE, 1465 notes = "Tested indirectly", 1466 method = "cachedChildren", 1467 args = {} 1468 ) 1469 public void testCachedChildren() throws BackingStoreException { 1470 pref.node("First node"); 1471 pref.node("Second node"); 1472 1473 assertEquals(2, pref.childrenNames().length); 1474 } 1475 1476 @TestTargetNew( 1477 level = TestLevel.COMPLETE, 1478 notes = "No reason to check dummy implementation", 1479 method = "isRemoved", 1480 args = {} 1481 ) 1482 public void testIsRemoved() { 1483 } 1484 } 1485