001    package org.hackystat.dailyprojectdata.resource.unittest;
002    
003    import javax.xml.datatype.XMLGregorianCalendar;
004    
005    import org.hackystat.sensorbase.resource.sensordata.jaxb.Properties;
006    import org.hackystat.sensorbase.resource.sensordata.jaxb.Property;
007    import org.hackystat.sensorbase.resource.sensordata.jaxb.SensorData;
008    import org.hackystat.utilities.tstamp.Tstamp;
009    
010    /**
011     * Used by the tests in UnitTestDPD module. Encapsulates some common code between tests.
012     *
013     * @author Pavel Senin.
014     *
015     */
016    public class UnitTestTestHelper {
017    
018      /**
019       * /** Creates a sample SensorData UnitTest instance given a whole set of parameters.
020       *
021       * @param tstampString The timestamp as a string
022       * @param user The user email.
023       * @param resource The resource over which test was run over.
024       * @param testName The unit test name.
025       * @param result The unit test result.
026       * @param elapsedTime The unit test elapsed time.
027       * @param testCaseName The unit test case name.
028       * @param failureString The unit test failure string.
029       * @param errorString The unit test error string.
030       * @return The new SensorData DevEvent instance.
031       * @throws Exception If problems occur.
032       */
033      public SensorData makeUnitTestEvent(String tstampString, String user, String resource,
034          String testName, String result, String elapsedTime, String testCaseName,
035          String failureString, String errorString) throws Exception {
036    
037        XMLGregorianCalendar tstamp = Tstamp.makeTimestamp(tstampString);
038        String sdt = "UnitTest";
039        SensorData data = new SensorData();
040        String tool = "JUnit";
041    
042        data.setTool(tool);
043        data.setOwner(user);
044        data.setSensorDataType(sdt);
045        data.setTimestamp(tstamp);
046        data.setResource(resource);
047        data.setRuntime(tstamp);
048    
049        // test count, test time, success, failure
050        Properties properties = new Properties();
051        addProperty(properties, "Name", testName);
052        addProperty(properties, "Result", result);
053        addProperty(properties, "ElapsedTime", elapsedTime);
054        addProperty(properties, "TestName", testName);
055        addProperty(properties, "TestCaseName", testCaseName);
056        addProperty(properties, "FailureString", failureString);
057        addProperty(properties, "ErrorString", errorString);
058        data.setProperties(properties);
059    
060        return data;
061      }
062    
063      /**
064       * Creates a sample passing SensorData UnitTest instance given a timestamp and a user.
065       *
066       * @param tstampString The timestamp as a string
067       * @param user The user.
068       * @param pass True if passing, false if failing.
069       * @return The new SensorData DevEvent instance.
070       * @throws Exception If problems occur.
071       */
072      private SensorData makeUnitTestEvent(String tstampString, String user, boolean pass) 
073      throws Exception {
074        XMLGregorianCalendar tstamp = Tstamp.makeTimestamp(tstampString);
075        String sdt = "UnitTest";
076        SensorData data = new SensorData();
077        String tool = "JUnit";
078        data.setTool(tool);
079        data.setOwner(user);
080        data.setSensorDataType(sdt);
081        data.setTimestamp(tstamp);
082        data.setResource("file://foo/bar/baz.txt");
083        data.setRuntime(tstamp);
084    
085        Properties prop = new Properties();
086        addProperty(prop, "Name", "testName");
087        addProperty(prop, "Result", (pass ? "pass" : "fail"));
088        addProperty(prop, "ElapsedTime", "15");
089        addProperty(prop, "TestName", "org.Foo");
090        addProperty(prop, "TestCaseName", "testFoo");
091        data.setProperties(prop);
092        return data;
093      }
094      
095      /**
096       * Returns a Unit Test instance with Result = pass.
097       * @param tstampString The timestamp.
098       * @param user The user. 
099       * @return The UnitTest sensor data instance. 
100       * @throws Exception If problems occur.
101       */
102      public SensorData makePassUnitTest(String tstampString, String user) throws Exception {
103        return makeUnitTestEvent(tstampString, user, true);  
104      }
105      
106      /**
107       * Returns a Unit Test instance with Result = fail.
108       * @param tstampString The timestamp.
109       * @param user The user. 
110       * @return The UnitTest sensor data instance. 
111       * @throws Exception If problems occur.
112       */
113      public SensorData makeFailUnitTest(String tstampString, String user) throws Exception {
114        return makeUnitTestEvent(tstampString, user, false);  
115      }
116      
117      /**
118       * Adds the key value pair to the Properties object.
119       * @param properties The Properties.
120       * @param key The key. 
121       * @param value The value. 
122       */
123      private void addProperty(Properties properties, String key, String value) {
124        Property property = new Property();
125        property.setKey(key);
126        property.setValue(value);
127        properties.getProperty().add(property);
128      }
129    
130    }