Coverage Report - org.apache.commons.latka.junit.JUnitTestAdapter
 
Classes in this File Line Coverage Branch Coverage Complexity
JUnitTestAdapter
0%
0/63
0%
0/6
1.75
JUnitTestAdapter$TestCounter
0%
0/8
0%
0/2
1.75
 
 1  
 /*
 2  
  * Copyright 1999-2001,2004 The Apache Software Foundation.
 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.commons.latka.junit;
 18  
 
 19  
 // java imports
 20  
 import java.io.File;
 21  
 import java.io.IOException;
 22  
 import java.net.MalformedURLException;
 23  
 import java.net.URL;
 24  
 // jaxp imports
 25  
 import javax.xml.parsers.FactoryConfigurationError;
 26  
 import javax.xml.parsers.ParserConfigurationException;
 27  
 import javax.xml.parsers.SAXParser;
 28  
 import javax.xml.parsers.SAXParserFactory;
 29  
 // latka imports
 30  
 import org.apache.commons.latka.DefaultLatkaEventInfo;
 31  
 import org.apache.commons.latka.Latka;
 32  
 import org.apache.commons.latka.LatkaException;
 33  
 import org.apache.commons.latka.Suite;
 34  
 // log4j imports
 35  
 import org.apache.log4j.Category;
 36  
 // sax imports
 37  
 import org.xml.sax.Attributes;
 38  
 import org.xml.sax.InputSource;
 39  
 import org.xml.sax.SAXException;
 40  
 import org.xml.sax.XMLReader;
 41  
 import org.xml.sax.helpers.DefaultHandler;
 42  
 // junit imports
 43  
 import junit.framework.Test;
 44  
 import junit.framework.TestResult;
 45  
 
 46  
 /**
 47  
  * A JUnit {@link junit.framework.Test Test} which is created by
 48  
  * wrapping a Latka {@link org.apache.commons.latka.Suite Suite}
 49  
  *
 50  
  * @author Chuck Burdick
 51  
  * @author dIon Gillard
 52  
  * @version $Id: JUnitTestAdapter.java 155424 2005-02-26 13:09:29Z dirkv $
 53  
  */
 54  
 public class JUnitTestAdapter implements Test {
 55  
     /** log4j category that output is logged to */
 56  0
     private static final Category _log = Category.getInstance(
 57  0
         JUnitTestAdapter.class);
 58  
 
 59  
     /** The latka {@link org.apache.commons.latka.Suite Suite} to be run*/
 60  0
     private Suite _latkaSuite = null;
 61  
     /** the number of tests in the suite */
 62  0
     private int _testCount = 0;
 63  
 
 64  
     /**
 65  
      * Create a Test from a Latka suite and a number of tests
 66  
      *
 67  
      * @param suite The Latka {@link org.apache.commons.latka.Suite}
 68  
      * to be run as a JUnit Test
 69  
      * @param testCount The number of 'request's in the Latka suite
 70  
      */   
 71  0
     protected JUnitTestAdapter(Suite suite, int testCount) {
 72  0
         _latkaSuite = suite;
 73  0
         _testCount = testCount;
 74  0
     }
 75  
 
 76  
     /**
 77  
      * Create a Test from a Latka file
 78  
      * @param fileName The name of a readable file in Latka's XML format
 79  
      * @return a JUnit Test, ready to run, or null if the file can't be resolved
 80  
      */   
 81  
     public static Test createTestFromFile(String fileName) {
 82  0
         Test result = null;
 83  0
         File file = new File(fileName);
 84  0
         if (file.exists()) {
 85  0
             result = createTestFromFile(file);
 86  
         } else {
 87  0
             _log.debug("Input file " + file.getAbsolutePath()
 88  
                 + " does not exist");
 89  
         }
 90  0
         return result;
 91  
     }
 92  
 
 93  
     /**
 94  
      * Create a Test from a {@link java.io.File Java file}
 95  
      * @param file A readable java file containing Latka's XML format 
 96  
      * @return a JUnit Test, ready to run, or null if the file can't be resolved
 97  
      */   
 98  
     public static Test createTestFromFile(File file) {
 99  0
         Test result = null;
 100  
         try {
 101  0
             result = createTestFromURL(file.toURL());
 102  0
         } catch (MalformedURLException e) {
 103  0
             _log.debug("Could not access input file", e);
 104  0
         }
 105  0
         return result;
 106  
     }
 107  
 
 108  
     /**
 109  
      * Create a Test from a resource accessible via
 110  
      * the {@link java.lang.ClassLoader#getResource(String) class loader}
 111  
      * @param resourceName A resource accessible by the class loader in Latka's
 112  
      *      XML format
 113  
      * @return a JUnit Test, ready to run, or null if the resource can't be
 114  
      *      resolved
 115  
      */   
 116  
     public static Test createTestFromResource(String resourceName) {
 117  0
         Test result = null;
 118  0
         ClassLoader loader = JUnitTestAdapter.class.getClassLoader();
 119  0
         URL resource = loader.getResource(resourceName);
 120  0
         if (resource != null) {
 121  0
             result = createTestFromURL(resource);
 122  
         }
 123  0
         return result;
 124  
     }
 125  
 
 126  
     /**
 127  
      * Create a Test from a String containing a URL whose
 128  
      * contents are in Latka's XML format
 129  
      * @param url the {@link java.net.URL URL} to fetch
 130  
      * @return a JUnit Test, ready to run, or null if the url can't be resolved
 131  
      */   
 132  
     public static Test createTestFromURL(String url) {
 133  0
         Test result = null;
 134  
         try {
 135  0
             result = createTestFromURL(new URL(url));
 136  0
         } catch (MalformedURLException e) {
 137  0
             _log.debug("Unable to create URL " + url, e);
 138  0
         }
 139  0
         return result;
 140  
     }
 141  
 
 142  
     /**
 143  
      * Create a Test from a URL whose contents are in Latka's XML format
 144  
      * @param url the {@link java.net.URL URL} to fetch
 145  
      * @return a JUnit Test, ready to run, or null if the url can't be resolved
 146  
      */   
 147  
     public static Test createTestFromURL(URL url) {
 148  0
         Test result = null;
 149  
         try {
 150  0
             InputSource source = new InputSource(url.toString());
 151  0
             Suite suite = new Suite(url);
 152  0
             result = new JUnitTestAdapter(suite, parse(source));
 153  0
         } catch (IOException ioe) {
 154  0
             _log.debug("IOException obtaining xml from URL " + url, ioe);
 155  0
         } catch (SAXException se) {
 156  0
             _log.debug("Problem parsing URL " + url, se);
 157  0
         } catch (ParserConfigurationException pce) {
 158  0
             _log.debug("Problem determining parser", pce);
 159  0
         }
 160  0
         return result;
 161  
     }
 162  
 
 163  
     /**
 164  
      * Parse the Latka XML document to count the requests
 165  
      * @param xml The inputsource to parse
 166  
      * @throws IOException When an IO occurs reading the document
 167  
      * @throws SAXException When the document is invalid XML 
 168  
      * @throws FactoryConfigurationError When the SAX Parser factory can't be 
 169  
      *      configured correctly
 170  
      * @throws ParserConfigurationException When the SAX Parser can't be 
 171  
      *      configured correctly
 172  
      * @return the number of tests in the Latka suite
 173  
      */   
 174  
     protected static int parse(InputSource xml) throws IOException, SAXException
 175  
         , FactoryConfigurationError, ParserConfigurationException {
 176  0
         int result = 0;
 177  0
         XMLReader reader = null;
 178  0
         SAXParserFactory factory = SAXParserFactory.newInstance();
 179  0
         factory.setValidating(false);   
 180  0
         SAXParser parser = factory.newSAXParser();
 181  0
         reader = parser.getXMLReader();
 182  0
         TestCounter handler = new TestCounter();
 183  0
         reader.setContentHandler(handler);
 184  0
         reader.parse(xml);
 185  0
         result = handler.getCount();
 186  0
         return result;
 187  
     }
 188  
 
 189  
     /**
 190  
      * A SAX Handler to count the number of request tags in the document
 191  
      *
 192  
      * @author Chuck Burdick
 193  
      * @author dIon Gillard
 194  
      * @version 
 195  
      * $Id: JUnitTestAdapter.java 155424 2005-02-26 13:09:29Z dirkv $
 196  
      */
 197  
     private static class TestCounter extends DefaultHandler {
 198  
         /** number of requests (ie junit tests) */
 199  0
         private int _count = 0;
 200  
       
 201  
         /**
 202  
          * Create a DefaultHandler to count request elements
 203  
          */      
 204  0
         public TestCounter() {
 205  0
             _count = 0;
 206  0
         }
 207  
       
 208  
         /**
 209  
          * process the start of an xml element
 210  
          * @param uri uri
 211  
          * @param localName localName
 212  
          * @param qName qName
 213  
          * @param atts atts
 214  
          */      
 215  
         public void startElement(String uri, String localName, String qName, 
 216  
                                  Attributes atts) {
 217  0
             if (qName.equals("request")) {
 218  0
                 _count++;
 219  
             }
 220  0
         }
 221  
         
 222  
         /**
 223  
          * Provides the number of <request> tags
 224  
          * @return the count of request elements found
 225  
          */      
 226  
         public int getCount() {
 227  0
             return _count;
 228  
         }
 229  
     }
 230  
 
 231  
     /**
 232  
      * Provides access, post-parsing, of the number of
 233  
      * request elements in the Latka Suite 
 234  
      * @return the number of test cases in the Latka suite
 235  
      */
 236  
     public int countTestCases() {
 237  0
         return _testCount;
 238  
     }
 239  
 
 240  
     /**
 241  
      * Run the test, adding results to the provided 
 242  
      * {@link junit.framework.TestResult TestResult}
 243  
      *
 244  
      * @param r TestResult to accumulate
 245  
      */      
 246  
     public void run(TestResult r) {
 247  0
         _log.debug("Attempting to perform latka tests");
 248  0
         Latka latka = new Latka();
 249  
         try {
 250  0
             latka.runTests(_latkaSuite, new DefaultLatkaEventInfo(new JUnitEventReporter(r)));
 251  0
         } catch (LatkaException e) {
 252  0
             _log.error("Unable to execute latka tests", e);
 253  0
         }
 254  0
     }
 255  
 }