--- /dev/null
+package org.simantics.scl.ui.tests;\r
+\r
+import java.util.Comparator;\r
+import java.util.List;\r
+\r
+import org.eclipse.core.runtime.CoreException;\r
+import org.eclipse.core.runtime.IProgressMonitor;\r
+import org.eclipse.core.runtime.IStatus;\r
+import org.eclipse.core.runtime.Status;\r
+import org.eclipse.jface.dialogs.IDialogConstants;\r
+import org.eclipse.jface.dialogs.IDialogSettings;\r
+import org.eclipse.jface.viewers.LabelProvider;\r
+import org.eclipse.swt.widgets.Button;\r
+import org.eclipse.swt.widgets.Composite;\r
+import org.eclipse.swt.widgets.Control;\r
+import org.eclipse.swt.widgets.Shell;\r
+import org.eclipse.ui.IMemento;\r
+import org.eclipse.ui.dialogs.FilteredItemsSelectionDialog;\r
+import org.eclipse.ui.dialogs.SearchPattern;\r
+import org.simantics.scl.compiler.testing.TestRunnable;\r
+import org.simantics.scl.ui.Activator;\r
+\r
+public class SCLTestsDialog extends FilteredItemsSelectionDialog {\r
+\r
+ private static final String SCL_TEST_DIALOG_SETTINGS = "SCLTestDialogSettings";\r
+ \r
+ private List<TestRunnable> tests;\r
+\r
+ public SCLTestsDialog(Shell shell, List<TestRunnable> tests, boolean multi) {\r
+ super(shell, multi);\r
+ this.tests = tests;\r
+ setTitle("Run SCL Tests");\r
+ setListLabelProvider(new LabelProvider() {\r
+ \r
+ @Override\r
+ public String getText(Object element) {\r
+ if (element != null)\r
+ return ((TestRunnable) element).getName();\r
+ return "No name!";\r
+ }\r
+ });\r
+ setSelectionHistory(new ResourceSelectionHistory());\r
+ }\r
+ \r
+ private class ResourceSelectionHistory extends SelectionHistory {\r
+ /*\r
+ * @see org.eclipse.ui.dialogs.FilteredItemsSelectionDialog.SelectionHistory#restoreItemFromMemento(org.eclipse.ui.IMemento)\r
+ */\r
+ protected Object restoreItemFromMemento(IMemento element) {\r
+ String testName = element.getString("test"); //$NON-NLS-1$\r
+ return findTestByName(testName);\r
+ }\r
+ /*\r
+ * @see org.eclipse.ui.dialogs.FilteredItemsSelectionDialog.SelectionHistory#storeItemToMemento(java.lang.Object,\r
+ * org.eclipse.ui.IMemento)\r
+ */\r
+ protected void storeItemToMemento(Object item, IMemento element) {\r
+ TestRunnable runnable = (TestRunnable) item;\r
+ element.putString("test", runnable.getName()); //$NON-NLS-1$\r
+ }\r
+ }\r
+ \r
+ private TestRunnable findTestByName(String name) {\r
+ for (TestRunnable runnable : tests) {\r
+ if (runnable.getName().equals(name))\r
+ return runnable;\r
+ }\r
+ return null;\r
+ }\r
+ \r
+ @Override\r
+ protected Control createExtendedContentArea(Composite parent) {\r
+ // TODO Auto-generated method stub\r
+ return null;\r
+ }\r
+ \r
+ @Override\r
+ protected void createButtonsForButtonBar(Composite parent) {\r
+ super.createButtonsForButtonBar(parent);\r
+ Button okButton = getButton(IDialogConstants.OK_ID);\r
+ okButton.setText("Run test");\r
+ setButtonLayoutData(okButton);\r
+ }\r
+\r
+ @Override\r
+ protected IDialogSettings getDialogSettings() {\r
+ IDialogSettings settings = Activator.getInstance().getDialogSettings()\r
+ .getSection(SCL_TEST_DIALOG_SETTINGS);\r
+ if (settings == null) {\r
+ settings = Activator.getInstance().getDialogSettings()\r
+ .addNewSection(SCL_TEST_DIALOG_SETTINGS);\r
+ }\r
+ return settings;\r
+ }\r
+\r
+ @Override\r
+ protected IStatus validateItem(Object item) {\r
+ return Status.OK_STATUS;\r
+ }\r
+\r
+ @Override\r
+ protected ItemsFilter createFilter() {\r
+ return new ItemsFilter() {\r
+ {\r
+ String patternText = getPattern();\r
+ patternMatcher = new SearchPattern();\r
+ if(patternText != null && patternText.length() > 0)\r
+ patternMatcher.setPattern(patternText);\r
+ else \r
+ patternMatcher.setPattern("**");\r
+ }\r
+ @Override\r
+ public boolean matchItem(Object item) {\r
+ String testName = ((TestRunnable) item).getName();\r
+ if(getPattern().indexOf('/') > 0)\r
+ return matches(testName);\r
+ else {\r
+ for(String part : (testName.split("/")))\r
+ if(matches(part))\r
+ return true;\r
+ return false;\r
+ }\r
+ }\r
+ \r
+ @Override\r
+ public boolean isConsistentItem(Object item) {\r
+ return true;\r
+ }\r
+ };\r
+ }\r
+\r
+ Comparator<TestRunnable> comparator = new Comparator<TestRunnable>() {\r
+ @Override\r
+ public int compare(TestRunnable o1, TestRunnable o2) {\r
+ return o1.getName().compareTo(o2.getName());\r
+ }\r
+ };\r
+ \r
+ @Override\r
+ protected Comparator<TestRunnable> getItemsComparator() {\r
+ return comparator;\r
+ }\r
+\r
+ @Override\r
+ protected void fillContentProvider(AbstractContentProvider contentProvider,\r
+ ItemsFilter itemsFilter, IProgressMonitor progressMonitor)\r
+ throws CoreException {\r
+ progressMonitor.beginTask("Searching tests..", tests.size());\r
+ for (TestRunnable test : tests) {\r
+ contentProvider.add(test, itemsFilter);\r
+ progressMonitor.worked(1);\r
+ }\r
+ progressMonitor.done();\r
+ }\r
+\r
+ @Override\r
+ public String getElementName(Object item) {\r
+ return ((TestRunnable) item).getName();\r
+ }\r
+}\r