]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.scl.ui/src/org/simantics/scl/ui/tests/SCLTestsDialog.java
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.scl.ui / src / org / simantics / scl / ui / tests / SCLTestsDialog.java
diff --git a/bundles/org.simantics.scl.ui/src/org/simantics/scl/ui/tests/SCLTestsDialog.java b/bundles/org.simantics.scl.ui/src/org/simantics/scl/ui/tests/SCLTestsDialog.java
new file mode 100644 (file)
index 0000000..7b57e76
--- /dev/null
@@ -0,0 +1,160 @@
+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