18579ea343f8d4c74b44d5b5cb2df3ef7552b2f6eshowardpackage autotest.afe; 28579ea343f8d4c74b44d5b5cb2df3ef7552b2f6eshoward 3ad57645f1fd54b398a386fe184f5c47a91ddb1a3Jiaxi Luoimport autotest.afe.ITextBox; 48579ea343f8d4c74b44d5b5cb2df3ef7552b2f6eshowardimport autotest.common.JSONArrayList; 58579ea343f8d4c74b44d5b5cb2df3ef7552b2f6eshowardimport autotest.common.StaticDataRepository; 68579ea343f8d4c74b44d5b5cb2df3ef7552b2f6eshowardimport autotest.common.Utils; 78579ea343f8d4c74b44d5b5cb2df3ef7552b2f6eshowardimport autotest.common.table.DataTable; 88579ea343f8d4c74b44d5b5cb2df3ef7552b2f6eshowardimport autotest.common.table.DataTable.DataTableListener; 98579ea343f8d4c74b44d5b5cb2df3ef7552b2f6eshowardimport autotest.common.table.DataTable.TableWidgetFactory; 106f27d4f22a1ba5063968b8c322fa0845f3279adeEric Liimport autotest.common.table.SelectionManager; 118579ea343f8d4c74b44d5b5cb2df3ef7552b2f6eshowardimport autotest.common.table.SelectionManager.SelectionListener; 126f27d4f22a1ba5063968b8c322fa0845f3279adeEric Liimport autotest.common.table.TableClickWidget; 136f27d4f22a1ba5063968b8c322fa0845f3279adeEric Liimport autotest.common.ui.SimplifiedList; 148579ea343f8d4c74b44d5b5cb2df3ef7552b2f6eshoward 150d92da0fe19a095fc5678c4159e6a1756df65e48showardimport com.google.gwt.event.dom.client.ChangeEvent; 160d92da0fe19a095fc5678c4159e6a1756df65e48showardimport com.google.gwt.event.dom.client.ChangeHandler; 178579ea343f8d4c74b44d5b5cb2df3ef7552b2f6eshowardimport com.google.gwt.json.client.JSONArray; 188579ea343f8d4c74b44d5b5cb2df3ef7552b2f6eshowardimport com.google.gwt.json.client.JSONObject; 198579ea343f8d4c74b44d5b5cb2df3ef7552b2f6eshowardimport com.google.gwt.user.client.ui.Composite; 206f27d4f22a1ba5063968b8c322fa0845f3279adeEric Liimport com.google.gwt.user.client.ui.HasHTML; 218579ea343f8d4c74b44d5b5cb2df3ef7552b2f6eshowardimport com.google.gwt.user.client.ui.Widget; 228579ea343f8d4c74b44d5b5cb2df3ef7552b2f6eshoward 238579ea343f8d4c74b44d5b5cb2df3ef7552b2f6eshowardimport java.util.ArrayList; 248579ea343f8d4c74b44d5b5cb2df3ef7552b2f6eshowardimport java.util.Collection; 258579ea343f8d4c74b44d5b5cb2df3ef7552b2f6eshowardimport java.util.HashMap; 268579ea343f8d4c74b44d5b5cb2df3ef7552b2f6eshowardimport java.util.List; 278579ea343f8d4c74b44d5b5cb2df3ef7552b2f6eshowardimport java.util.Map; 288579ea343f8d4c74b44d5b5cb2df3ef7552b2f6eshoward 296f27d4f22a1ba5063968b8c322fa0845f3279adeEric Lipublic class TestSelector extends Composite implements DataTableListener, ChangeHandler, 308579ea343f8d4c74b44d5b5cb2df3ef7552b2f6eshoward TableWidgetFactory, SelectionListener { 316f27d4f22a1ba5063968b8c322fa0845f3279adeEric Li public static interface Display { 326f27d4f22a1ba5063968b8c322fa0845f3279adeEric Li public SimplifiedList getTestTypeSelect(); 33ad57645f1fd54b398a386fe184f5c47a91ddb1a3Jiaxi Luo public ITextBox getTestNameFilter(); 346f27d4f22a1ba5063968b8c322fa0845f3279adeEric Li public IDataTable getTestTable(); 356f27d4f22a1ba5063968b8c322fa0845f3279adeEric Li public ISelectionManager getTestSelection(); 366f27d4f22a1ba5063968b8c322fa0845f3279adeEric Li public HasHTML getTestInfo(); 376f27d4f22a1ba5063968b8c322fa0845f3279adeEric Li } 386f27d4f22a1ba5063968b8c322fa0845f3279adeEric Li 396f27d4f22a1ba5063968b8c322fa0845f3279adeEric Li // TODO: Change DataTable to passive view, then get rid of this ad-hoc interface 406f27d4f22a1ba5063968b8c322fa0845f3279adeEric Li public static interface IDataTable { 416f27d4f22a1ba5063968b8c322fa0845f3279adeEric Li public void setWidgetFactory(TableWidgetFactory widgetFactory); 426f27d4f22a1ba5063968b8c322fa0845f3279adeEric Li public void addListener(DataTableListener listener); 436f27d4f22a1ba5063968b8c322fa0845f3279adeEric Li public void clear(); 446f27d4f22a1ba5063968b8c322fa0845f3279adeEric Li public void addRow(JSONObject row); 456f27d4f22a1ba5063968b8c322fa0845f3279adeEric Li public void refreshWidgets(); 466f27d4f22a1ba5063968b8c322fa0845f3279adeEric Li 476f27d4f22a1ba5063968b8c322fa0845f3279adeEric Li public static class DataTableImpl extends DataTable implements IDataTable { 486f27d4f22a1ba5063968b8c322fa0845f3279adeEric Li public DataTableImpl(String[][] columns) { 496f27d4f22a1ba5063968b8c322fa0845f3279adeEric Li super(columns); 506f27d4f22a1ba5063968b8c322fa0845f3279adeEric Li } 516f27d4f22a1ba5063968b8c322fa0845f3279adeEric Li } 526f27d4f22a1ba5063968b8c322fa0845f3279adeEric Li } 536f27d4f22a1ba5063968b8c322fa0845f3279adeEric Li 546f27d4f22a1ba5063968b8c322fa0845f3279adeEric Li // TODO: Change SelectionManager to use the DataTable passive view model, then get rid of this 556f27d4f22a1ba5063968b8c322fa0845f3279adeEric Li // ad-hoc interface 566f27d4f22a1ba5063968b8c322fa0845f3279adeEric Li public static interface ISelectionManager { 576f27d4f22a1ba5063968b8c322fa0845f3279adeEric Li public void deselectAll(); 586f27d4f22a1ba5063968b8c322fa0845f3279adeEric Li public Widget createWidget(int row, int cell, JSONObject rowObject); 596f27d4f22a1ba5063968b8c322fa0845f3279adeEric Li public void addListener(SelectionListener listener); 606f27d4f22a1ba5063968b8c322fa0845f3279adeEric Li 616f27d4f22a1ba5063968b8c322fa0845f3279adeEric Li public static class SelectionManagerImpl extends SelectionManager 626f27d4f22a1ba5063968b8c322fa0845f3279adeEric Li implements ISelectionManager { 636f27d4f22a1ba5063968b8c322fa0845f3279adeEric Li public SelectionManagerImpl(DataTable table, boolean selectOnlyOne) { 646f27d4f22a1ba5063968b8c322fa0845f3279adeEric Li super(table, selectOnlyOne); 656f27d4f22a1ba5063968b8c322fa0845f3279adeEric Li } 666f27d4f22a1ba5063968b8c322fa0845f3279adeEric Li 676f27d4f22a1ba5063968b8c322fa0845f3279adeEric Li } 686f27d4f22a1ba5063968b8c322fa0845f3279adeEric Li } 696f27d4f22a1ba5063968b8c322fa0845f3279adeEric Li 708579ea343f8d4c74b44d5b5cb2df3ef7552b2f6eshoward // control file types 716f27d4f22a1ba5063968b8c322fa0845f3279adeEric Li public static final String SERVER_TYPE = "Server"; 726f27d4f22a1ba5063968b8c322fa0845f3279adeEric Li public static final String CLIENT_TYPE = "Client"; 736f27d4f22a1ba5063968b8c322fa0845f3279adeEric Li 748579ea343f8d4c74b44d5b5cb2df3ef7552b2f6eshoward public static interface TestSelectorListener { 758579ea343f8d4c74b44d5b5cb2df3ef7552b2f6eshoward /** 768579ea343f8d4c74b44d5b5cb2df3ef7552b2f6eshoward * Called when a test is selected or deselected, or when the test type is changed. 778579ea343f8d4c74b44d5b5cb2df3ef7552b2f6eshoward */ 788579ea343f8d4c74b44d5b5cb2df3ef7552b2f6eshoward public void onTestSelectionChanged(); 798579ea343f8d4c74b44d5b5cb2df3ef7552b2f6eshoward } 806f27d4f22a1ba5063968b8c322fa0845f3279adeEric Li 818579ea343f8d4c74b44d5b5cb2df3ef7552b2f6eshoward private static class TestInfoBuilder { 828579ea343f8d4c74b44d5b5cb2df3ef7552b2f6eshoward private static final Map<String, String> timeMap = new HashMap<String, String>(); 838579ea343f8d4c74b44d5b5cb2df3ef7552b2f6eshoward static { 848579ea343f8d4c74b44d5b5cb2df3ef7552b2f6eshoward timeMap.put("SHORT", "less than 15 minutes"); 858579ea343f8d4c74b44d5b5cb2df3ef7552b2f6eshoward timeMap.put("MEDIUM", "15 minutes to four hours"); 868579ea343f8d4c74b44d5b5cb2df3ef7552b2f6eshoward timeMap.put("LONG", "over four hours"); 878579ea343f8d4c74b44d5b5cb2df3ef7552b2f6eshoward } 886f27d4f22a1ba5063968b8c322fa0845f3279adeEric Li 898579ea343f8d4c74b44d5b5cb2df3ef7552b2f6eshoward private StringBuilder builder = new StringBuilder(); 908579ea343f8d4c74b44d5b5cb2df3ef7552b2f6eshoward private JSONObject test; 916f27d4f22a1ba5063968b8c322fa0845f3279adeEric Li 928579ea343f8d4c74b44d5b5cb2df3ef7552b2f6eshoward public TestInfoBuilder(JSONObject test) { 938579ea343f8d4c74b44d5b5cb2df3ef7552b2f6eshoward this.test = test; 946f27d4f22a1ba5063968b8c322fa0845f3279adeEric Li 958579ea343f8d4c74b44d5b5cb2df3ef7552b2f6eshoward writeTitleLine(); 968579ea343f8d4c74b44d5b5cb2df3ef7552b2f6eshoward appendTextField("Written by", getField("author")); 972bab8f45adedeacbf2d62d37b90255581adc3c7dshoward appendTextField("Type", getField("test_type")); 98529cdf3a9bd5d6c8f29d18a00ce3229880b9e4c2showard appendTextField("Synchronization count", getField("sync_count")); 998579ea343f8d4c74b44d5b5cb2df3ef7552b2f6eshoward writeTime(); 1008579ea343f8d4c74b44d5b5cb2df3ef7552b2f6eshoward writeSkipVerify(test); 1016f27d4f22a1ba5063968b8c322fa0845f3279adeEric Li 1028579ea343f8d4c74b44d5b5cb2df3ef7552b2f6eshoward builder.append("<br>" + getField("description")); 1038579ea343f8d4c74b44d5b5cb2df3ef7552b2f6eshoward } 1048579ea343f8d4c74b44d5b5cb2df3ef7552b2f6eshoward 1058579ea343f8d4c74b44d5b5cb2df3ef7552b2f6eshoward private void writeTitleLine() { 1068579ea343f8d4c74b44d5b5cb2df3ef7552b2f6eshoward builder.append("<b>" + getField("name") + "</b> "); 1076f27d4f22a1ba5063968b8c322fa0845f3279adeEric Li builder.append("(" + 1086f27d4f22a1ba5063968b8c322fa0845f3279adeEric Li getField("test_class") + " / " + getField("test_category") + 1098579ea343f8d4c74b44d5b5cb2df3ef7552b2f6eshoward ")<br><br>"); 1108579ea343f8d4c74b44d5b5cb2df3ef7552b2f6eshoward } 1116f27d4f22a1ba5063968b8c322fa0845f3279adeEric Li 1128579ea343f8d4c74b44d5b5cb2df3ef7552b2f6eshoward private void writeTime() { 1138579ea343f8d4c74b44d5b5cb2df3ef7552b2f6eshoward String time = getField("test_time"); 1148579ea343f8d4c74b44d5b5cb2df3ef7552b2f6eshoward String timeDetail = "unknown time"; 1158579ea343f8d4c74b44d5b5cb2df3ef7552b2f6eshoward if (timeMap.containsKey(time)) { 1168579ea343f8d4c74b44d5b5cb2df3ef7552b2f6eshoward timeDetail = timeMap.get(time); 1178579ea343f8d4c74b44d5b5cb2df3ef7552b2f6eshoward } 1188579ea343f8d4c74b44d5b5cb2df3ef7552b2f6eshoward appendTextField("Time", time + " (" + timeDetail + ")"); 1198579ea343f8d4c74b44d5b5cb2df3ef7552b2f6eshoward } 1208579ea343f8d4c74b44d5b5cb2df3ef7552b2f6eshoward 1218579ea343f8d4c74b44d5b5cb2df3ef7552b2f6eshoward private void writeSkipVerify(JSONObject test) { 1221a9eaa51c52c10953e3d296a7b529126eab2862eshoward if (!test.get("run_verify").isBoolean().booleanValue()) { 1238579ea343f8d4c74b44d5b5cb2df3ef7552b2f6eshoward builder.append("Verify is <b>not</b> run<br>"); 1248579ea343f8d4c74b44d5b5cb2df3ef7552b2f6eshoward } 1258579ea343f8d4c74b44d5b5cb2df3ef7552b2f6eshoward } 1268579ea343f8d4c74b44d5b5cb2df3ef7552b2f6eshoward 1278579ea343f8d4c74b44d5b5cb2df3ef7552b2f6eshoward private void appendTextField(String name, String text) { 1288579ea343f8d4c74b44d5b5cb2df3ef7552b2f6eshoward builder.append("<b>" + name + "</b>: " + text + "<br>"); 1298579ea343f8d4c74b44d5b5cb2df3ef7552b2f6eshoward } 1308579ea343f8d4c74b44d5b5cb2df3ef7552b2f6eshoward 1318579ea343f8d4c74b44d5b5cb2df3ef7552b2f6eshoward private String getField(String field) { 1321a9eaa51c52c10953e3d296a7b529126eab2862eshoward return Utils.escape(Utils.jsonToString(test.get(field))); 1338579ea343f8d4c74b44d5b5cb2df3ef7552b2f6eshoward } 1346f27d4f22a1ba5063968b8c322fa0845f3279adeEric Li 1358579ea343f8d4c74b44d5b5cb2df3ef7552b2f6eshoward public String getInfo() { 1368579ea343f8d4c74b44d5b5cb2df3ef7552b2f6eshoward return builder.toString(); 1378579ea343f8d4c74b44d5b5cb2df3ef7552b2f6eshoward } 1388579ea343f8d4c74b44d5b5cb2df3ef7552b2f6eshoward } 1396f27d4f22a1ba5063968b8c322fa0845f3279adeEric Li 1408579ea343f8d4c74b44d5b5cb2df3ef7552b2f6eshoward private boolean enabled = true; 1418579ea343f8d4c74b44d5b5cb2df3ef7552b2f6eshoward private TestSelectorListener listener; 14297db5ba6cdee21d706dff3d1a85c354c8bfae6f9showard private StaticDataRepository staticData = StaticDataRepository.getRepository(); 143907f2159b2605a4b330ee76dbafc99c8bda4bca0showard private List<JSONObject> selectedTests = new ArrayList<JSONObject>(); 144d96fb9b34a65661008adab39b5ca998844ec7543Matthew Sartori private JSONArray imageTests = new JSONArray(); 1456f27d4f22a1ba5063968b8c322fa0845f3279adeEric Li 1466f27d4f22a1ba5063968b8c322fa0845f3279adeEric Li private Display display; 1476f27d4f22a1ba5063968b8c322fa0845f3279adeEric Li 1486f27d4f22a1ba5063968b8c322fa0845f3279adeEric Li public void bindDisplay(Display display) { 1496f27d4f22a1ba5063968b8c322fa0845f3279adeEric Li this.display = display; 1506f27d4f22a1ba5063968b8c322fa0845f3279adeEric Li 1516f27d4f22a1ba5063968b8c322fa0845f3279adeEric Li display.getTestTypeSelect().addItem(CLIENT_TYPE, CLIENT_TYPE); 1526f27d4f22a1ba5063968b8c322fa0845f3279adeEric Li display.getTestTypeSelect().addItem(SERVER_TYPE, SERVER_TYPE); 1536f27d4f22a1ba5063968b8c322fa0845f3279adeEric Li display.getTestTypeSelect().addChangeHandler(this); 1546f27d4f22a1ba5063968b8c322fa0845f3279adeEric Li 1556f27d4f22a1ba5063968b8c322fa0845f3279adeEric Li display.getTestTable().setWidgetFactory(this); 1566f27d4f22a1ba5063968b8c322fa0845f3279adeEric Li display.getTestTable().addListener(this); 1576f27d4f22a1ba5063968b8c322fa0845f3279adeEric Li 1588579ea343f8d4c74b44d5b5cb2df3ef7552b2f6eshoward populateTests(); 1596f27d4f22a1ba5063968b8c322fa0845f3279adeEric Li 1606f27d4f22a1ba5063968b8c322fa0845f3279adeEric Li display.getTestSelection().addListener(this); 161ad57645f1fd54b398a386fe184f5c47a91ddb1a3Jiaxi Luo display.getTestNameFilter().addChangeHandler(this); 1628579ea343f8d4c74b44d5b5cb2df3ef7552b2f6eshoward } 1636f27d4f22a1ba5063968b8c322fa0845f3279adeEric Li 1648579ea343f8d4c74b44d5b5cb2df3ef7552b2f6eshoward private void populateTests() { 1656f27d4f22a1ba5063968b8c322fa0845f3279adeEric Li display.getTestSelection().deselectAll(); 1666f27d4f22a1ba5063968b8c322fa0845f3279adeEric Li display.getTestTable().clear(); 1676f27d4f22a1ba5063968b8c322fa0845f3279adeEric Li 1688579ea343f8d4c74b44d5b5cb2df3ef7552b2f6eshoward JSONArray tests = staticData.getData("tests").isArray(); 169d96fb9b34a65661008adab39b5ca998844ec7543Matthew Sartori 1701043809018daa39812a64805c04456ce7b706d08Matthew Sartori if (usingTestsFromBuild()) { 171d96fb9b34a65661008adab39b5ca998844ec7543Matthew Sartori tests = imageTests; 172d96fb9b34a65661008adab39b5ca998844ec7543Matthew Sartori } 173d96fb9b34a65661008adab39b5ca998844ec7543Matthew Sartori 1748579ea343f8d4c74b44d5b5cb2df3ef7552b2f6eshoward for (JSONObject test : new JSONArrayList<JSONObject>(tests)) { 1756f27d4f22a1ba5063968b8c322fa0845f3279adeEric Li if (!includeExperimentalTests() 17697db5ba6cdee21d706dff3d1a85c354c8bfae6f9showard && test.get("experimental").isBoolean().booleanValue()) { 17797db5ba6cdee21d706dff3d1a85c354c8bfae6f9showard continue; 17897db5ba6cdee21d706dff3d1a85c354c8bfae6f9showard } 179d96fb9b34a65661008adab39b5ca998844ec7543Matthew Sartori String testType = test.get("test_type").isString().stringValue().toLowerCase(); 180ad57645f1fd54b398a386fe184f5c47a91ddb1a3Jiaxi Luo String testName = test.get("name").isString().stringValue().toLowerCase(); 181ad57645f1fd54b398a386fe184f5c47a91ddb1a3Jiaxi Luo if (testType.equals(getSelectedTestType()) && 182ad57645f1fd54b398a386fe184f5c47a91ddb1a3Jiaxi Luo testName.contains(getTestNameFilterText())) { 1836f27d4f22a1ba5063968b8c322fa0845f3279adeEric Li display.getTestTable().addRow(test); 1848579ea343f8d4c74b44d5b5cb2df3ef7552b2f6eshoward } 1858579ea343f8d4c74b44d5b5cb2df3ef7552b2f6eshoward } 1868579ea343f8d4c74b44d5b5cb2df3ef7552b2f6eshoward } 1878579ea343f8d4c74b44d5b5cb2df3ef7552b2f6eshoward 18897db5ba6cdee21d706dff3d1a85c354c8bfae6f9showard private boolean includeExperimentalTests() { 18997db5ba6cdee21d706dff3d1a85c354c8bfae6f9showard JSONObject user = staticData.getData("current_user").isObject(); 19097db5ba6cdee21d706dff3d1a85c354c8bfae6f9showard return user.get("show_experimental").isBoolean().booleanValue(); 19197db5ba6cdee21d706dff3d1a85c354c8bfae6f9showard } 1926f27d4f22a1ba5063968b8c322fa0845f3279adeEric Li 1934cd4763a855d8eb7d25fd4963babc432eb4d25e6showard @Override 1944cd4763a855d8eb7d25fd4963babc432eb4d25e6showard public void onRowClicked(int rowIndex, JSONObject row, boolean isRightClick) { 1958579ea343f8d4c74b44d5b5cb2df3ef7552b2f6eshoward TestInfoBuilder builder = new TestInfoBuilder(row); 1966f27d4f22a1ba5063968b8c322fa0845f3279adeEric Li display.getTestInfo().setHTML(builder.getInfo()); 1978579ea343f8d4c74b44d5b5cb2df3ef7552b2f6eshoward } 1986f27d4f22a1ba5063968b8c322fa0845f3279adeEric Li 1990d92da0fe19a095fc5678c4159e6a1756df65e48showard @Override 2000d92da0fe19a095fc5678c4159e6a1756df65e48showard public void onChange(ChangeEvent event) { 2018579ea343f8d4c74b44d5b5cb2df3ef7552b2f6eshoward populateTests(); 2028579ea343f8d4c74b44d5b5cb2df3ef7552b2f6eshoward notifyListener(); 2038579ea343f8d4c74b44d5b5cb2df3ef7552b2f6eshoward } 2046f27d4f22a1ba5063968b8c322fa0845f3279adeEric Li 2058579ea343f8d4c74b44d5b5cb2df3ef7552b2f6eshoward public Collection<JSONObject> getSelectedTests() { 206907f2159b2605a4b330ee76dbafc99c8bda4bca0showard return selectedTests; 2078579ea343f8d4c74b44d5b5cb2df3ef7552b2f6eshoward } 2088579ea343f8d4c74b44d5b5cb2df3ef7552b2f6eshoward 2098579ea343f8d4c74b44d5b5cb2df3ef7552b2f6eshoward public String getSelectedTestType() { 210d96fb9b34a65661008adab39b5ca998844ec7543Matthew Sartori return display.getTestTypeSelect().getSelectedName().toLowerCase(); 2118579ea343f8d4c74b44d5b5cb2df3ef7552b2f6eshoward } 2128579ea343f8d4c74b44d5b5cb2df3ef7552b2f6eshoward 213ad57645f1fd54b398a386fe184f5c47a91ddb1a3Jiaxi Luo public String getTestNameFilterText() { 214ad57645f1fd54b398a386fe184f5c47a91ddb1a3Jiaxi Luo return display.getTestNameFilter().getText().toLowerCase(); 215ad57645f1fd54b398a386fe184f5c47a91ddb1a3Jiaxi Luo } 216ad57645f1fd54b398a386fe184f5c47a91ddb1a3Jiaxi Luo 2178579ea343f8d4c74b44d5b5cb2df3ef7552b2f6eshoward public void setEnabled(boolean enabled) { 2188579ea343f8d4c74b44d5b5cb2df3ef7552b2f6eshoward this.enabled = enabled; 2196f27d4f22a1ba5063968b8c322fa0845f3279adeEric Li display.getTestTypeSelect().setEnabled(enabled); 220ad57645f1fd54b398a386fe184f5c47a91ddb1a3Jiaxi Luo display.getTestNameFilter().setEnabled(enabled); 2216f27d4f22a1ba5063968b8c322fa0845f3279adeEric Li display.getTestTable().refreshWidgets(); 2228579ea343f8d4c74b44d5b5cb2df3ef7552b2f6eshoward } 2238579ea343f8d4c74b44d5b5cb2df3ef7552b2f6eshoward 2248579ea343f8d4c74b44d5b5cb2df3ef7552b2f6eshoward public Widget createWidget(int row, int cell, JSONObject rowObject) { 2256f27d4f22a1ba5063968b8c322fa0845f3279adeEric Li TableClickWidget widget = 2266f27d4f22a1ba5063968b8c322fa0845f3279adeEric Li (TableClickWidget) display.getTestSelection().createWidget(row, cell, rowObject); 2278579ea343f8d4c74b44d5b5cb2df3ef7552b2f6eshoward if (!enabled) { 2288579ea343f8d4c74b44d5b5cb2df3ef7552b2f6eshoward widget.getContainedWidget().setEnabled(false); 2298579ea343f8d4c74b44d5b5cb2df3ef7552b2f6eshoward } 2308579ea343f8d4c74b44d5b5cb2df3ef7552b2f6eshoward return widget; 2318579ea343f8d4c74b44d5b5cb2df3ef7552b2f6eshoward } 2328579ea343f8d4c74b44d5b5cb2df3ef7552b2f6eshoward 2338579ea343f8d4c74b44d5b5cb2df3ef7552b2f6eshoward public void reset() { 2346f27d4f22a1ba5063968b8c322fa0845f3279adeEric Li display.getTestTypeSelect().selectByName(CLIENT_TYPE); 235ad57645f1fd54b398a386fe184f5c47a91ddb1a3Jiaxi Luo display.getTestNameFilter().setText(""); 23697db5ba6cdee21d706dff3d1a85c354c8bfae6f9showard populateTests(); 2378579ea343f8d4c74b44d5b5cb2df3ef7552b2f6eshoward } 2386f27d4f22a1ba5063968b8c322fa0845f3279adeEric Li 2398579ea343f8d4c74b44d5b5cb2df3ef7552b2f6eshoward private void notifyListener() { 2408579ea343f8d4c74b44d5b5cb2df3ef7552b2f6eshoward if (listener != null) { 2418579ea343f8d4c74b44d5b5cb2df3ef7552b2f6eshoward listener.onTestSelectionChanged(); 2428579ea343f8d4c74b44d5b5cb2df3ef7552b2f6eshoward } 2438579ea343f8d4c74b44d5b5cb2df3ef7552b2f6eshoward } 2448579ea343f8d4c74b44d5b5cb2df3ef7552b2f6eshoward 2458579ea343f8d4c74b44d5b5cb2df3ef7552b2f6eshoward public void setListener(TestSelectorListener listener) { 2468579ea343f8d4c74b44d5b5cb2df3ef7552b2f6eshoward this.listener = listener; 2478579ea343f8d4c74b44d5b5cb2df3ef7552b2f6eshoward } 2488579ea343f8d4c74b44d5b5cb2df3ef7552b2f6eshoward 2498579ea343f8d4c74b44d5b5cb2df3ef7552b2f6eshoward public void onAdd(Collection<JSONObject> objects) { 250907f2159b2605a4b330ee76dbafc99c8bda4bca0showard selectedTests.addAll(objects); 2518579ea343f8d4c74b44d5b5cb2df3ef7552b2f6eshoward notifyListener(); 2528579ea343f8d4c74b44d5b5cb2df3ef7552b2f6eshoward } 2538579ea343f8d4c74b44d5b5cb2df3ef7552b2f6eshoward 2548579ea343f8d4c74b44d5b5cb2df3ef7552b2f6eshoward public void onRemove(Collection<JSONObject> objects) { 255907f2159b2605a4b330ee76dbafc99c8bda4bca0showard selectedTests.removeAll(objects); 2568579ea343f8d4c74b44d5b5cb2df3ef7552b2f6eshoward notifyListener(); 2578579ea343f8d4c74b44d5b5cb2df3ef7552b2f6eshoward } 258d96fb9b34a65661008adab39b5ca998844ec7543Matthew Sartori 259d96fb9b34a65661008adab39b5ca998844ec7543Matthew Sartori public void setImageTests(JSONArray tests) { 260d96fb9b34a65661008adab39b5ca998844ec7543Matthew Sartori imageTests = tests; 261d96fb9b34a65661008adab39b5ca998844ec7543Matthew Sartori } 2621043809018daa39812a64805c04456ce7b706d08Matthew Sartori 2631043809018daa39812a64805c04456ce7b706d08Matthew Sartori public boolean usingTestsFromBuild() { 2641043809018daa39812a64805c04456ce7b706d08Matthew Sartori return imageTests.size() > 0; 2651043809018daa39812a64805c04456ce7b706d08Matthew Sartori } 2668579ea343f8d4c74b44d5b5cb2df3ef7552b2f6eshoward} 267