Clover coverage report - JFCUnit Test Coverage
Coverage timestamp: Mon Dec 20 2004 23:38:10 MST
file stats: LOC: 96   Methods: 4
NCLOC: 45   Classes: 1
 
 Source file Conditionals Statements Methods TOTAL
XMLPropertyCache.java 91.7% 95.8% 100% 95%
coverage coverage
 1   
 package junit.extensions.xml;
 2   
 
 3   
 
 4   
 /**
 5   
  * <p>Title: XMLObjectCache</p>
 6   
  * <p>Description: Multi level hashmap to contain
 7   
  * name value pairs. A parent level can be explicitly
 8   
  * accessed by prefixing the name with "../"
 9   
  * otherwise the parent level will only be searched
 10   
  * if the object does not exist at the current level. </p>
 11   
  * <p>Copyright: Copyright (c) 2003</p>
 12   
  * <p>Company: jfcunit project</p>
 13   
  * @author Kevin Wilson
 14   
  * @version 1.0
 15   
  */
 16   
 public class XMLPropertyCache extends XMLObjectCache {
 17   
     /**
 18   
      * Empty contructor. Parent is assumed to be null. It can be
 19   
      * set at a later time.
 20   
      */
 21  786
     public XMLPropertyCache() {
 22  786
         this(null);
 23   
     }
 24   
 
 25   
     /**
 26   
      * Constructor.
 27   
      * @param parent Parent object cache to be set.
 28   
      */
 29  786
     public XMLPropertyCache(final XMLPropertyCache parent) {
 30  786
         super(parent);
 31   
     }
 32   
 
 33   
     /**
 34   
      * Get a object from the cache. If the object does not
 35   
      * exist in the cache then try the parent cache. If a parent
 36   
      * cache does not exist then try the System properties.
 37   
      * @param name Name of the value to be retrieved.
 38   
      * @return Return the value.
 39   
      */
 40  6144
     public Object get(final String name) {
 41  6144
         Object o = super.get(name);
 42   
 
 43  6144
         if (o == null) {
 44  6008
             o = System.getProperty(name);
 45   
         }
 46   
 
 47  6144
         return o;
 48   
     }
 49   
 
 50   
     /**
 51   
      * Resolve any parameter names in the string given, and
 52   
      * make the appropriate substitutions.
 53   
      * @param s String String which may contain the property names.
 54   
      * @return String Resuting string which will have the property values
 55   
      * substituted.
 56   
      */
 57  1719
     public final String resolve(final String s) {
 58  1719
         if (s == null) {
 59  90
             return null;
 60   
         }
 61   
 
 62  1629
         int    index = -1;
 63  1629
         String str = new String(s);
 64   
 
 65  1629
         do {
 66  1636
             index = str.lastIndexOf("${");
 67   
 
 68  1636
             if (index != -1) {
 69  7
                 int    lindex = str.indexOf("}", index);
 70   
 
 71  7
                 String variableName = str.substring(index + 2, lindex);
 72   
 
 73  7
                 if (variableName.length() == 0) {
 74  0
                     throw new RuntimeException(
 75   
                         "Variable name expected in ${} cannot resolve :" + s);
 76   
                 }
 77   
 
 78  7
                 Object value = get(variableName);
 79   
 
 80  7
                 if (value == null) {
 81  2
                     System.err.println("Evaluation of \"" + s
 82   
                         + "\" Variable not found assuming empty string for:"
 83   
                         + variableName);
 84  2
                     value = "";
 85   
                 }
 86   
 
 87  7
                 String valueString = value.toString();
 88  7
                 str = str.substring(0, index) + valueString
 89   
                     + str.substring(lindex + 1);
 90   
             }
 91  1636
         } while (index != -1);
 92   
 
 93  1629
         return str;
 94   
     }
 95   
 }
 96