001 package org.hackystat.dailyprojectdata.resource.issue; 002 003 import static org.junit.Assert.assertEquals; 004 import java.util.logging.Logger; 005 import javax.xml.datatype.XMLGregorianCalendar; 006 import org.hackystat.dailyprojectdata.resource.issue.jaxb.IssueData; 007 import org.hackystat.sensorbase.resource.sensordata.jaxb.SensorData; 008 import org.hackystat.utilities.tstamp.Tstamp; 009 import org.junit.Test; 010 011 /** 012 * Test IssueDataParser. 013 * @author Shaoxuan Zhang 014 * 015 */ 016 public class TestIssueDataParser { 017 018 private IssueDataParser parser = new IssueDataParser(Logger.getLogger("IssueDpdTester")); 019 020 protected static final String ACCEPTED = "Accepted"; 021 protected static final String FIXED = "Fixed"; 022 protected static final String DEFECT = "Defect"; 023 protected static final String ENHANCEMENT = "Enhancement"; 024 protected static final String MEDIUM = "Medium"; 025 protected static final String HIGH = "High"; 026 027 protected static final String testDataOwner = "testDataOwner@hackystat.org"; 028 protected static final String testUser1 = "tester1@hackystat.org"; 029 protected static final String testUser2 = "tester2@hackystat.org"; 030 protected static final String testProject = "hackystat-test-project"; 031 032 protected static final String[] columnKeyOrder = { 033 IssueDataParser.TYPE_PROPERTY_KEY, IssueDataParser.STATUS_PROPERTY_KEY, 034 IssueDataParser.PRIORITY_PROPERTY_KEY, IssueDataParser.MILESTONE_PROPERTY_KEY, 035 IssueDataParser.OWNER_PROPERTY_KEY}; 036 protected static final String[] testData1T1 = 037 {"21", DEFECT, ACCEPTED, MEDIUM, "", testUser1, "2008-09-07T11:00:00"}; 038 protected static final String[] testData1T2 = 039 {"21", ENHANCEMENT, FIXED, MEDIUM, "8.4", testUser1, "2008-09-07T11:00:00"}; 040 protected static final String[] testData2T1 = 041 {"23", ENHANCEMENT, ACCEPTED, MEDIUM, "", testUser1, "2009-07-20T10:24:06"}; 042 protected static final String[] testData2T2 = 043 {"23", ENHANCEMENT, ACCEPTED, HIGH, "", testUser2, "2009-07-20T10:24:06"}; 044 protected final XMLGregorianCalendar testTime1; 045 protected final XMLGregorianCalendar testTime2; 046 047 private final SensorData testData1; 048 private final SensorData testData2; 049 050 /** 051 * Constructor, prepare the test data. 052 * @throws Exception if error when making XMLGregorianCalendar timestamps. 053 */ 054 public TestIssueDataParser() throws Exception { 055 testTime1 = Tstamp.makeTimestamp("2009-07-20T11:00:00"); 056 testTime2 = Tstamp.makeTimestamp("2009-07-22T00:00:00"); 057 testData1 = makeIssueSensorData(testDataOwner, new String[][]{testData1T1, testData1T2}, 058 new XMLGregorianCalendar[]{testTime1, testTime2}); 059 testData2 = makeIssueSensorData(testDataOwner, new String[][]{testData2T1, testData2T2}, 060 new XMLGregorianCalendar[]{testTime1, testTime2}); 061 } 062 063 /** 064 * Test IsOpenStatus(). 065 */ 066 @Test public void testIsOpenStatus() { 067 String[] openStatusValues = {"New", "Accepted", "Started"}; 068 String[] closeStatusValues = {"Fixed", "Verified", "Invalid", "Duplicate", "WontFix", "Done"}; 069 for (String openStatus : openStatusValues) { 070 assertEquals(openStatus + " should be an open status.", 071 true, parser.isOpenStatus(openStatus)); 072 } 073 for (String closeStatus : closeStatusValues) { 074 assertEquals(closeStatus + " should be an close status.", 075 false, parser.isOpenStatus(closeStatus)); 076 } 077 } 078 079 /** 080 * Test parser to parse issue sensordata. 081 */ 082 @Test public void testParser() { 083 /* 084 System.out.println("testSensorData1"); 085 for (Property p : testSensorData1.getProperties().getProperty()) { 086 System.out.println(" " + p.getKey() + " : " + p.getValue()); 087 } 088 */ 089 IssueData issueData1T1 = parser.getIssueDpd(testData1, testTime1); 090 IssueData issueData1T2 = parser.getIssueDpd(testData1, testTime2); 091 IssueData issueData2T1 = parser.getIssueDpd(testData2, testTime1); 092 IssueData issueData2T2 = parser.getIssueDpd(testData2, testTime2); 093 assertEquals("Compare id of data1 from two time.", issueData1T1.getId(), issueData1T2.getId()); 094 assertEquals("Compare id of data2 to predefined value.", 23, issueData2T1.getId()); 095 096 assertEquals("Testing type of data1 when 1st update.", DEFECT, issueData1T1.getType()); 097 assertEquals("Testing type of data1 when 2nd update.", ENHANCEMENT, issueData1T2.getType()); 098 099 assertEquals("Testing status of data1 when 1st update.", ACCEPTED, issueData1T1.getStatus()); 100 assertEquals("Testing status of data1 when 2nd update.", FIXED, issueData1T2.getStatus()); 101 102 assertEquals("Testing milestone of data1 when 1st update.", null, issueData1T1.getMilestone()); 103 assertEquals("Testing milestone of data1 when 2nd update.", "8.4", issueData1T2.getMilestone()); 104 105 assertEquals("Testing status of data2 when 1st update.", ACCEPTED, issueData2T1.getStatus()); 106 assertEquals("Testing status of data2 when 2nd update.", ACCEPTED, issueData2T2.getStatus()); 107 108 assertEquals("Testing priority of data2 when 1st update.", MEDIUM, issueData2T1.getPriority()); 109 assertEquals("Testing priority of data2 when 2nd update.", HIGH, issueData2T2.getPriority()); 110 111 assertEquals("Testing owner of data2 when 1st update.", testUser1, issueData2T1.getOwner()); 112 assertEquals("Testing owner of data2 when 2nd update.", testUser2, issueData2T2.getOwner()); 113 } 114 115 116 /** 117 * Make the issue sensordata. 118 * Example input parameters: 119 * strings = {{"21", "Enhancement", "Accepted", "Medium", "", "rlcox0"}, 120 {"21", "Enhancement", "Fixed", "High", "8.4", "rlcox0"}} 121 timestamps = {"2009-07-20T11:00:00", "2009-07-22T00:00:00"} 122 @param dataOwner owner of the data. 123 * @param strings Array of String array which contain state values in order. 124 * @param timestamps Array of timestamp of each String array in 1st parameter. 125 * @return the sensordata. 126 */ 127 public static SensorData makeIssueSensorData(String dataOwner, String[][] strings, 128 XMLGregorianCalendar[] timestamps) { 129 String sdt = "Issue"; 130 String tool = "GoogleProjectHosting"; 131 132 SensorData sensorData = new SensorData(); 133 sensorData.setTool(tool); 134 sensorData.setOwner(dataOwner); 135 sensorData.setSensorDataType(sdt); 136 try { 137 sensorData.setTimestamp(Tstamp.makeTimestamp(strings[0][6])); 138 } 139 catch (Exception e) { 140 e.printStackTrace(); 141 } 142 String id = strings[0][0]; 143 sensorData.setResource("http://code.google.com/p/" + testProject + "/issues/detail?id=" + id); 144 sensorData.setRuntime(Tstamp.makeTimestamp()); 145 //add id 146 sensorData.addProperty(IssueDataParser.ID_PROPERTY_KEY, id); 147 for (int i = 0; i < strings.length; i++) { 148 String[] values = strings[i]; 149 String timeString = timestamps[i].toString(); 150 //add other state values. 151 for (int j = 0; j < columnKeyOrder.length; j++) { 152 if (values[j + 1].length() > 0) { 153 sensorData.addProperty(columnKeyOrder[j], 154 values[j + 1] + IssueDataParser.TIMESTAMP_SEPARATOR + timeString); 155 } 156 } 157 } 158 return sensorData; 159 } 160 }