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