1 /*
   2  * Copyright (c) 2014, 2016, Oracle and/or its affiliates. All rights reserved.
   3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   4  *
   5  * This code is free software; you can redistribute it and/or modify it
   6  * under the terms of the GNU General Public License version 2 only, as
   7  * published by the Free Software Foundation.
   8  *
   9  * This code is distributed in the hope that it will be useful, but WITHOUT
  10  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  11  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  12  * version 2 for more details (a copy is included in the LICENSE file that
  13  * accompanied this code).
  14  *
  15  * You should have received a copy of the GNU General Public License version
  16  * 2 along with this work; if not, write to the Free Software Foundation,
  17  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  18  *
  19  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
  20  * or visit www.oracle.com if you need additional information or have any
  21  * questions.
  22  */
  23 
  24 package stream;
  25 
  26 import org.testng.annotations.Listeners;
  27 import org.testng.annotations.Test;
  28 import org.testng.Assert;
  29 
  30 import java.io.File;
  31 import java.io.FileInputStream;
  32 import java.io.FileNotFoundException;
  33 
  34 import javax.xml.stream.FactoryConfigurationError;
  35 import javax.xml.stream.XMLEventReader;
  36 import javax.xml.stream.XMLInputFactory;
  37 import javax.xml.stream.XMLStreamConstants;
  38 import javax.xml.stream.XMLStreamException;
  39 import javax.xml.stream.events.XMLEvent;
  40 import javax.xml.stream.util.EventReaderDelegate;
  41 
  42 /*
  43  * @test
  44  * @library /javax/xml/jaxp/libs /javax/xml/jaxp/unittest
  45  * @run testng/othervm -DrunSecMngr=true stream.EventReaderDelegateTest
  46  * @run testng/othervm stream.EventReaderDelegateTest
  47  * @summary Test EventReaderDelegate.
  48  */
  49 @Listeners({jaxp.library.FilePolicy.class})
  50 public class EventReaderDelegateTest {
  51 
  52     public EventReaderDelegateTest(String name) {
  53     }
  54 
  55     @Test
  56     public void testGetElementText() {
  57         try {
  58             XMLInputFactory ifac = XMLInputFactory.newFactory();
  59             XMLEventReader reader = ifac.createXMLEventReader(new FileInputStream(new File(getClass().getResource("toys.xml").getFile())));
  60             EventReaderDelegate delegate = new EventReaderDelegate(reader);
  61             while (delegate.hasNext()) {
  62                 XMLEvent event = (XMLEvent) delegate.next();
  63                 switch (event.getEventType()) {
  64                     case XMLStreamConstants.START_ELEMENT: {
  65                         String name = event.asStartElement().getName().toString();
  66                         if (name.equals("name") || name.equals("price")) {
  67                             System.out.println(delegate.getElementText());
  68                         } else {
  69                             try {
  70                                 delegate.getElementText();
  71                             } catch (XMLStreamException e) {
  72                                 System.out.println("Expected XMLStreamException in getElementText()");
  73                             }
  74                         }
  75 
  76                     }
  77                 }
  78             }
  79             delegate.close();
  80         } catch (FileNotFoundException e) {
  81             e.printStackTrace();
  82             Assert.fail("FileNotFoundException in testGetElementText()");
  83         } catch (XMLStreamException e) {
  84             e.printStackTrace();
  85             Assert.fail("XMLStreamException in testGetElementText()");
  86         } catch (FactoryConfigurationError e) {
  87             e.printStackTrace();
  88             Assert.fail("FactoryConfigurationError in testGetElementText()");
  89         }
  90 
  91     }
  92 
  93     @Test
  94     public void testRemove() {
  95         try {
  96             XMLInputFactory ifac = XMLInputFactory.newFactory();
  97             XMLEventReader reader = ifac.createXMLEventReader(new FileInputStream(new File(getClass().getResource("toys.xml").getFile())));
  98             EventReaderDelegate delegate = new EventReaderDelegate(reader);
  99             delegate.remove();
 100         } catch (FileNotFoundException e) {
 101             e.printStackTrace();
 102             Assert.fail("FileNotFoundException in testRemove()");
 103         } catch (XMLStreamException e) {
 104             e.printStackTrace();
 105             Assert.fail("XMLStreamException in testRemove()");
 106         } catch (FactoryConfigurationError e) {
 107             e.printStackTrace();
 108             Assert.fail("FactoryConfigurationError in testRemove()");
 109         } catch (UnsupportedOperationException e) {
 110             System.out.println("Expected exception in remove()");
 111         }
 112 
 113     }
 114 
 115     @Test
 116     public void testPeek() {
 117         try {
 118             XMLInputFactory ifac = XMLInputFactory.newFactory();
 119             XMLEventReader reader = ifac.createXMLEventReader(new FileInputStream(new File(getClass().getResource("toys.xml").getFile())));
 120             EventReaderDelegate delegate = new EventReaderDelegate();
 121             delegate.setParent(reader);
 122             while (delegate.hasNext()) {
 123                 XMLEvent peekevent = delegate.peek();
 124                 XMLEvent event = (XMLEvent) delegate.next();
 125                 if (peekevent != event) {
 126                     Assert.fail("peek() does not return same XMLEvent with next()");
 127                 }
 128             }
 129             delegate.close();
 130         } catch (FileNotFoundException e) {
 131             e.printStackTrace();
 132             Assert.fail("FileNotFoundException in testPeek()");
 133         } catch (XMLStreamException e) {
 134             e.printStackTrace();
 135             Assert.fail("XMLStreamException in testPeek()");
 136         } catch (FactoryConfigurationError e) {
 137             e.printStackTrace();
 138             Assert.fail("FactoryConfigurationError in testPeek()");
 139         }
 140     }
 141 
 142     @Test
 143     public void testNextTag() {
 144         try {
 145             XMLInputFactory ifac = XMLInputFactory.newFactory();
 146             ifac.setProperty(XMLInputFactory.IS_SUPPORTING_EXTERNAL_ENTITIES, Boolean.FALSE);
 147             XMLEventReader reader = ifac.createXMLEventReader(new FileInputStream(new File(getClass().getResource("toys.xml").getFile())));
 148             EventReaderDelegate delegate = new EventReaderDelegate(reader);
 149             if ((Boolean) (delegate.getProperty(XMLInputFactory.IS_SUPPORTING_EXTERNAL_ENTITIES)) != Boolean.FALSE) {
 150                 Assert.fail("getProperty() does not return correct value");
 151             }
 152             while (delegate.hasNext()) {
 153                 XMLEvent event = delegate.peek();
 154                 if (event.isEndElement() || event.isStartElement()) {
 155                     XMLEvent nextevent = delegate.nextTag();
 156                     if (!(nextevent.getEventType() == XMLStreamConstants.START_ELEMENT || nextevent.getEventType() == XMLStreamConstants.END_ELEMENT)) {
 157                         Assert.fail("nextTag() does not return correct event type");
 158                     }
 159                 } else {
 160                     delegate.next();
 161                 }
 162             }
 163             delegate.close();
 164         } catch (FileNotFoundException e) {
 165             e.printStackTrace();
 166             Assert.fail("FileNotFoundException in testNextTag()");
 167         } catch (XMLStreamException e) {
 168             e.printStackTrace();
 169             Assert.fail("XMLStreamException in testNextTag()");
 170         } catch (FactoryConfigurationError e) {
 171             e.printStackTrace();
 172             Assert.fail("FactoryConfigurationError in testNextTag()");
 173         }
 174     }
 175 
 176     @Test
 177     public void testNextEvent() {
 178         try {
 179             XMLInputFactory ifac = XMLInputFactory.newFactory();
 180             ifac.setProperty(XMLInputFactory.IS_SUPPORTING_EXTERNAL_ENTITIES, Boolean.FALSE);
 181             XMLEventReader reader = ifac.createXMLEventReader(new FileInputStream(new File(getClass().getResource("toys.xml").getFile())));
 182             EventReaderDelegate delegate = new EventReaderDelegate();
 183             delegate.setParent(reader);
 184             if ((Boolean) (delegate.getParent().getProperty(XMLInputFactory.IS_SUPPORTING_EXTERNAL_ENTITIES)) != Boolean.FALSE) {
 185                 Assert.fail("XMLEventReader.getProperty() does not return correct value");
 186             }
 187             if ((Boolean) (delegate.getProperty(XMLInputFactory.IS_SUPPORTING_EXTERNAL_ENTITIES)) != Boolean.FALSE) {
 188                 Assert.fail("EventReaderDelegate.getProperty() does not return correct value");
 189             }
 190             while (delegate.hasNext()) {
 191                 XMLEvent event = delegate.nextEvent();
 192                 switch (event.getEventType()) {
 193                     case XMLStreamConstants.START_ELEMENT: {
 194                         System.out.println(event.asStartElement().getName());
 195                         break;
 196                     }
 197                     case XMLStreamConstants.END_ELEMENT: {
 198                         System.out.println(event.asEndElement().getName());
 199                         break;
 200                     }
 201                     case XMLStreamConstants.END_DOCUMENT: {
 202                         System.out.println(event.isEndDocument());
 203                         break;
 204                     }
 205                     case XMLStreamConstants.START_DOCUMENT: {
 206                         System.out.println(event.isStartDocument());
 207                         break;
 208                     }
 209                     case XMLStreamConstants.CHARACTERS: {
 210                         System.out.println(event.asCharacters().getData());
 211                         break;
 212                     }
 213                     case XMLStreamConstants.COMMENT: {
 214                         System.out.println(event.toString());
 215                         break;
 216                     }
 217                 }
 218 
 219             }
 220             delegate.close();
 221         } catch (FileNotFoundException e) {
 222             e.printStackTrace();
 223             Assert.fail("FileNotFoundException in testNextEvent()");
 224         } catch (XMLStreamException e) {
 225             e.printStackTrace();
 226             Assert.fail("XMLStreamException in testNextEvent()");
 227         } catch (FactoryConfigurationError e) {
 228             e.printStackTrace();
 229             Assert.fail("FactoryConfigurationError in testNextEvent()");
 230         }
 231 
 232     }
 233 }