summaryrefslogtreecommitdiff
path: root/forms/qa/integration/forms/ListSelection.java
diff options
context:
space:
mode:
Diffstat (limited to 'forms/qa/integration/forms/ListSelection.java')
-rw-r--r--forms/qa/integration/forms/ListSelection.java298
1 files changed, 298 insertions, 0 deletions
diff --git a/forms/qa/integration/forms/ListSelection.java b/forms/qa/integration/forms/ListSelection.java
new file mode 100644
index 000000000000..e26acd69c349
--- /dev/null
+++ b/forms/qa/integration/forms/ListSelection.java
@@ -0,0 +1,298 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+package integration.forms;
+
+import com.sun.star.uno.UnoRuntime;
+import com.sun.star.beans.XPropertySet;
+import com.sun.star.sheet.XSpreadsheet;
+import com.sun.star.sheet.XSpreadsheets;
+import com.sun.star.sheet.XSpreadsheetView;
+import com.sun.star.container.XNamed;
+import com.sun.star.container.XNameContainer;
+import com.sun.star.container.XIndexContainer;
+import com.sun.star.drawing.XDrawPageSupplier;
+import com.sun.star.awt.XControl;
+import com.sun.star.awt.XControlModel;
+import com.sun.star.awt.XListBox;
+import com.sun.star.script.XLibraryContainer;
+import com.sun.star.script.XEventAttacherManager;
+import com.sun.star.script.ScriptEventDescriptor;
+import com.sun.star.accessibility.XAccessible;
+import com.sun.star.accessibility.XAccessibleContext;
+import com.sun.star.accessibility.XAccessibleSelection;
+import com.sun.star.frame.XStorable;
+
+public class ListSelection extends integration.forms.TestCase
+{
+ /** Creates a new instance of ListSelection */
+ public ListSelection()
+ {
+ super( DocumentType.CALC );
+ }
+
+ /* ------------------------------------------------------------------ */
+ public String[] getTestMethodNames()
+ {
+ return new String[] {
+ "checkUserListSelection"
+ };
+ }
+
+ /* ------------------------------------------------------------------ */
+ public String getTestObjectName()
+ {
+ return "Form Control List Selection Test";
+ }
+
+ /* ------------------------------------------------------------------ */
+ public void checkUserListSelection() throws com.sun.star.uno.Exception, java.lang.Exception
+ {
+ boolean interactiveTest = param.getBool( "Interactive" );
+
+ if ( interactiveTest )
+ {
+ prepareDocument();
+ waitForUserInput();
+ closeDocumentByUI();
+ }
+ else
+ {
+ int runs = param.getInt( "Runs" );
+ if ( runs == 0 )
+ runs = 10;
+
+ for ( int i = 0; i < runs; ++i )
+ {
+ log.println( "Round " + ( i + 1 ) + " of " + runs );
+ prepareDocument();
+ impl_clickListBox();
+ synchronized( this ) { this.wait( 1000 ); }
+ closeDocument();
+ }
+ }
+ }
+
+ /* ------------------------------------------------------------------ */
+ final private void impl_clickListBox()
+ {
+ try
+ {
+ final int runs = 10;
+ java.util.Random generator = new java.util.Random();
+ for ( int i = 0; i < runs; ++i )
+ {
+ // obtain the active sheet
+ XSpreadsheetView view = (XSpreadsheetView)m_document.getCurrentView().query( XSpreadsheetView.class );
+ XSpreadsheet activeSheet = view.getActiveSheet();
+
+ // Accessibility access to the list box control in this sheet
+ XAccessible accessibleListBox = (XAccessible)UnoRuntime.queryInterface(
+ XAccessible.class, getListBoxControl( activeSheet ) );
+ XAccessibleContext context = accessibleListBox.getAccessibleContext();
+
+ // the first "accessible child" of a list box is its list
+ XAccessibleSelection accessibleList = (XAccessibleSelection)UnoRuntime.queryInterface(
+ XAccessibleSelection.class, context.getAccessibleChild( 1 ) );
+
+ int selectPosition = generator.nextInt( 5 );
+ String selectSheetName = getListBoxControl( activeSheet ).getItem( (short)selectPosition );
+ accessibleList.selectAccessibleChild( selectPosition );
+ try
+ {
+ synchronized( this )
+ {
+ this.wait( 500 );
+ }
+ }
+ catch( java.lang.InterruptedException e ) { }
+
+ XNamed sheetName = (XNamed)UnoRuntime.queryInterface( XNamed.class, view.getActiveSheet() );
+ assure( "sheet was not selected as expected!", sheetName.getName().equals( selectSheetName ) );
+ }
+ }
+ catch( com.sun.star.uno.Exception e )
+ {
+ System.err.println( e );
+ e.printStackTrace( System.err );
+ }
+ }
+
+ /* ------------------------------------------------------------------ */
+ final private void impl_setupListenerScript()
+ {
+ try
+ {
+ XPropertySet docProps = dbfTools.queryPropertySet( m_document.getDocument() );
+ XLibraryContainer basicLibs = (XLibraryContainer)UnoRuntime.queryInterface(
+ XLibraryContainer.class, docProps.getPropertyValue( "BasicLibraries" ) );
+ XNameContainer basicLib = basicLibs.createLibrary( "default" );
+
+ String sListSelectionScript =
+ "Option Explicit\n" +
+ "\n" +
+ "Sub onListBoxSelected( oEvent as Object )\n" +
+ " Dim oView as Object\n" +
+ " Dim oSheet as Object\n" +
+ " Dim oSheets as Object\n" +
+ "\n" +
+ " Dim oControlModel as Object\n" +
+ " Dim sSheet as String\n" +
+ "\n" +
+ " if ( oEvent.Selected <> 65535 ) Then\n" +
+ " oControlModel = oEvent.Source.Model\n" +
+ " sSheet = oControlModel.StringItemList( oEvent.Selected )\n" +
+ "\n" +
+ " oSheets = thisComponent.Sheets\n" +
+ " oSheet = oSheets.getByName(sSheet)\n" +
+ "\n" +
+ " oView = thisComponent.CurrentController\n" +
+ " oView.setActiveSheet( oSheet )\n" +
+ " End If\n" +
+ "End Sub\n" +
+ "\n" +
+ "Sub onButtonClicked\n" +
+ " MsgBox \"clicked\"\n" +
+ "End Sub\n";
+
+ basicLib.insertByName( "callbacks", sListSelectionScript );
+ }
+ catch( com.sun.star.uno.Exception e )
+ {
+ e.printStackTrace( System.err );
+ }
+ }
+
+ /* ------------------------------------------------------------------ */
+ final private void impl_assignStarBasicScript( XPropertySet controlModel, String interfaceName, String interfaceMethod, String scriptCode )
+ {
+ try
+ {
+ XIndexContainer parentForm = (XIndexContainer)dbfTools.getParent( controlModel, XIndexContainer.class );
+
+ XEventAttacherManager manager = (XEventAttacherManager)UnoRuntime.queryInterface(
+ XEventAttacherManager.class, parentForm );
+
+ int containerPosition = -1;
+ for ( int i = 0; i < parentForm.getCount(); ++i )
+ {
+ XPropertySet child = dbfTools.queryPropertySet( parentForm.getByIndex( i ) );
+ if ( child.equals( controlModel ) )
+ {
+ containerPosition = i;
+ break;
+ }
+ }
+ manager.registerScriptEvent( containerPosition, new ScriptEventDescriptor(
+ interfaceName,
+ interfaceMethod,
+ "",
+ "StarBasic",
+ scriptCode
+ ) );
+ }
+ catch( com.sun.star.uno.Exception e )
+ {
+ e.printStackTrace( System.err );
+ }
+ }
+
+ /* ------------------------------------------------------------------ */
+ protected void prepareDocument() throws com.sun.star.uno.Exception, java.lang.Exception
+ {
+ super.prepareDocument();
+ impl_setupListenerScript();
+
+ SpreadsheetDocument document = (SpreadsheetDocument)m_document;
+ XSpreadsheets sheets = document.getSheets();
+
+ // delete all sheets except one
+ String[] sheetNames = sheets.getElementNames();
+ for ( short i = 1; i < sheetNames.length; ++i )
+ sheets.removeByName( sheetNames[ i ] );
+
+ // need 5 sheets
+ String[] newSheetNames = new String[] { "first", "second", "third", "forth", "fifth" };
+
+ // give the first one the right name
+ XNamed sheet = (XNamed)UnoRuntime.queryInterface( XNamed.class,
+ sheets.getByName( sheetNames[ 0 ] )
+ );
+ sheet.setName( newSheetNames[ 0 ] );
+
+ // add some dummy buttons
+ for ( int i = 0; i < 4; ++i )
+ {
+ XPropertySet buttonModel = m_formLayer.createControlAndShape( "CommandButton", 10, 10 + i * 10, 30, 8 );
+ impl_assignStarBasicScript( buttonModel, "XActionListener", "actionPerformed", "document:default.callbacks.onButtonClicked" );
+ }
+
+ // and a list box
+ XPropertySet listBox = m_formLayer.createControlAndShape( "ListBox", 50, 10, 40, 6 );
+ listBox.setPropertyValue( "Dropdown", new Boolean( true ) );
+ listBox.setPropertyValue( "StringItemList", newSheetNames );
+ listBox.setPropertyValue( "Name", "ListBox" );
+
+ impl_assignStarBasicScript( listBox, "XItemListener", "itemStateChanged", "document:default.callbacks.onListBoxSelected" );
+
+ // clone this sheet
+ for ( short i = 1; i < newSheetNames.length; ++i )
+ sheets.copyByName( newSheetNames[0], newSheetNames[i], i );
+
+ // switch the thing to alive mode
+ m_document.getCurrentView().toggleFormDesignMode();
+
+ try
+ {
+ XStorable storable = (XStorable)m_document.query( XStorable.class );
+ java.io.File testFile = java.io.File.createTempFile( getTestObjectName(),".ods");
+ storable.storeAsURL( testFile.getAbsoluteFile().toURL().toString(), new com.sun.star.beans.PropertyValue[]{} );
+ testFile.deleteOnExit();
+ }
+ catch( java.lang.Throwable e )
+ {
+ e.printStackTrace();
+ }
+ }
+
+ /* ------------------------------------------------------------------ */
+ protected XControlModel getListBoxModel( XSpreadsheet sheet )
+ {
+ XDrawPageSupplier suppPage = (XDrawPageSupplier)UnoRuntime.queryInterface(
+ XDrawPageSupplier.class, sheet );
+ FormComponent formsRoot = new FormComponent( suppPage.getDrawPage() );
+ XControlModel listBoxModel = (XControlModel)formsRoot.getByIndex( 0 ).
+ getByName( "ListBox" ).query( XControlModel.class );
+ return listBoxModel;
+ }
+
+ /* ------------------------------------------------------------------ */
+ protected XListBox getListBoxControl( XSpreadsheet sheet ) throws com.sun.star.uno.Exception
+ {
+ return (XListBox)UnoRuntime.queryInterface(
+ XListBox.class, m_document.getCurrentView().getControl( getListBoxModel( sheet ) ) );
+ }
+ }