aboutsummaryrefslogtreecommitdiffstats
path: root/src/com/itmill/toolkit/tests
diff options
context:
space:
mode:
authorJani Laakso <jani.laakso@itmill.com>2007-12-03 19:14:00 +0000
committerJani Laakso <jani.laakso@itmill.com>2007-12-03 19:14:00 +0000
commit362efe6fdf7c3a627e3bb7e63c33d21228619e6c (patch)
treeaeb506a9900f616d470edcc8b3afcafe853dc92e /src/com/itmill/toolkit/tests
parente84304f70234b3768502e44ef97f88f19e902ea0 (diff)
downloadvaadin-framework-362efe6fdf7c3a627e3bb7e63c33d21228619e6c.tar.gz
vaadin-framework-362efe6fdf7c3a627e3bb7e63c33d21228619e6c.zip
Packaging fixes
Added open source license and 3rd party licenses Building new package svn changeset:3129/svn branch:trunk
Diffstat (limited to 'src/com/itmill/toolkit/tests')
-rw-r--r--src/com/itmill/toolkit/tests/testbench/TestBench.java209
-rw-r--r--src/com/itmill/toolkit/tests/testbench/TestForAlignments.java62
-rw-r--r--src/com/itmill/toolkit/tests/testbench/TestForBasicApplicationLayout.java116
-rw-r--r--src/com/itmill/toolkit/tests/testbench/TestForContainerFilterable.java93
-rw-r--r--src/com/itmill/toolkit/tests/testbench/TestForMultipleStyleNames.java92
-rw-r--r--src/com/itmill/toolkit/tests/testbench/TestForPreconfiguredComponents.java182
-rw-r--r--src/com/itmill/toolkit/tests/testbench/TestForRichTextEditor.java53
-rw-r--r--src/com/itmill/toolkit/tests/testbench/TestForTrees.java162
-rw-r--r--src/com/itmill/toolkit/tests/testbench/TestForUpload.java345
-rw-r--r--src/com/itmill/toolkit/tests/testbench/TestForWindowOpen.java55
-rw-r--r--src/com/itmill/toolkit/tests/testbench/TestForWindowing.java84
-rw-r--r--src/com/itmill/toolkit/tests/testbench/TestSetVisibleAndCaching.java77
-rw-r--r--src/com/itmill/toolkit/tests/testbench/TestSplitPanel.java22
13 files changed, 1552 insertions, 0 deletions
diff --git a/src/com/itmill/toolkit/tests/testbench/TestBench.java b/src/com/itmill/toolkit/tests/testbench/TestBench.java
new file mode 100644
index 0000000000..35373cfabb
--- /dev/null
+++ b/src/com/itmill/toolkit/tests/testbench/TestBench.java
@@ -0,0 +1,209 @@
+package com.itmill.toolkit.tests.testbench;
+
+import java.io.File;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.Enumeration;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+
+import com.itmill.toolkit.Application;
+import com.itmill.toolkit.data.Property;
+import com.itmill.toolkit.data.util.HierarchicalContainer;
+import com.itmill.toolkit.terminal.Sizeable;
+import com.itmill.toolkit.ui.Component;
+import com.itmill.toolkit.ui.CustomComponent;
+import com.itmill.toolkit.ui.ExpandLayout;
+import com.itmill.toolkit.ui.Label;
+import com.itmill.toolkit.ui.Panel;
+import com.itmill.toolkit.ui.SplitPanel;
+import com.itmill.toolkit.ui.Tree;
+import com.itmill.toolkit.ui.Window;
+
+/**
+ * TestBench finds out testable classes within given java packages and adds them
+ * to menu from where they can be executed. Class is considered testable if it
+ * is of class CustomComponent.
+ *
+ * Note: edit TestBench.testablePackages array
+ *
+ * @author IT Mill Ltd.
+ *
+ */
+public class TestBench extends com.itmill.toolkit.Application implements
+ Property.ValueChangeListener {
+
+ // Add here packages which are used for finding testable classes
+ String[] testablePackages = { "com.itmill.toolkit.demo.testbench" };
+
+ HierarchicalContainer testables = new HierarchicalContainer();
+
+ Window mainWindow = new Window("TestBench window");
+
+ // Main layout consists of tree menu and body layout
+ SplitPanel mainLayout = new SplitPanel(SplitPanel.ORIENTATION_HORIZONTAL);
+
+ Tree menu;
+
+ Panel bodyLayout = new Panel();
+
+ HashMap itemCaptions = new HashMap();
+
+ public void init() {
+
+ // Add testable classes to hierarchical container
+ for (int p = 0; p < testablePackages.length; p++) {
+ testables.addItem(testablePackages[p]);
+ try {
+ List testableClasses = getTestableClassesForPackage(testablePackages[p]);
+ for (Iterator it = testableClasses.iterator(); it.hasNext();) {
+ Class t = (Class) it.next();
+ // ignore TestBench itself
+ if (t.equals(TestBench.class)) {
+ continue;
+ }
+ try {
+ testables.addItem(t);
+ itemCaptions.put(t, t.getName());
+ testables.setParent(t, testablePackages[p]);
+ continue;
+ } catch (Exception e) {
+ try {
+ testables.addItem(t);
+ itemCaptions.put(t, t.getName());
+ testables.setParent(t, testablePackages[p]);
+ continue;
+ } catch (Exception e1) {
+ e1.printStackTrace();
+ }
+ }
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+
+ menu = new Tree("Testables", testables);
+ for (Iterator i = itemCaptions.keySet().iterator(); i.hasNext();) {
+ Class testable = (Class) i.next();
+ // simplify captions
+ String name = testable.getName().substring(
+ testable.getName().lastIndexOf('.') + 1);
+ menu.setItemCaption(testable, name);
+ }
+ // expand all root items
+ for (Iterator i = menu.rootItemIds().iterator(); i.hasNext();) {
+ menu.expandItemsRecursively(i.next());
+ }
+
+ menu.addListener(this);
+ menu.setImmediate(true);
+
+ mainLayout.addComponent(menu);
+
+ bodyLayout.addStyleName("light");
+ bodyLayout.setHeight(100);
+ bodyLayout.setHeightUnits(Sizeable.UNITS_PERCENTAGE);
+ bodyLayout.setLayout(new ExpandLayout());
+
+ mainLayout.addComponent(bodyLayout);
+
+ mainLayout.setSplitPosition(30);
+
+ mainWindow.setLayout(mainLayout);
+
+ setMainWindow(mainWindow);
+ }
+
+ private Component createTestable(Class c) {
+ try {
+ Application app = (Application) c.newInstance();
+ app.init();
+ return app.getMainWindow().getLayout();
+ } catch (Exception e) {
+ try {
+ CustomComponent cc = (CustomComponent) c.newInstance();
+ return cc;
+ } catch (Exception e1) {
+ e1.printStackTrace();
+ return new Label("Cannot create custom component: "
+ + e1.toString());
+ }
+ }
+ }
+
+ // Handle menu selection and update body
+ public void valueChange(Property.ValueChangeEvent event) {
+ bodyLayout.removeAllComponents();
+ bodyLayout.setCaption(null);
+
+ Object o = menu.getValue();
+ if (o != null && o instanceof Class) {
+ Class c = (Class) o;
+ String title = c.getName();
+ bodyLayout.setCaption(title);
+ bodyLayout.addComponent(createTestable(c));
+ } else {
+ // NOP node selected or deselected tree item
+ }
+
+ }
+
+ /**
+ * Return all testable classes within given package. Class is considered
+ * testable if it's superclass is CustomComponent.
+ *
+ * @param packageName
+ * @return
+ * @throws ClassNotFoundException
+ */
+ public static List getTestableClassesForPackage(String packageName)
+ throws Exception {
+ ArrayList directories = new ArrayList();
+ try {
+ ClassLoader cld = Thread.currentThread().getContextClassLoader();
+ if (cld == null) {
+ throw new ClassNotFoundException("Can't get class loader.");
+ }
+ String path = packageName.replace('.', '/');
+ // Ask for all resources for the path
+ Enumeration resources = cld.getResources(path);
+ while (resources.hasMoreElements()) {
+ URL url = (URL) resources.nextElement();
+ directories.add(new File(url.getFile()));
+ }
+ } catch (Exception x) {
+ throw new Exception(packageName
+ + " does not appear to be a valid package.");
+ }
+
+ ArrayList classes = new ArrayList();
+ // For every directory identified capture all the .class files
+ for (Iterator it = directories.iterator(); it.hasNext();) {
+ File directory = (File) it.next();
+ if (directory.exists()) {
+ // Get the list of the files contained in the package
+ String[] files = directory.list();
+ for (int j = 0; j < files.length; j++) {
+ // we are only interested in .class files
+ if (files[j].endsWith(".class")) {
+ // removes the .class extension
+ String p = packageName + '.'
+ + files[j].substring(0, files[j].length() - 6);
+ Class c = Class.forName(p);
+ if (c.getSuperclass() != null) {
+ if ((c.getSuperclass()
+ .equals(com.itmill.toolkit.ui.CustomComponent.class))) {
+ classes.add(c);
+ }
+ }
+ }
+ }
+ }
+ }
+
+ return classes;
+ }
+
+}
diff --git a/src/com/itmill/toolkit/tests/testbench/TestForAlignments.java b/src/com/itmill/toolkit/tests/testbench/TestForAlignments.java
new file mode 100644
index 0000000000..858ddaa29b
--- /dev/null
+++ b/src/com/itmill/toolkit/tests/testbench/TestForAlignments.java
@@ -0,0 +1,62 @@
+package com.itmill.toolkit.tests.testbench;
+
+import com.itmill.toolkit.ui.Button;
+import com.itmill.toolkit.ui.CustomComponent;
+import com.itmill.toolkit.ui.DateField;
+import com.itmill.toolkit.ui.OrderedLayout;
+import com.itmill.toolkit.ui.TextField;
+
+public class TestForAlignments extends CustomComponent {
+
+ public TestForAlignments() {
+
+ OrderedLayout main = new OrderedLayout();
+
+ Button b1 = new Button("Right");
+ Button b2 = new Button("Left");
+ Button b3 = new Button("Bottom");
+ Button b4 = new Button("Top");
+ TextField t1 = new TextField("Right aligned");
+ TextField t2 = new TextField("Bottom aligned");
+ DateField d1 = new DateField("Center aligned");
+ DateField d2 = new DateField("Center aligned");
+
+ OrderedLayout vert = new OrderedLayout();
+ vert.addComponent(b1);
+ vert.addComponent(b2);
+ vert.addComponent(t1);
+ vert.addComponent(d1);
+ vert.setWidth(500);
+ vert.setComponentAlignment(b1, OrderedLayout.ALIGNMENT_RIGHT,
+ OrderedLayout.ALIGNMENT_TOP);
+ vert.setComponentAlignment(b2, OrderedLayout.ALIGNMENT_LEFT,
+ OrderedLayout.ALIGNMENT_TOP);
+ vert.setComponentAlignment(t1, OrderedLayout.ALIGNMENT_RIGHT,
+ OrderedLayout.ALIGNMENT_TOP);
+ vert.setComponentAlignment(d1,
+ OrderedLayout.ALIGNMENT_HORIZONTAL_CENTER,
+ OrderedLayout.ALIGNMENT_TOP);
+ OrderedLayout hori = new OrderedLayout(
+ OrderedLayout.ORIENTATION_HORIZONTAL);
+ hori.addComponent(b3);
+ hori.addComponent(b4);
+ hori.addComponent(t2);
+ hori.addComponent(d2);
+ hori.setHeight(200);
+ hori.setComponentAlignment(b3, OrderedLayout.ALIGNMENT_LEFT,
+ OrderedLayout.ALIGNMENT_BOTTOM);
+ hori.setComponentAlignment(b4, OrderedLayout.ALIGNMENT_LEFT,
+ OrderedLayout.ALIGNMENT_TOP);
+ hori.setComponentAlignment(t2, OrderedLayout.ALIGNMENT_LEFT,
+ OrderedLayout.ALIGNMENT_BOTTOM);
+ hori.setComponentAlignment(d2, OrderedLayout.ALIGNMENT_LEFT,
+ OrderedLayout.ALIGNMENT_VERTICAL_CENTER);
+
+ main.addComponent(vert);
+ main.addComponent(hori);
+
+ setCompositionRoot(main);
+
+ }
+
+}
diff --git a/src/com/itmill/toolkit/tests/testbench/TestForBasicApplicationLayout.java b/src/com/itmill/toolkit/tests/testbench/TestForBasicApplicationLayout.java
new file mode 100644
index 0000000000..822c408be1
--- /dev/null
+++ b/src/com/itmill/toolkit/tests/testbench/TestForBasicApplicationLayout.java
@@ -0,0 +1,116 @@
+package com.itmill.toolkit.tests.testbench;
+
+import java.sql.SQLException;
+import java.util.Locale;
+
+import com.itmill.toolkit.data.util.QueryContainer;
+import com.itmill.toolkit.demo.util.SampleDatabase;
+import com.itmill.toolkit.terminal.Sizeable;
+import com.itmill.toolkit.ui.Button;
+import com.itmill.toolkit.ui.CustomComponent;
+import com.itmill.toolkit.ui.DateField;
+import com.itmill.toolkit.ui.ExpandLayout;
+import com.itmill.toolkit.ui.Label;
+import com.itmill.toolkit.ui.OrderedLayout;
+import com.itmill.toolkit.ui.Panel;
+import com.itmill.toolkit.ui.SplitPanel;
+import com.itmill.toolkit.ui.TabSheet;
+import com.itmill.toolkit.ui.Table;
+import com.itmill.toolkit.ui.Button.ClickEvent;
+import com.itmill.toolkit.ui.Button.ClickListener;
+
+public class TestForBasicApplicationLayout extends CustomComponent {
+
+ private Button click;
+ private Button click2;
+ private TabSheet tab;
+
+ // Database provided with sample data
+ private SampleDatabase sampleDatabase;
+
+ public TestForBasicApplicationLayout() {
+
+ click = new Button("Set height -1", new ClickListener() {
+
+ public void buttonClick(ClickEvent event) {
+ tab.setHeight(-1);
+ }
+
+ });
+
+ click2 = new Button("Set height 100%", new ClickListener() {
+
+ public void buttonClick(ClickEvent event) {
+ tab.setHeight(100);
+ tab.setHeightUnits(Sizeable.UNITS_PERCENTAGE);
+ }
+
+ });
+
+ SplitPanel sp = new SplitPanel(SplitPanel.ORIENTATION_HORIZONTAL);
+ sp.setSplitPosition(290, Sizeable.UNITS_PIXELS);
+
+ SplitPanel sp2 = new SplitPanel(SplitPanel.ORIENTATION_VERTICAL);
+ sp2.setSplitPosition(255, Sizeable.UNITS_PIXELS);
+
+ Panel p = new Panel("Accordion Panel");
+ p.setSizeFull();
+
+ tab = new TabSheet();
+ tab.setSizeFull();
+
+ Panel report = new Panel("Monthly Program Runs", new ExpandLayout());
+ OrderedLayout controls = new OrderedLayout();
+ controls.setMargin(true);
+ controls.addComponent(new Label("Report tab"));
+ controls.addComponent(click);
+ controls.addComponent(click2);
+ report.addComponent(controls);
+ DateField cal = new DateField();
+ cal.setResolution(DateField.RESOLUTION_DAY);
+ cal.setLocale(new Locale("en", "US"));
+ report.addComponent(cal);
+ ((ExpandLayout) report.getLayout()).expand(controls);
+ report.addStyleName(Panel.STYLE_LIGHT);
+ report.setHeight(100);
+ report.setHeightUnits(Sizeable.UNITS_PERCENTAGE);
+
+ sp2.setFirstComponent(report);
+
+ Table table = new Table();
+ // populate Toolkit table component with test SQL table rows
+ try {
+ sampleDatabase = new SampleDatabase();
+ QueryContainer qc = new QueryContainer("SELECT * FROM employee",
+ sampleDatabase.getConnection());
+ table.setContainerDataSource(qc);
+ } catch (SQLException e) {
+ e.printStackTrace();
+ }
+ // define which columns should be visible on Table component
+ table.setVisibleColumns(new Object[] { "FIRSTNAME", "LASTNAME",
+ "TITLE", "UNIT" });
+ table.setItemCaptionPropertyId("ID");
+ table.setPageLength(15);
+ table.setSelectable(true);
+ table.setRowHeaderMode(Table.ROW_HEADER_MODE_INDEX);
+ table.setColumnCollapsingAllowed(true);
+ table.setColumnReorderingAllowed(true);
+ table.setSortDisabled(false);
+ table.setSizeFull();
+ table.addStyleName("table-inline");
+ sp2.setSecondComponent(table);
+
+ tab.addTab(new Label("Tab1"), "Summary", null);
+ tab.addTab(sp2, "Reports", null);
+ tab.addTab(new Label("Tab 3"), "Statistics", null);
+ tab.addTab(new Label("Tab 4"), "Error Tracking", null);
+ tab.setSelectedTab(sp2);
+
+ sp.setFirstComponent(p);
+ sp.setSecondComponent(tab);
+
+ setCompositionRoot(sp);
+ }
+
+}
diff --git a/src/com/itmill/toolkit/tests/testbench/TestForContainerFilterable.java b/src/com/itmill/toolkit/tests/testbench/TestForContainerFilterable.java
new file mode 100644
index 0000000000..93320ee0d8
--- /dev/null
+++ b/src/com/itmill/toolkit/tests/testbench/TestForContainerFilterable.java
@@ -0,0 +1,93 @@
+package com.itmill.toolkit.tests.testbench;
+
+import com.itmill.toolkit.data.util.IndexedContainer;
+import com.itmill.toolkit.terminal.Sizeable;
+import com.itmill.toolkit.ui.Button;
+import com.itmill.toolkit.ui.CustomComponent;
+import com.itmill.toolkit.ui.Label;
+import com.itmill.toolkit.ui.OrderedLayout;
+import com.itmill.toolkit.ui.Panel;
+import com.itmill.toolkit.ui.Table;
+import com.itmill.toolkit.ui.TextField;
+import com.itmill.toolkit.ui.Button.ClickEvent;
+
+public class TestForContainerFilterable extends CustomComponent {
+
+ OrderedLayout lo = new OrderedLayout();
+ IndexedContainer ic = new IndexedContainer();
+ Table t = new Table();
+ private static String parts[] = { "Neo", "Sa", "rem", "the", "adi", "za",
+ "tre", "day", "Ca", "re", "cen", "ter", "mi", "nal" };
+ TextField firstFilter = new TextField("first-filter");
+ TextField secondFilter = new TextField("second-filter");
+ Button filterButton = new Button("Filter");
+ Label count = new Label();
+
+ public TestForContainerFilterable() {
+ setCompositionRoot(lo);
+
+ // Init datasource
+ ic.addContainerProperty("first", String.class, "");
+ ic.addContainerProperty("second", String.class, "");
+ for (int i = 0; i < 1000; i++) {
+ Object id = ic.addItem();
+ ic.getContainerProperty(id, "first").setValue(randomWord());
+ ic.getContainerProperty(id, "second").setValue(randomWord());
+ }
+
+ // Init filtering view
+ Panel filterPanel = new Panel("Filter", new OrderedLayout(
+ OrderedLayout.ORIENTATION_HORIZONTAL));
+ filterPanel.setWidth(100);
+ filterPanel.setWidthUnits(Sizeable.UNITS_PERCENTAGE);
+ lo.addComponent(filterPanel);
+ filterPanel.addComponent(firstFilter);
+ filterPanel.addComponent(secondFilter);
+ filterPanel.addComponent(filterButton);
+ firstFilter
+ .setDescription("Filters first column in case-sensitive contains manner.");
+ secondFilter
+ .setDescription("Filters second column in case-insensitive prefix manner.");
+ filterPanel.addComponent(count);
+
+ // Table
+ lo.addComponent(t);
+ t.setPageLength(12);
+ t.setWidth(100);
+ t.setWidthUnits(Sizeable.UNITS_PERCENTAGE);
+ t.setContainerDataSource(ic);
+
+ // Handler
+ filterButton.addListener(new Button.ClickListener() {
+ public void buttonClick(ClickEvent event) {
+ ic.removeAllContainerFilters();
+ if (firstFilter.toString().length() > 0) {
+ ic.addContainerFilter("first", firstFilter.toString(), false,
+ false);
+ }
+ if (secondFilter.toString().length() > 0) {
+ ic.addContainerFilter("second", secondFilter.toString(), true,
+ true);
+ }
+ count.setValue("Rows in table: " + ic.size());
+ }
+ });
+
+ // Resetbutton
+ lo.addComponent(new Button("Rebind table datasource",
+ new Button.ClickListener() {
+ public void buttonClick(ClickEvent event) {
+ t.setContainerDataSource(ic);
+ }
+ }));
+ }
+
+ private String randomWord() {
+ int len = (int) (Math.random() * 4);
+ StringBuffer buf = new StringBuffer();
+ while (len-- >= 0) {
+ buf.append(parts[(int) (Math.random() * parts.length)]);
+ }
+ return buf.toString();
+ }
+}
diff --git a/src/com/itmill/toolkit/tests/testbench/TestForMultipleStyleNames.java b/src/com/itmill/toolkit/tests/testbench/TestForMultipleStyleNames.java
new file mode 100644
index 0000000000..a4649bbb18
--- /dev/null
+++ b/src/com/itmill/toolkit/tests/testbench/TestForMultipleStyleNames.java
@@ -0,0 +1,92 @@
+package com.itmill.toolkit.tests.testbench;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Iterator;
+
+import com.itmill.toolkit.data.Property.ValueChangeEvent;
+import com.itmill.toolkit.data.Property.ValueChangeListener;
+import com.itmill.toolkit.data.util.IndexedContainer;
+import com.itmill.toolkit.ui.CustomComponent;
+import com.itmill.toolkit.ui.Label;
+import com.itmill.toolkit.ui.OrderedLayout;
+import com.itmill.toolkit.ui.TwinColSelect;
+
+/**
+ * TODO: Note you need to add Theme under WebContent/ITMILL/Themes/mytheme in
+ * order to see actual visible results on the browser. Currently changes are
+ * visible only by inspecting DOM.
+ *
+ * @author IT Mill Ltd.
+ */
+public class TestForMultipleStyleNames extends CustomComponent implements
+ ValueChangeListener {
+
+ private final OrderedLayout main = new OrderedLayout();
+
+ private Label l;
+
+ private final TwinColSelect s = new TwinColSelect();
+
+ private ArrayList styleNames2;
+
+ public TestForMultipleStyleNames() {
+ setCompositionRoot(main);
+ createNewView();
+ }
+
+ public void createNewView() {
+ main.removeAllComponents();
+ main.addComponent(new Label(
+ "TK5 supports multiple stylenames for components."));
+ main.addComponent(new Label("Note you need to add Theme under"
+ + " WebContent/ITMILL/Themes/mytheme"
+ + " in order to see actual visible results"
+ + " on the browser. Currently changes are"
+ + " visible only by inspecting DOM."));
+
+ styleNames2 = new ArrayList();
+
+ styleNames2.add("red");
+ styleNames2.add("bold");
+ styleNames2.add("italic");
+
+ s.setContainerDataSource(new IndexedContainer(styleNames2));
+ s.addListener(this);
+ s.setImmediate(true);
+ main.addComponent(s);
+
+ l = new Label("Test labele");
+ main.addComponent(l);
+
+ }
+
+ public void valueChange(ValueChangeEvent event) {
+
+ String currentStyle = l.getStyle();
+ String[] tmp = currentStyle.split(" ");
+ ArrayList curStyles = new ArrayList();
+ for (int i = 0; i < tmp.length; i++) {
+ if (tmp[i] != "") {
+ curStyles.add(tmp[i]);
+ }
+ }
+
+ Collection styles = (Collection) s.getValue();
+
+ for (Iterator iterator = styles.iterator(); iterator.hasNext();) {
+ String styleName = (String) iterator.next();
+ if (curStyles.contains(styleName)) {
+ // already added
+ curStyles.remove(styleName);
+ } else {
+ l.addStyleName(styleName);
+ }
+ }
+ for (Iterator iterator2 = curStyles.iterator(); iterator2.hasNext();) {
+ String object = (String) iterator2.next();
+ l.removeStyleName(object);
+ }
+ }
+
+}
diff --git a/src/com/itmill/toolkit/tests/testbench/TestForPreconfiguredComponents.java b/src/com/itmill/toolkit/tests/testbench/TestForPreconfiguredComponents.java
new file mode 100644
index 0000000000..99ca0e3089
--- /dev/null
+++ b/src/com/itmill/toolkit/tests/testbench/TestForPreconfiguredComponents.java
@@ -0,0 +1,182 @@
+package com.itmill.toolkit.tests.testbench;
+
+import com.itmill.toolkit.event.Action;
+import com.itmill.toolkit.event.Action.Handler;
+import com.itmill.toolkit.ui.AbstractSelect;
+import com.itmill.toolkit.ui.Button;
+import com.itmill.toolkit.ui.CheckBox;
+import com.itmill.toolkit.ui.Component;
+import com.itmill.toolkit.ui.CustomComponent;
+import com.itmill.toolkit.ui.Label;
+import com.itmill.toolkit.ui.NativeSelect;
+import com.itmill.toolkit.ui.OptionGroup;
+import com.itmill.toolkit.ui.OrderedLayout;
+import com.itmill.toolkit.ui.Panel;
+import com.itmill.toolkit.ui.Tree;
+import com.itmill.toolkit.ui.TwinColSelect;
+import com.itmill.toolkit.ui.Button.ClickEvent;
+import com.itmill.toolkit.ui.Button.ClickListener;
+
+/**
+ * @author IT Mill Ltd.
+ */
+public class TestForPreconfiguredComponents extends CustomComponent implements
+ Handler {
+
+ private static final String[] firstnames = new String[] { "John", "Mary",
+ "Joe", "Sarah", "Jeff", "Jane", "Peter", "Marc", "Josie", "Linus" };
+
+ private static final String[] lastnames = new String[] { "Torvalds",
+ "Smith", "Jones", "Beck", "Sheridan", "Picard", "Hill", "Fielding",
+ "Einstein" };
+
+ private final OrderedLayout main = new OrderedLayout();
+
+ private final Action[] actions = new Action[] { new Action("edit"),
+ new Action("delete") };
+
+ private Panel al;
+
+ private Tree contextTree;
+
+ public TestForPreconfiguredComponents() {
+
+ setCompositionRoot(main);
+ createNewView();
+ }
+
+ public void createNewView() {
+ main.removeAllComponents();
+ main
+ .addComponent(new Label(
+ "In Toolkit 5 we introduce new componens. Previously we"
+ + " usually used setStyle or some other methods on possibly "
+ + "multiple steps to configure component for ones needs. These new "
+ + "server side components are mostly just classes that in constructor "
+ + "set base class to state that programmer wants."));
+
+ main.addComponent(new Button("commit"));
+
+ Panel test = createTestBench(new CheckBox());
+ test.setCaption("CheckBox (configured from button)");
+ main.addComponent(test);
+
+ AbstractSelect s = new TwinColSelect();
+ fillSelect(s, 20);
+ test = createTestBench(s);
+ test.setCaption("TwinColSelect (configured from select)");
+ main.addComponent(test);
+
+ s = new NativeSelect();
+ fillSelect(s, 20);
+ test = createTestBench(s);
+ test.setCaption("Native (configured from select)");
+ main.addComponent(test);
+
+ s = new OptionGroup();
+ fillSelect(s, 20);
+ test = createTestBench(s);
+ test.setCaption("OptionGroup (configured from select)");
+ main.addComponent(test);
+
+ s = new OptionGroup();
+ fillSelect(s, 20);
+ s.setMultiSelect(true);
+ test = createTestBench(s);
+ test
+ .setCaption("OptionGroup + multiselect manually (configured from select)");
+ main.addComponent(test);
+
+ Button b = new Button("refresh view", this, "createNewView");
+ main.addComponent(b);
+
+ }
+
+ public static void fillSelect(AbstractSelect s, int items) {
+ for (int i = 0; i < items; i++) {
+ String name = firstnames[(int) (Math.random() * (firstnames.length - 1))]
+ + " "
+ + lastnames[(int) (Math.random() * (lastnames.length - 1))];
+ s.addItem(name);
+ }
+ }
+
+ public Tree createTestTree() {
+ Tree t = new Tree("Tree");
+ String[] names = new String[100];
+ for (int i = 0; i < names.length; i++) {
+ names[i] = firstnames[(int) (Math.random() * (firstnames.length - 1))]
+ + " "
+ + lastnames[(int) (Math.random() * (lastnames.length - 1))];
+ }
+
+ // Create tree
+ t = new Tree("Organization Structure");
+ for (int i = 0; i < 100; i++) {
+ t.addItem(names[i]);
+ String parent = names[(int) (Math.random() * (names.length - 1))];
+ if (t.containsId(parent)) {
+ t.setParent(names[i], parent);
+ }
+ }
+
+ // Forbid childless people to have children (makes them leaves)
+ for (int i = 0; i < 100; i++) {
+ if (!t.hasChildren(names[i])) {
+ t.setChildrenAllowed(names[i], false);
+ }
+ }
+ return t;
+ }
+
+ public Panel createTestBench(Component t) {
+ Panel ol = new Panel();
+ ol.setLayout(new OrderedLayout(OrderedLayout.ORIENTATION_HORIZONTAL));
+
+ ol.addComponent(t);
+
+ final OrderedLayout ol2 = new OrderedLayout(
+ OrderedLayout.ORIENTATION_HORIZONTAL);
+ final Panel status = new Panel("Events");
+ final Button clear = new Button("clear event log");
+ clear.addListener(new ClickListener() {
+ public void buttonClick(ClickEvent event) {
+ status.removeAllComponents();
+ status.addComponent(ol2);
+ }
+ });
+ ol2.addComponent(clear);
+ final Button commit = new Button("commit changes");
+ ol2.addComponent(commit);
+ status.addComponent(ol2);
+
+ status.setHeight(300);
+ status.setWidth(400);
+
+ ol.addComponent(status);
+
+ t.addListener(new Listener() {
+ public void componentEvent(Event event) {
+ status.addComponent(new Label(event.getClass().getName()));
+ status.addComponent(new Label("selected: "
+ + event.getSource().toString()));
+ }
+ });
+
+ return ol;
+ }
+
+ public Action[] getActions(Object target, Object sender) {
+ return actions;
+ }
+
+ public void handleAction(Action action, Object sender, Object target) {
+ if (action == actions[1]) {
+ al.addComponent(new Label("Delete selected on " + target));
+ contextTree.removeItem(target);
+
+ } else {
+ al.addComponent(new Label("Edit selected on " + target));
+ }
+ }
+}
diff --git a/src/com/itmill/toolkit/tests/testbench/TestForRichTextEditor.java b/src/com/itmill/toolkit/tests/testbench/TestForRichTextEditor.java
new file mode 100644
index 0000000000..ebefb888c9
--- /dev/null
+++ b/src/com/itmill/toolkit/tests/testbench/TestForRichTextEditor.java
@@ -0,0 +1,53 @@
+package com.itmill.toolkit.tests.testbench;
+
+import com.itmill.toolkit.data.Property.ValueChangeEvent;
+import com.itmill.toolkit.data.Property.ValueChangeListener;
+import com.itmill.toolkit.ui.Button;
+import com.itmill.toolkit.ui.CustomComponent;
+import com.itmill.toolkit.ui.Label;
+import com.itmill.toolkit.ui.OrderedLayout;
+import com.itmill.toolkit.ui.RichTextArea;
+
+/**
+ *
+ * @author IT Mill Ltd.
+ */
+public class TestForRichTextEditor extends CustomComponent implements
+ ValueChangeListener {
+
+ private OrderedLayout main = new OrderedLayout();
+
+ private Label l;
+
+ private RichTextArea rte;
+
+ public TestForRichTextEditor() {
+
+ setCompositionRoot(main);
+ createNewView();
+ }
+
+ public void createNewView() {
+ main.removeAllComponents();
+ main.addComponent(new Label(
+ "RTE uses google richtextArea and their examples toolbar."));
+
+ rte = new RichTextArea();
+ rte.addListener(this);
+
+ rte.setEnabled(false);
+
+ main.addComponent(rte);
+
+ main.addComponent(new Button("commit content to label below"));
+
+ l = new Label("", Label.CONTENT_XHTML);
+ main.addComponent(l);
+
+ }
+
+ public void valueChange(ValueChangeEvent event) {
+ l.setValue(rte.getValue());
+ }
+
+}
diff --git a/src/com/itmill/toolkit/tests/testbench/TestForTrees.java b/src/com/itmill/toolkit/tests/testbench/TestForTrees.java
new file mode 100644
index 0000000000..cf89b2c27b
--- /dev/null
+++ b/src/com/itmill/toolkit/tests/testbench/TestForTrees.java
@@ -0,0 +1,162 @@
+package com.itmill.toolkit.tests.testbench;
+
+import com.itmill.toolkit.event.Action;
+import com.itmill.toolkit.event.Action.Handler;
+import com.itmill.toolkit.ui.Button;
+import com.itmill.toolkit.ui.Component;
+import com.itmill.toolkit.ui.CustomComponent;
+import com.itmill.toolkit.ui.Label;
+import com.itmill.toolkit.ui.OrderedLayout;
+import com.itmill.toolkit.ui.Panel;
+import com.itmill.toolkit.ui.Tree;
+import com.itmill.toolkit.ui.Button.ClickEvent;
+import com.itmill.toolkit.ui.Button.ClickListener;
+
+/**
+ * Some test cases for trees. Events panel logs events that happen server side.
+ *
+ * @author IT Mill Ltd.
+ */
+public class TestForTrees extends CustomComponent implements Handler {
+
+ private static final String[] firstnames = new String[] { "John", "Mary",
+ "Joe", "Sarah", "Jeff", "Jane", "Peter", "Marc", "Josie", "Linus" };
+
+ private static final String[] lastnames = new String[] { "Torvalds",
+ "Smith", "Jones", "Beck", "Sheridan", "Picard", "Hill", "Fielding",
+ "Einstein" };
+
+ private OrderedLayout main = new OrderedLayout();
+
+ private Action[] actions = new Action[] { new Action("edit"),
+ new Action("delete") };
+
+ private Panel al;
+
+ private Tree contextTree;
+
+ public TestForTrees() {
+
+ setCompositionRoot(main);
+ createNewView();
+ }
+
+ public void createNewView() {
+ main.removeAllComponents();
+ main
+ .addComponent(new Label(
+ "Some test cases for trees. Events panel logs events that happen server side."));
+
+ main.addComponent(new Button("commit"));
+
+ Tree t;
+
+ t = createTestTree();
+ t.setCaption("Default settings");
+ main.addComponent(createTestBench(t));
+
+ t = createTestTree();
+ t.setCaption("Multiselect settings");
+ t.setMultiSelect(true);
+ main.addComponent(createTestBench(t));
+
+ t = createTestTree();
+ t.setCaption("Multiselect and immediate");
+ t.setImmediate(true);
+ t.setMultiSelect(true);
+ main.addComponent(createTestBench(t));
+
+ t = createTestTree();
+ t.setCaption("immediate");
+ t.setImmediate(true);
+ main.addComponent(createTestBench(t));
+
+ t = createTestTree();
+ t.setCaption("with actions");
+ t.setImmediate(true);
+ t.addActionHandler(this);
+ OrderedLayout ol = (OrderedLayout) createTestBench(t);
+ al = new Panel("action log");
+ ol.addComponent(al);
+ main.addComponent(ol);
+ contextTree = t;
+
+ Button b = new Button("refresh view", this, "createNewView");
+ main.addComponent(b);
+
+ }
+
+ public Tree createTestTree() {
+ Tree t = new Tree("Tree");
+ String[] names = new String[100];
+ for (int i = 0; i < names.length; i++) {
+ names[i] = firstnames[(int) (Math.random() * (firstnames.length - 1))]
+ + " "
+ + lastnames[(int) (Math.random() * (lastnames.length - 1))];
+ }
+
+ // Create tree
+ t = new Tree("Organization Structure");
+ for (int i = 0; i < 100; i++) {
+ t.addItem(names[i]);
+ String parent = names[(int) (Math.random() * (names.length - 1))];
+ if (t.containsId(parent)) {
+ t.setParent(names[i], parent);
+ }
+ }
+
+ // Forbid childless people to have children (makes them leaves)
+ for (int i = 0; i < 100; i++) {
+ if (!t.hasChildren(names[i])) {
+ t.setChildrenAllowed(names[i], false);
+ }
+ }
+ return t;
+ }
+
+ public Component createTestBench(Tree t) {
+ OrderedLayout ol = new OrderedLayout();
+ ol.setOrientation(OrderedLayout.ORIENTATION_HORIZONTAL);
+
+ ol.addComponent(t);
+
+ final Panel status = new Panel("Events");
+ final Button clear = new Button("c");
+ clear.addListener(new ClickListener() {
+ public void buttonClick(ClickEvent event) {
+ status.removeAllComponents();
+ status.addComponent(clear);
+ }
+ });
+ status.addComponent(clear);
+
+ status.setHeight(300);
+ status.setWidth(400);
+
+ ol.addComponent(status);
+
+ t.addListener(new Listener() {
+ public void componentEvent(Event event) {
+ status.addComponent(new Label(event.getClass().getName()));
+ status.addComponent(new Label("selected: "
+ + event.getSource().toString()));
+ }
+ });
+
+ return ol;
+ }
+
+ public Action[] getActions(Object target, Object sender) {
+ return actions;
+ }
+
+ public void handleAction(Action action, Object sender, Object target) {
+ if (action == actions[1]) {
+ al.addComponent(new Label("Delete selected on " + target));
+ contextTree.removeItem(target);
+
+ } else {
+ al.addComponent(new Label("Edit selected on " + target));
+ }
+ }
+}
diff --git a/src/com/itmill/toolkit/tests/testbench/TestForUpload.java b/src/com/itmill/toolkit/tests/testbench/TestForUpload.java
new file mode 100644
index 0000000000..2e6c5d4e29
--- /dev/null
+++ b/src/com/itmill/toolkit/tests/testbench/TestForUpload.java
@@ -0,0 +1,345 @@
+package com.itmill.toolkit.tests.testbench;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+
+import com.itmill.toolkit.data.Property.ValueChangeEvent;
+import com.itmill.toolkit.terminal.StreamResource;
+import com.itmill.toolkit.ui.AbstractField;
+import com.itmill.toolkit.ui.Button;
+import com.itmill.toolkit.ui.CustomComponent;
+import com.itmill.toolkit.ui.Label;
+import com.itmill.toolkit.ui.Layout;
+import com.itmill.toolkit.ui.Link;
+import com.itmill.toolkit.ui.OrderedLayout;
+import com.itmill.toolkit.ui.Panel;
+import com.itmill.toolkit.ui.ProgressIndicator;
+import com.itmill.toolkit.ui.Select;
+import com.itmill.toolkit.ui.Upload;
+import com.itmill.toolkit.ui.Button.ClickEvent;
+import com.itmill.toolkit.ui.Upload.FailedEvent;
+import com.itmill.toolkit.ui.Upload.FailedListener;
+import com.itmill.toolkit.ui.Upload.FinishedEvent;
+import com.itmill.toolkit.ui.Upload.FinishedListener;
+import com.itmill.toolkit.ui.Upload.StartedEvent;
+import com.itmill.toolkit.ui.Upload.StartedListener;
+import com.itmill.toolkit.ui.Upload.SucceededEvent;
+import com.itmill.toolkit.ui.Upload.SucceededListener;
+
+public class TestForUpload extends CustomComponent implements
+ Upload.FinishedListener, FailedListener, SucceededListener,
+ Upload.ProgressListener, StartedListener {
+
+ Layout main = new OrderedLayout();
+
+ Buffer buffer = new MemoryBuffer();
+
+ Panel status = new Panel("Uploaded file:");
+
+ private final Upload up;
+
+ private final Label l;
+
+ private final ProgressIndicator pi = new ProgressIndicator();
+
+ private final Label memoryStatus;
+
+ private final Select uploadBufferSelector;
+
+ public TestForUpload() {
+ setCompositionRoot(main);
+ main.addComponent(new Label(
+ "This is a simple test for upload application. "
+ + "Upload should work with big files and concurrent "
+ + "requests should not be blocked. Button 'b' reads "
+ + "current state into label below it. Memory receiver "
+ + "streams upload contents into memory. You may track"
+ + "consumption."
+ + "tempfile receiver writes upload to file and "
+ + "should have low memory consumption."));
+
+ main
+ .addComponent(new Label(
+ "Clicking on button b updates information about upload components status or same with garbage collector."));
+
+ up = new Upload("Upload", buffer);
+ up.setImmediate(true);
+ up.addListener((FinishedListener) this);
+ up.addListener((FailedListener) this);
+ up.addListener((SucceededListener) this);
+ up.addListener((StartedListener) this);
+
+ up.setProgressListener(this);
+
+ Button b = new Button("b", this, "readState");
+
+ Button c = new Button("b with gc", this, "gc");
+
+ main.addComponent(b);
+ main.addComponent(c);
+
+ uploadBufferSelector = new Select("Receiver type");
+ uploadBufferSelector.setImmediate(true);
+ uploadBufferSelector.addItem("memory");
+ uploadBufferSelector.setValue("memory");
+ uploadBufferSelector.addItem("tempfile");
+ uploadBufferSelector
+ .addListener(new AbstractField.ValueChangeListener() {
+ public void valueChange(ValueChangeEvent event) {
+ setBuffer();
+ }
+ });
+ main.addComponent(uploadBufferSelector);
+
+ main.addComponent(up);
+ l = new Label("Idle");
+ main.addComponent(l);
+
+ pi.setVisible(false);
+ pi.setPollingInterval(1000);
+ main.addComponent(pi);
+
+ memoryStatus = new Label();
+ main.addComponent(memoryStatus);
+
+ status.setVisible(false);
+ main.addComponent(status);
+
+ Button restart = new Button("R");
+ restart.addListener(new Button.ClickListener() {
+
+ public void buttonClick(ClickEvent event) {
+ getApplication().close();
+ }
+ });
+ main.addComponent(restart);
+
+ }
+
+ private void setBuffer() {
+ String id = (String) uploadBufferSelector.getValue();
+ if ("memory".equals(id)) {
+ buffer = new MemoryBuffer();
+ } else if ("tempfile".equals(id)) {
+ buffer = new TmpFileBuffer();
+ }
+ up.setReceiver(buffer);
+ }
+
+ public void gc() {
+ Runtime.getRuntime().gc();
+ readState();
+ }
+
+ public void readState() {
+ StringBuffer sb = new StringBuffer();
+
+ if (up.isUploading()) {
+ sb.append("Uploading...");
+ sb.append(up.getBytesRead());
+ sb.append("/");
+ sb.append(up.getUploadSize());
+ sb.append(" ");
+ sb.append(Math.round(100 * up.getBytesRead()
+ / (double) up.getUploadSize()));
+ sb.append("%");
+ } else {
+ sb.append("Idle");
+ }
+ l.setValue(sb.toString());
+ refreshMemUsage();
+ }
+
+ public void uploadFinished(FinishedEvent event) {
+ status.removeAllComponents();
+ InputStream stream = buffer.getStream();
+ if (stream == null) {
+ status.addComponent(new Label(
+ "Upload finished, but output buffer is null!!"));
+ } else {
+ status
+ .addComponent(new Label("<b>Name:</b> "
+ + event.getFilename(), Label.CONTENT_XHTML));
+ status.addComponent(new Label("<b>Mimetype:</b> "
+ + event.getMIMEType(), Label.CONTENT_XHTML));
+ status.addComponent(new Label("<b>Size:</b> " + event.getLength()
+ + " bytes.", Label.CONTENT_XHTML));
+
+ status.addComponent(new Link("Download " + buffer.getFileName(),
+ new StreamResource(buffer, buffer.getFileName(),
+ getApplication())));
+
+ status.setVisible(true);
+ }
+ }
+
+ public interface Buffer extends StreamResource.StreamSource,
+ Upload.Receiver {
+
+ String getFileName();
+ }
+
+ public class MemoryBuffer implements Buffer {
+ ByteArrayOutputStream outputBuffer = null;
+
+ String mimeType;
+
+ String fileName;
+
+ public MemoryBuffer() {
+
+ }
+
+ public InputStream getStream() {
+ if (outputBuffer == null) {
+ return null;
+ }
+ return new ByteArrayInputStream(outputBuffer.toByteArray());
+ }
+
+ /**
+ * @see com.itmill.toolkit.ui.Upload.Receiver#receiveUpload(String,
+ * String)
+ */
+ public OutputStream receiveUpload(String filename, String MIMEType) {
+ fileName = filename;
+ mimeType = MIMEType;
+ outputBuffer = new ByteArrayOutputStream();
+ return outputBuffer;
+ }
+
+ /**
+ * Returns the fileName.
+ *
+ * @return String
+ */
+ public String getFileName() {
+ return fileName;
+ }
+
+ /**
+ * Returns the mimeType.
+ *
+ * @return String
+ */
+ public String getMimeType() {
+ return mimeType;
+ }
+
+ }
+
+ public class TmpFileBuffer implements Buffer {
+ String mimeType;
+
+ String fileName;
+
+ private File file;
+
+ private FileInputStream stream;
+
+ public TmpFileBuffer() {
+ String tempFileName = "upload_tmpfile_"
+ + System.currentTimeMillis();
+ try {
+ file = File.createTempFile(tempFileName, null);
+ } catch (IOException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
+
+ }
+
+ public InputStream getStream() {
+ if (file == null) {
+ return null;
+ }
+ try {
+ return new FileInputStream(file);
+ } catch (FileNotFoundException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
+ return null;
+ }
+
+ /**
+ * @see com.itmill.toolkit.ui.Upload.Receiver#receiveUpload(String,
+ * String)
+ */
+ public OutputStream receiveUpload(String filename, String MIMEType) {
+ fileName = filename;
+ mimeType = MIMEType;
+ try {
+ return new FileOutputStream(file);
+ } catch (FileNotFoundException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
+ return null;
+ }
+
+ /**
+ * Returns the fileName.
+ *
+ * @return String
+ */
+ public String getFileName() {
+ return fileName;
+ }
+
+ /**
+ * Returns the mimeType.
+ *
+ * @return String
+ */
+ public String getMimeType() {
+ return mimeType;
+ }
+
+ }
+
+ public void uploadFailed(FailedEvent event) {
+ System.out.println(event);
+
+ System.out.println(event.getSource());
+
+ }
+
+ public void uploadSucceeded(SucceededEvent event) {
+ pi.setVisible(false);
+ l.setValue("Finished upload, idle");
+ System.out.println(event);
+ setBuffer();
+ }
+
+ public void updateProgress(long readBytes, long contentLenght) {
+ pi.setValue(new Float(readBytes / (float) contentLenght));
+
+ refreshMemUsage();
+ }
+
+ private void refreshMemUsage() {
+ memoryStatus.setValue("Not available in Java 1.4");
+ /*
+ * StringBuffer mem = new StringBuffer(); MemoryMXBean mmBean =
+ * ManagementFactory.getMemoryMXBean(); mem.append("Heap (M):");
+ * mem.append(mmBean.getHeapMemoryUsage().getUsed() / 1048576);
+ * mem.append(" |�Non-Heap (M):");
+ * mem.append(mmBean.getNonHeapMemoryUsage().getUsed() / 1048576);
+ * memoryStatus.setValue(mem.toString());
+ */
+ }
+
+ public void uploadStarted(StartedEvent event) {
+ pi.setVisible(true);
+ l.setValue("Started uploading file " + event.getFilename());
+ }
+
+}
diff --git a/src/com/itmill/toolkit/tests/testbench/TestForWindowOpen.java b/src/com/itmill/toolkit/tests/testbench/TestForWindowOpen.java
new file mode 100644
index 0000000000..b8f94e13d7
--- /dev/null
+++ b/src/com/itmill/toolkit/tests/testbench/TestForWindowOpen.java
@@ -0,0 +1,55 @@
+package com.itmill.toolkit.tests.testbench;
+
+import com.itmill.toolkit.terminal.ExternalResource;
+import com.itmill.toolkit.ui.Button;
+import com.itmill.toolkit.ui.CustomComponent;
+import com.itmill.toolkit.ui.OrderedLayout;
+import com.itmill.toolkit.ui.Button.ClickEvent;
+
+public class TestForWindowOpen extends CustomComponent {
+
+ public TestForWindowOpen() {
+
+ OrderedLayout main = new OrderedLayout();
+ setCompositionRoot(main);
+
+ main.addComponent(new Button("Open in this window",
+ new Button.ClickListener() {
+
+ public void buttonClick(ClickEvent event) {
+ ExternalResource r = new ExternalResource(
+ "http://www.google.com");
+ getApplication().getMainWindow().open(r);
+
+ }
+
+ }));
+
+ main.addComponent(new Button("Open in target \"mytarget\"",
+ new Button.ClickListener() {
+
+ public void buttonClick(ClickEvent event) {
+ ExternalResource r = new ExternalResource(
+ "http://www.google.com");
+ getApplication().getMainWindow().open(r, "mytarget");
+
+ }
+
+ }));
+
+ main.addComponent(new Button("Open in target \"secondtarget\"",
+ new Button.ClickListener() {
+
+ public void buttonClick(ClickEvent event) {
+ ExternalResource r = new ExternalResource(
+ "http://www.google.com");
+ getApplication().getMainWindow()
+ .open(r, "secondtarget");
+
+ }
+
+ }));
+
+ }
+
+}
diff --git a/src/com/itmill/toolkit/tests/testbench/TestForWindowing.java b/src/com/itmill/toolkit/tests/testbench/TestForWindowing.java
new file mode 100644
index 0000000000..eec366b578
--- /dev/null
+++ b/src/com/itmill/toolkit/tests/testbench/TestForWindowing.java
@@ -0,0 +1,84 @@
+package com.itmill.toolkit.tests.testbench;
+
+import com.itmill.toolkit.data.Property.ValueChangeEvent;
+import com.itmill.toolkit.data.Property.ValueChangeListener;
+import com.itmill.toolkit.ui.AbstractSelect;
+import com.itmill.toolkit.ui.Button;
+import com.itmill.toolkit.ui.CustomComponent;
+import com.itmill.toolkit.ui.Label;
+import com.itmill.toolkit.ui.OptionGroup;
+import com.itmill.toolkit.ui.OrderedLayout;
+import com.itmill.toolkit.ui.Select;
+import com.itmill.toolkit.ui.Slider;
+import com.itmill.toolkit.ui.Window;
+import com.itmill.toolkit.ui.Button.ClickEvent;
+import com.itmill.toolkit.ui.Button.ClickListener;
+
+public class TestForWindowing extends CustomComponent {
+
+ private Select s2;
+
+ public TestForWindowing() {
+
+ OrderedLayout main = new OrderedLayout();
+
+ main.addComponent(new Label(
+ "Click the button to create a new inline window."));
+
+ Button create = new Button("Create a new window", new ClickListener() {
+
+ public void buttonClick(ClickEvent event) {
+ Window w = new Window("Testing Window");
+
+ AbstractSelect s1 = new OptionGroup();
+ s1.setCaption("1. Select output format");
+ s1.addItem("Excel sheet");
+ s1.addItem("CSV plain text");
+ s1.setValue("Excel sheet");
+
+ s2 = new Select();
+ s2.addItem("Separate by comma (,)");
+ s2.addItem("Separate by colon (:)");
+ s2.addItem("Separate by semicolon (;)");
+ s2.setEnabled(false);
+
+ s1.addListener(new ValueChangeListener() {
+
+ public void valueChange(ValueChangeEvent event) {
+ String v = (String) event.getProperty().getValue();
+ if (v.equals("CSV plain text")) {
+ s2.setEnabled(true);
+ } else {
+ s2.setEnabled(false);
+ }
+ }
+
+ });
+
+ w.addComponent(s1);
+ w.addComponent(s2);
+
+ Slider s = new Slider();
+ s.setCaption("Volume");
+ s.setMax(13);
+ s.setMin(12);
+ s.setResolution(2);
+ s.setImmediate(true);
+ // s.setOrientation(Slider.ORIENTATION_VERTICAL);
+ // s.setArrows(false);
+
+ w.addComponent(s);
+
+ getApplication().getMainWindow().addWindow(w);
+
+ }
+
+ });
+
+ main.addComponent(create);
+
+ setCompositionRoot(main);
+
+ }
+
+}
diff --git a/src/com/itmill/toolkit/tests/testbench/TestSetVisibleAndCaching.java b/src/com/itmill/toolkit/tests/testbench/TestSetVisibleAndCaching.java
new file mode 100644
index 0000000000..2c6da7a26a
--- /dev/null
+++ b/src/com/itmill/toolkit/tests/testbench/TestSetVisibleAndCaching.java
@@ -0,0 +1,77 @@
+package com.itmill.toolkit.tests.testbench;
+
+import com.itmill.toolkit.ui.Button;
+import com.itmill.toolkit.ui.Label;
+import com.itmill.toolkit.ui.Panel;
+import com.itmill.toolkit.ui.Window;
+import com.itmill.toolkit.ui.Button.ClickEvent;
+import com.itmill.toolkit.ui.Button.ClickListener;
+
+public class TestSetVisibleAndCaching extends com.itmill.toolkit.Application {
+
+ Panel panelA = new Panel("Panel A");
+ Panel panelB = new Panel("Panel B");
+ Panel panelC = new Panel("Panel C");
+
+ Button buttonNextPanel = new Button("Show next panel");
+
+ int selectedPanel = 0;
+
+ public void init() {
+ Window mainWindow = new Window("TestSetVisibleAndCaching");
+ setMainWindow(mainWindow);
+
+ panelA.addComponent(new Label(
+ "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"));
+ panelB.addComponent(new Label(
+ "BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB"));
+ panelC.addComponent(new Label(
+ "CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC"));
+
+ mainWindow
+ .addComponent(new Label(
+ "Inspect transfered data from server to "
+ + "client using firebug (http request / response cycles)."
+ + " See how widgets are re-used,"
+ + " after each panel is once shown in GUI then"
+ + " their contents are not resend."));
+ mainWindow.addComponent(buttonNextPanel);
+ mainWindow.addComponent(panelA);
+ mainWindow.addComponent(panelB);
+ mainWindow.addComponent(panelC);
+
+ selectPanel(selectedPanel);
+
+ buttonNextPanel.addListener(new ClickListener() {
+ public void buttonClick(ClickEvent event) {
+ selectedPanel++;
+ if (selectedPanel > 2) {
+ selectedPanel = 0;
+ }
+ selectPanel(selectedPanel);
+ }
+ });
+
+ }
+
+ private void selectPanel(int selectedPanel) {
+ System.err.println("Selecting panel " + selectedPanel);
+ switch (selectedPanel) {
+ case 0:
+ panelA.setVisible(true);
+ panelB.setVisible(false);
+ panelC.setVisible(false);
+ break;
+ case 1:
+ panelA.setVisible(false);
+ panelB.setVisible(true);
+ panelC.setVisible(false);
+ break;
+ case 2:
+ panelA.setVisible(false);
+ panelB.setVisible(false);
+ panelC.setVisible(true);
+ break;
+ }
+ }
+}
diff --git a/src/com/itmill/toolkit/tests/testbench/TestSplitPanel.java b/src/com/itmill/toolkit/tests/testbench/TestSplitPanel.java
new file mode 100644
index 0000000000..a4234cdcf5
--- /dev/null
+++ b/src/com/itmill/toolkit/tests/testbench/TestSplitPanel.java
@@ -0,0 +1,22 @@
+package com.itmill.toolkit.tests.testbench;
+
+import com.itmill.toolkit.ui.Label;
+import com.itmill.toolkit.ui.SplitPanel;
+import com.itmill.toolkit.ui.Window;
+
+public class TestSplitPanel extends com.itmill.toolkit.Application {
+
+ SplitPanel verticalSplit = new SplitPanel(SplitPanel.ORIENTATION_VERTICAL);
+
+ public void init() {
+ Window mainWindow = new Window("Feature Browser");
+ setMainWindow(mainWindow);
+
+ verticalSplit.setFirstComponent(new Label("vertical first"));
+ verticalSplit.setSecondComponent(new Label("vertical second"));
+
+ mainWindow.setLayout(verticalSplit);
+
+ }
+
+}