Home | History | Annotate | Download | only in helpers
      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