Coverage Report - th.co.edge.jseq.MockObjectMap
 
Classes in this File Line Coverage Branch Coverage Complexity
MockObjectMap
70%
16/23
67%
4/6
0
 
 1  
 /*
 2  
  * Copyright (c) 2003-2008, by Henrik Arro and Contributors
 3  
  *
 4  
  * This file is part of JSeq, a tool to automatically create
 5  
  * sequence diagrams by tracing program execution.
 6  
  *
 7  
  * See <http://jseq.sourceforge.net> for more information.
 8  
  *
 9  
  * JSeq is free software: you can redistribute it and/or modify
 10  
  * it under the terms of the GNU Lesser General Public License as
 11  
  * published by the Free Software Foundation, either version 3 of
 12  
  * the License, or (at your option) any later version.
 13  
  *
 14  
  * JSeq is distributed in the hope that it will be useful,
 15  
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
 16  
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 17  
  * GNU Lesser General Public License for more details.
 18  
  *
 19  
  * You should have received a copy of the GNU Lesser General Public License
 20  
  * along with JSeq. If not, see <http://www.gnu.org/licenses/>.
 21  
  */
 22  
 
 23  
 package th.co.edge.jseq;
 24  
 
 25  
 import java.util.Collections;
 26  
 import java.util.HashMap;
 27  
 import java.util.LinkedList;
 28  
 import java.util.List;
 29  
 import java.util.Map;
 30  
 
 31  
 /**
 32  
  * A <code>MockObjectMap</code> is a mapping from names to
 33  
  * <code>MockObject</code>s, with utility methods to make it easy to
 34  
  * translate from <code>Activation</code>s to <code>MockObject</code>s,
 35  
  * with automatic handling of column numbers.
 36  
  */
 37  1
 public class MockObjectMap {
 38  1
     private Map<String, MockObject> objectMap = new HashMap<String, MockObject>();
 39  1
     private int nextColumn = 0;
 40  
 
 41  
     /**
 42  
      * Ensures that all <code>MockObject</code>s in another
 43  
      * <code>MockObjectMap</code> is also in this map.
 44  
      *
 45  
      * @param otherObjectMap
 46  
      *            the <code>MockObjectMap</code> whose <code>MockObject</code>s
 47  
      *            to add to this map if necessary
 48  
      */
 49  
     public void add(MockObjectMap otherObjectMap) {
 50  0
         for (MockObject object : otherObjectMap.listView()) {
 51  0
             getInstance(object.getName());
 52  
         }
 53  0
     }
 54  
 
 55  
     /**
 56  
      * Returns a new <code>MockObjectMap</code> where the method calls
 57  
      * represented by the given <code>Activation</code> and its nested
 58  
      * activations have been added as <code>MockObject</code>s to this map,
 59  
      * with the activation method call first, and the nested method calls in the
 60  
      * order they were added to the activation.
 61  
      *
 62  
      * @param activation
 63  
      *            the <code>Activation</code> whose method call and nested
 64  
      *            method calls to add to this map
 65  
      *
 66  
      * @return a new <code>MockObjectMap</code> containing all method calls
 67  
      *         from <code>activation</code>
 68  
      */
 69  
     public static MockObjectMap addAll(Activation activation) {
 70  1
         MockObjectMap objectMap = new MockObjectMap();
 71  1
         addAll(activation, objectMap);
 72  1
         return objectMap;
 73  
     }
 74  
 
 75  
     private static void addAll(Activation activation, MockObjectMap objectMap) {
 76  10
         objectMap.getInstance(activation.getClassName());
 77  10
         for (Activation nestedActivation : activation.getNestedActivations()) {
 78  9
             addAll(nestedActivation, objectMap);
 79  
         }
 80  10
     }
 81  
 
 82  
     /**
 83  
      * Returns the <code>MockObject</code> associated with the given name. If
 84  
      * there is none, a new <code>MockObject</code> is created, using the
 85  
      * given name and the next available column number, and this object is added
 86  
      * to the map.
 87  
      *
 88  
      * @param name
 89  
      *            the name of the <code>MockObject</code> to look up
 90  
      *
 91  
      * @return the <code>MockObject</code> associated with <code>name</code>,
 92  
      *         or a newly created <code>MockObject</code> (this method never
 93  
      *         returns <code>null</code>
 94  
      */
 95  
     private MockObject getInstance(String name) {
 96  10
         MockObject object = objectMap.get(name);
 97  10
         if (object == null) {
 98  3
             object = new MockObject(name, nextColumn++);
 99  3
             objectMap.put(name, object);
 100  
         }
 101  10
         return object;
 102  
     }
 103  
 
 104  
     /**
 105  
      * Returns the <code>MockObject</code> associated with the given name, or
 106  
      * <code>null</code> if there is none.
 107  
      *
 108  
      * @param name
 109  
      *            the name of the <code>MockObject</code> to look up
 110  
      *
 111  
      * @return the <code>MockObject</code> associated with <code>name</code>,
 112  
      *         or <code>null</code> if there is none
 113  
      */
 114  
     public MockObject get(String name) {
 115  3
         return objectMap.get(name);
 116  
     }
 117  
 
 118  
     /**
 119  
      * Returns a list of all <code>MockObject</code>s in this map, ordered by
 120  
      * column number (and name if the same column number occurs several times,
 121  
      * which it normally should not do).
 122  
      *
 123  
      * @return a list of all <code>MockObject</code>s in this map
 124  
      */
 125  
     public List<MockObject> listView() {
 126  0
         List<MockObject> values = new LinkedList<MockObject>(objectMap.values());
 127  0
         Collections.sort(values);
 128  0
         return values;
 129  
     }
 130  
 
 131  
     /**
 132  
      * Returns a string representation of this <code>MockObjectMap</code>,
 133  
      * mainly useful for logging.
 134  
      *
 135  
      * @return a string representation of this <code>MockObjectMap</code>
 136  
      */
 137  
     @Override
 138  
     public String toString() {
 139  0
         return listView().toString();
 140  
     }
 141  
 }