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  * @summary Test EventReaderDelegate.
  44  */
  45 @Listeners({jaxp.library.FilePolicy.class})
  46 public class EventReaderDelegateTest {
  47 
  48     public EventReaderDelegateTest(String name) {
  49     }
  50 
  51     @Test
  52     public void testGetElementText() {
  53         try {
  54             XMLInputFactory ifac = XMLInputFactory.newFactory();
  55             XMLEventReader reader = ifac.createXMLEventReader(new FileInputStream(new File(getClass().getResource("toys.xml").getFile())));
  56             EventReaderDelegate delegate = new EventReaderDelegate(reader);
  57             while (delegate.hasNext()) {
  58                 XMLEvent event = (XMLEvent) delegate.next();
  59                 switch (event.getEventType()) {
  60                     case XMLStreamConstants.START_ELEMENT: {
  61                         String name = event.asStartElement().getName().toString();
  62                         if (name.equals("name") || name.equals("price")) {
  63                             System.out.println(delegate.getElementText());
  64                         } else {
  65                             try {
  66                                 delegate.getElementText();
  67                             } catch (XMLStreamException e) {
  68                                 System.out.println("Expected XMLStreamException in getElementText()");
  69                             }
  70                         }
  71 
  72                     }
  73                 }
  74             }
  75             delegate.close();
  76         } catch (FileNotFoundException e) {
  77             e.printStackTrace();
  78             Assert.fail("FileNotFoundException in testGetElementText()");
  79         } catch (XMLStreamException e) {
  80             e.printStackTrace();
  81             Assert.fail("XMLStreamException in testGetElementText()");
  82         } catch (FactoryConfigurationError e) {
  83             e.printStackTrace();
  84             Assert.fail("FactoryConfigurationError in testGetElementText()");
  85         }
  86 
  87     }
  88 
  89     @Test
  90     public void testRemove() {
  91         try {
  92             XMLInputFactory ifac = XMLInputFactory.newFactory();
  93             XMLEventReader reader = ifac.createXMLEventReader(new FileInputStream(new File(getClass().getResource("toys.xml").getFile())));
  94             EventReaderDelegate delegate = new EventReaderDelegate(reader);
  95             delegate.remove();
  96         } catch (FileNotFoundException e) {
  97             e.printStackTrace();
  98             Assert.fail("FileNotFoundException in testRemove()");
  99         } catch (XMLStreamException e) {
 100             e.printStackTrace();
 101             Assert.fail("XMLStreamException in testRemove()");
 102         } catch (FactoryConfigurationError e) {
 103             e.printStackTrace();
 104             Assert.fail("FactoryConfigurationError in testRemove()");
 105         } catch (UnsupportedOperationException e) {
 106             System.out.println("Expected exception in remove()");
 107         }
 108 
 109     }
 110 
 111     @Test
 112     public void testPeek() {
 113         try {
 114             XMLInputFactory ifac = XMLInputFactory.newFactory();
 115             XMLEventReader reader = ifac.createXMLEventReader(new FileInputStream(new File(getClass().getResource("toys.xml").getFile())));
 116             EventReaderDelegate delegate = new EventReaderDelegate();
 117             delegate.setParent(reader);
 118             while (delegate.hasNext()) {
 119                 XMLEvent peekevent = delegate.peek();
 120                 XMLEvent event = (XMLEvent) delegate.next();
 121                 if (peekevent != event) {
 122                     Assert.fail("peek() does not return same XMLEvent with next()");
 123                 }
 124             }
 125             delegate.close();
 126         } catch (FileNotFoundException e) {
 127             e.printStackTrace();
 128             Assert.fail("FileNotFoundException in testPeek()");
 129         } catch (XMLStreamException e) {
 130             e.printStackTrace();
 131             Assert.fail("XMLStreamException in testPeek()");
 132         } catch (FactoryConfigurationError e) {
 133             e.printStackTrace();
 134             Assert.fail("FactoryConfigurationError in testPeek()");
 135         }
 136     }
 137 
 138     @Test
 139     public void testNextTag() {
 140         try {
 141             XMLInputFactory ifac = XMLInputFactory.newFactory();
 142             ifac.setProperty(XMLInputFactory.IS_SUPPORTING_EXTERNAL_ENTITIES, Boolean.FALSE);
 143             XMLEventReader reader = ifac.createXMLEventReader(new FileInputStream(new File(getClass().getResource("toys.xml").getFile())));
 144             EventReaderDelegate delegate = new EventReaderDelegate(reader);
 145             if ((Boolean) (delegate.getProperty(XMLInputFactory.IS_SUPPORTING_EXTERNAL_ENTITIES)) != Boolean.FALSE) {
 146                 Assert.fail("getProperty() does not return correct value");
 147             }
 148             while (delegate.hasNext()) {
 149                 XMLEvent event = delegate.peek();
 150                 if (event.isEndElement() || event.isStartElement()) {
 151                     XMLEvent nextevent = delegate.nextTag();
 152                     if (!(nextevent.getEventType() == XMLStreamConstants.START_ELEMENT || nextevent.getEventType() == XMLStreamConstants.END_ELEMENT)) {
 153                         Assert.fail("nextTag() does not return correct event type");
 154                     }
 155                 } else {
 156                     delegate.next();
 157                 }
 158             }
 159             delegate.close();
 160         } catch (FileNotFoundException e) {
 161             e.printStackTrace();
 162             Assert.fail("FileNotFoundException in testNextTag()");
 163         } catch (XMLStreamException e) {
 164             e.printStackTrace();
 165             Assert.fail("XMLStreamException in testNextTag()");
 166         } catch (FactoryConfigurationError e) {
 167             e.printStackTrace();
 168             Assert.fail("FactoryConfigurationError in testNextTag()");
 169         }
 170     }
 171 
 172     @Test
 173     public void testNextEvent() {
 174         try {
 175             XMLInputFactory ifac = XMLInputFactory.newFactory();
 176             ifac.setProperty(XMLInputFactory.IS_SUPPORTING_EXTERNAL_ENTITIES, Boolean.FALSE);
 177             XMLEventReader reader = ifac.createXMLEventReader(new FileInputStream(new File(getClass().getResource("toys.xml").getFile())));
 178             EventReaderDelegate delegate = new EventReaderDelegate();
 179             delegate.setParent(reader);
 180             if ((Boolean) (delegate.getParent().getProperty(XMLInputFactory.IS_SUPPORTING_EXTERNAL_ENTITIES)) != Boolean.FALSE) {
 181                 Assert.fail("XMLEventReader.getProperty() does not return correct value");
 182             }
 183             if ((Boolean) (delegate.getProperty(XMLInputFactory.IS_SUPPORTING_EXTERNAL_ENTITIES)) != Boolean.FALSE) {
 184                 Assert.fail("EventReaderDelegate.getProperty() does not return correct value");
 185             }
 186             while (delegate.hasNext()) {
 187                 XMLEvent event = delegate.nextEvent();
 188                 switch (event.getEventType()) {
 189                     case XMLStreamConstants.START_ELEMENT: {
 190                         System.out.println(event.asStartElement().getName());
 191                         break;
 192                     }
 193                     case XMLStreamConstants.END_ELEMENT: {
 194                         System.out.println(event.asEndElement().getName());
 195                         break;
 196                     }
 197                     case XMLStreamConstants.END_DOCUMENT: {
 198                         System.out.println(event.isEndDocument());
 199                         break;
 200                     }
 201                     case XMLStreamConstants.START_DOCUMENT: {
 202                         System.out.println(event.isStartDocument());
 203                         break;
 204                     }
 205                     case XMLStreamConstants.CHARACTERS: {
 206                         System.out.println(event.asCharacters().getData());
 207                         break;
 208                     }
 209                     case XMLStreamConstants.COMMENT: {
 210                         System.out.println(event.toString());
 211                         break;
 212                     }
 213                 }
 214 
 215             }
 216             delegate.close();
 217         } catch (FileNotFoundException e) {
 218             e.printStackTrace();
 219             Assert.fail("FileNotFoundException in testNextEvent()");
 220         } catch (XMLStreamException e) {
 221             e.printStackTrace();
 222             Assert.fail("XMLStreamException in testNextEvent()");
 223         } catch (FactoryConfigurationError e) {
 224             e.printStackTrace();
 225             Assert.fail("FactoryConfigurationError in testNextEvent()");
 226         }
 227 
 228     }
 229 }