/* * SmartGWT (GWT for SmartClient) * Copyright 2008 and beyond, Isomorphic Software, Inc. * * SmartGWT is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License version 3 * as published by the Free Software Foundation. SmartGWT is also * available under typical commercial license terms - see * http://smartclient.com/license * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. */ package com.smartgwt.client.util.workflow; import com.google.gwt.user.client.Timer; import com.smartgwt.client.SmartGWTTestCase; import com.smartgwt.client.data.DataSource; import com.smartgwt.client.data.Record; import com.smartgwt.client.types.Alignment; import com.smartgwt.client.types.Visibility; import com.smartgwt.client.widgets.Window; import com.smartgwt.client.widgets.form.DynamicForm; import com.smartgwt.client.widgets.form.ValuesManager; import com.smartgwt.client.widgets.form.fields.ButtonItem; import com.smartgwt.client.widgets.form.fields.CancelItem; import com.smartgwt.client.widgets.form.fields.FormItem; import com.smartgwt.client.widgets.form.fields.PasswordItem; import com.smartgwt.client.widgets.form.fields.SubmitItem; import com.smartgwt.client.widgets.form.fields.TextItem; import com.smartgwt.client.widgets.layout.HStack; import com.smartgwt.client.widgets.layout.SectionStack; import com.smartgwt.client.widgets.layout.SectionStackSection; import com.smartgwt.client.widgets.tab.Tab; import com.smartgwt.client.widgets.tab.TabSet; /** * Test for UserTask workflow task. */ public class UserTaskTestCase extends SmartGWTTestCase { /** * UserTask: check basic functionality. */ public void testBasic(){ DataSource clientDS = new DataSource(); clientDS.setClientOnly(true); final DynamicForm form = new DynamicForm(); form.setID("exampleForm"); form.setWidth(250); form.setVisibility(Visibility.HIDDEN); form.setNumCols(3); form.setPadding(10); form.setColWidths(150, 60, 40); form.setDataSource(clientDS); FormItem usernameField = new TextItem("username", "Username"); usernameField.setRequired(true); usernameField.setColSpan(2); FormItem emailField = new TextItem("email", "Email"); emailField.setRequired(true); emailField.setColSpan(2); FormItem passwordField = new PasswordItem("password", "Password"); passwordField.setRequired(true); passwordField.setColSpan(2); FormItem submitButton = new SubmitItem("submitButton"); submitButton.setStartRow(false); submitButton.setEndRow(false); submitButton.setColSpan(2); submitButton.setAlign(Alignment.RIGHT); FormItem cancelButton = new CancelItem(); cancelButton.setStartRow(false); cancelButton.setAlign(Alignment.RIGHT); form.setFields(usernameField , emailField, passwordField, submitButton, cancelButton); UserTask task = new UserTask(); task.setInputField("user"); task.setOutputField("user"); task.setTargetView(form); com.smartgwt.client.util.workflow.Process process = new com.smartgwt.client.util.workflow.Process() { public void finished(Record state) { Record user = state.getAttributeAsRecord("user"); assertNotNull(user); assertEquals("john", user.getAttribute("username")); assertEquals("john@isomorphic.com", user.getAttribute("email")); finishTest(); }; }; process.setElements(task); Record state = new Record(); Record user = new Record(); user.setAttribute("username", "bob"); user.setAttribute("email", "bob@isomorphic.com"); state.setAttribute("user", user); process.setState(state); process.start(); delayTestFinish(400); new Timer() { @Override public void run() { form.setValue("username", "john"); form.setValue("email", "john@isomorphic.com"); clickButton((ButtonItem) form.getField("submitButton")); } }.schedule(200); } /** * UserTask: check window-tabset-sectionstack showing functionality. */ public void testShowRecursively(){ DataSource clientDS = new DataSource(); clientDS.setClientOnly(true); final DynamicForm form = new DynamicForm(); form.setID("exampleForm2"); form.setWidth(250); form.setVisibility(Visibility.HIDDEN); form.setNumCols(3); form.setPadding(10); form.setColWidths(150, 60, 40); form.setDataSource(clientDS); FormItem usernameField = new TextItem("username", "Username"); usernameField.setRequired(true); usernameField.setColSpan(2); FormItem emailField = new TextItem("email", "Email"); emailField.setRequired(true); emailField.setColSpan(2); FormItem passwordField = new PasswordItem("password", "Password"); passwordField.setRequired(true); passwordField.setColSpan(2); FormItem submitButton = new SubmitItem("submitButton"); submitButton.setStartRow(false); submitButton.setEndRow(false); submitButton.setColSpan(2); submitButton.setAlign(Alignment.RIGHT); FormItem cancelButton = new CancelItem(); cancelButton.setStartRow(false); cancelButton.setAlign(Alignment.RIGHT); form.setFields(usernameField , emailField, passwordField, submitButton, cancelButton); SectionStack ss = new SectionStack(); ss.setID("ss"); ss.setWidth100(); ss.setHeight100(); ss.setVisibility(Visibility.HIDDEN); SectionStackSection first = new SectionStackSection("one"); first.setExpanded(true); SectionStackSection second = new SectionStackSection("two"); second.setExpanded(false); SectionStackSection third = new SectionStackSection("three"); third.setExpanded(false); third.setHidden(true); third.setItems(form); SectionStackSection fourth = new SectionStackSection("four"); fourth.setExpanded(false); ss.setSections(first , second, third, fourth); TabSet tabSet = new TabSet(); tabSet.setID("ts"); tabSet.setWidth100(); tabSet.setHeight100(); tabSet.setSelectedTab(0); tabSet.setVisibility(Visibility.HIDDEN); Tab secondTab = new Tab("second"); secondTab.setPane(ss); tabSet.setTabs(new Tab("first"), secondTab , new Tab("third")); Window w = new Window(); w.setWidth(480); w.setHeight(320); w.setTop(150); w.setLeft(100); w.setVisibility(Visibility.HIDDEN); w.addItem(tabSet); UserTask task = new UserTask(); task.setInputField("user"); task.setOutputField("user"); task.setTargetView(form); com.smartgwt.client.util.workflow.Process process = new com.smartgwt.client.util.workflow.Process() { public void finished(Record state) { Record user = state.getAttributeAsRecord("user"); assertNotNull(user); assertEquals("john", user.getAttribute("username")); assertEquals("john@isomorphic.com", user.getAttribute("email")); finishTest(); }; }; process.setElements(task); Record state = new Record(); Record user = new Record(); user.setAttribute("username", "bob"); user.setAttribute("email", "bob@isomorphic.com"); state.setAttribute("user", user); process.setState(state); process.start(); delayTestFinish(400); new Timer() { @Override public void run() { form.setValue("username", "john"); form.setValue("email", "john@isomorphic.com"); clickButton((ButtonItem) form.getField("submitButton")); } }.schedule(200); } /** * UserTask: check using values manager. */ public void testValuesManager(){ DataSource clientDS = new DataSource(); clientDS.setClientOnly(true); ValuesManager vm = new ValuesManager(); vm.setDataSource(clientDS); final DynamicForm vmForm1 = new DynamicForm(); vmForm1.setID("vmForm1"); vmForm1.setWidth(250); vmForm1.setNumCols(3); vmForm1.setPadding(10); vmForm1.setColWidths(150, 60, 40); vmForm1.setValuesManager(vm); FormItem usernameField = new TextItem("username", "Username"); usernameField.setRequired(true); usernameField.setColSpan(2); FormItem emailField = new TextItem("email", "Email"); emailField.setRequired(true); emailField.setColSpan(2); vmForm1.setFields(usernameField , emailField); final DynamicForm vmForm2 = new DynamicForm(); vmForm2.setID("vmForm2"); vmForm2.setWidth(250); vmForm2.setNumCols(3); vmForm2.setPadding(10); vmForm2.setColWidths(150, 60, 40); vmForm2.setValuesManager(vm); FormItem passwordField = new PasswordItem("password", "Password"); passwordField.setRequired(true); passwordField.setColSpan(2); FormItem repeatPasswordField = new PasswordItem("repeat_password", "Repeat password"); repeatPasswordField.setRequired(true); repeatPasswordField.setColSpan(2); FormItem submitButton = new SubmitItem("submitButton"); submitButton.setStartRow(false); submitButton.setEndRow(false); submitButton.setColSpan(2); submitButton.setAlign(Alignment.RIGHT); FormItem cancelButton = new CancelItem(); cancelButton.setStartRow(false); cancelButton.setAlign(Alignment.RIGHT); vmForm2.setFields(passwordField, repeatPasswordField, submitButton, cancelButton); HStack container = new HStack(); container.setMembers(vmForm1, vmForm2); container.setTop(200); UserTask task = new UserTask(); task.setInputField("user"); task.setOutputField("user"); task.setTargetView(container); task.setTargetVM(vm); com.smartgwt.client.util.workflow.Process process = new com.smartgwt.client.util.workflow.Process() { public void finished(Record state) { Record user = state.getAttributeAsRecord("user"); assertNotNull(user); assertEquals("john", user.getAttribute("username")); assertEquals("john@isomorphic.com", user.getAttribute("email")); assertEquals("pass", user.getAttribute("password")); finishTest(); }; }; process.setElements(task); Record state = new Record(); Record user = new Record(); user.setAttribute("username", "bob"); user.setAttribute("email", "bob@isomorphic.com"); state.setAttribute("user", user); process.setState(state); process.start(); delayTestFinish(400); new Timer() { @Override public void run() { if (vmForm1.isVisible()) { vmForm1.setValue("username", "john"); vmForm1.setValue("email", "john@isomorphic.com"); } if (vmForm2.isVisible()) { vmForm2.setValue("password", "pass"); clickButton((ButtonItem) vmForm2.getField("submitButton")); } } }.schedule(200); } /** * UserTask: check cancel functionality. */ public void testCancel(){ DataSource clientDS = new DataSource(); clientDS.setClientOnly(true); final DynamicForm form = new DynamicForm(); form.setID("formToCancel"); form.setWidth(250); form.setNumCols(3); form.setPadding(10); form.setColWidths(150, 60, 40); form.setLeft(250); form.setDataSource(clientDS); FormItem usernameField = new TextItem("username", "Username"); usernameField.setRequired(true); usernameField.setColSpan(2); FormItem emailField = new TextItem("email", "Email"); emailField.setRequired(true); emailField.setColSpan(2); FormItem passwordField = new PasswordItem("password", "Password"); passwordField.setRequired(true); passwordField.setColSpan(2); FormItem submitButton = new SubmitItem("submitButton"); submitButton.setStartRow(false); submitButton.setEndRow(false); submitButton.setColSpan(2); submitButton.setAlign(Alignment.RIGHT); FormItem cancelButton = new CancelItem("cancelButton"); cancelButton.setStartRow(false); cancelButton.setAlign(Alignment.RIGHT); form.setFields(usernameField , emailField, passwordField, submitButton, cancelButton); UserTask task = new UserTask(); task.setInputField("user"); task.setOutputField("user"); task.setCancelElement("cancelTask"); task.setTargetView(form); ScriptTask cancelTask = new ScriptTask("cancelTask") { public Object execute(Object input, Record inputRecord) { return "cancelled"; }; }; cancelTask.setOutputField("result"); com.smartgwt.client.util.workflow.Process process = new com.smartgwt.client.util.workflow.Process() { public void finished(Record state) { Record user = state.getAttributeAsRecord("user"); assertNotNull(user); assertEquals("bob", user.getAttribute("username")); assertEquals("bob@isomorphic.com", user.getAttribute("email")); assertEquals("cancelled", state.getAttribute("result")); finishTest(); }; }; process.setElements(task, cancelTask); Record state = new Record(); Record user = new Record(); user.setAttribute("username", "bob"); user.setAttribute("email", "bob@isomorphic.com"); state.setAttribute("user", user); process.setState(state); process.start(); delayTestFinish(400); new Timer() { @Override public void run() { form.setValue("username", "john"); form.setValue("email", "john@isomorphic.com"); clickButton((ButtonItem) form.getField("cancelButton")); } }.schedule(200); } }