diff options
Diffstat (limited to 'dbaccess/qa/complex')
19 files changed, 0 insertions, 4769 deletions
diff --git a/dbaccess/qa/complex/dbaccess/ApplicationController.java b/dbaccess/qa/complex/dbaccess/ApplicationController.java deleted file mode 100644 index 9d7544cd2..000000000 --- a/dbaccess/qa/complex/dbaccess/ApplicationController.java +++ /dev/null @@ -1,174 +0,0 @@ -/************************************************************************* - * - * 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 complex.dbaccess; - -import com.sun.star.beans.PropertyValue; -import com.sun.star.container.XNameAccess; -import com.sun.star.frame.FrameSearchFlag; -import com.sun.star.frame.XComponentLoader; -import com.sun.star.frame.XModel; -import com.sun.star.frame.XStorable; -import com.sun.star.lang.XComponent; -import com.sun.star.sdb.XOfficeDatabaseDocument; -import com.sun.star.sdb.application.XDatabaseDocumentUI; -import com.sun.star.sdbcx.XTablesSupplier; -import com.sun.star.uno.Exception; -import com.sun.star.uno.UnoRuntime; -import connectivity.tools.HsqlColumnDescriptor; -import connectivity.tools.HsqlDatabase; -import connectivity.tools.HsqlTableDescriptor; -import java.io.IOException; - - -// ---------- junit imports ----------------- -import org.junit.After; -import org.junit.Before; -import org.junit.Test; -import static org.junit.Assert.*; -// ------------------------------------------ - -/** complex test case for Base's application UI - */ -public class ApplicationController extends TestCase -{ - - private HsqlDatabase m_database; - private XOfficeDatabaseDocument m_databaseDocument; - private XDatabaseDocumentUI m_documentUI; - - public ApplicationController() - { - super(); - } - - // -------------------------------------------------------------------------------------------------------- - public String getTestObjectName() - { - return getClass().getName(); - } - - // -------------------------------------------------------------------------------------------------------- - private void impl_closeDocument() - { - if (m_database != null) - { - m_database.close(); - m_database = null; - m_databaseDocument = null; - m_documentUI = null; - } - } - - // -------------------------------------------------------------------------------------------------------- - private void impl_switchToDocument(String _documentURL) throws java.lang.Exception - { - // close previous database document - impl_closeDocument(); - - // create/load the new database document - m_database = (_documentURL == null) - ? new HsqlDatabase(getMSF()) - : new HsqlDatabase(getMSF(), _documentURL); - m_databaseDocument = m_database.getDatabaseDocument(); - - // load it into a frame - final Object object = getMSF().createInstance("com.sun.star.frame.Desktop"); - final XComponentLoader xComponentLoader = UnoRuntime.queryInterface(XComponentLoader.class, object); - final XComponent loadedComponent = xComponentLoader.loadComponentFromURL(m_database.getDocumentURL(), "_blank", FrameSearchFlag.ALL, new PropertyValue[0]); - - assertTrue("too many document instances!", - UnoRuntime.areSame(loadedComponent, m_databaseDocument)); - - // get the controller, which provides access to various UI operations - final XModel docModel = UnoRuntime.queryInterface(XModel.class, - loadedComponent); - m_documentUI = UnoRuntime.queryInterface(XDatabaseDocumentUI.class, - docModel.getCurrentController()); - } - - // -------------------------------------------------------------------------------------------------------- - @Before - @Override - public void before() throws java.lang.Exception - { - super.before(); - impl_switchToDocument(null); - } - - // -------------------------------------------------------------------------------------------------------- - @After - @Override - public void after() throws java.lang.Exception - { - impl_closeDocument(); - super.after(); - } - // -------------------------------------------------------------------------------------------------------- - - @Test - public void checkSaveAs() throws Exception, IOException, java.lang.Exception - { - // issue 93737 describes the problem that when you save-as a database document, and do changes to it, - // then those changes are saved in the old document, actually - final String oldDocumentURL = m_database.getDocumentURL(); - - final String newDocumentURL = createTempFileURL(); - - // store the doc in a new location - final XStorable storeDoc = UnoRuntime.queryInterface( XStorable.class, m_databaseDocument ); - storeDoc.storeAsURL( newDocumentURL, new PropertyValue[] { } ); - - // connect - m_documentUI.connect(); - assertTrue("could not connect to " + m_database.getDocumentURL(), m_documentUI.isConnected()); - - // create a table in the database - m_database.createTable(new HsqlTableDescriptor("abc", new HsqlColumnDescriptor[] - { - new HsqlColumnDescriptor("a", "VARCHAR(50)"), - new HsqlColumnDescriptor("b", "VARCHAR(50)"), - new HsqlColumnDescriptor("c", "VARCHAR(50)") - })); - - // load the old document, and verify there is *no* table therein - impl_switchToDocument(oldDocumentURL); - m_documentUI.connect(); - assertTrue("could not connect to " + m_database.getDocumentURL(), m_documentUI.isConnected()); - XTablesSupplier suppTables = UnoRuntime.queryInterface( XTablesSupplier.class, m_documentUI.getActiveConnection() ); - XNameAccess tables = suppTables.getTables(); - assertTrue("the table was created in the wrong database", !tables.hasByName("abc")); - - // load the new document, and verify there *is* a table therein - impl_switchToDocument(newDocumentURL); - m_documentUI.connect(); - assertTrue("could not connect to " + m_database.getDocumentURL(), m_documentUI.isConnected()); - - suppTables = UnoRuntime.queryInterface( XTablesSupplier.class, m_documentUI.getActiveConnection() ); - tables = suppTables.getTables(); - assertTrue("the newly created table has not been written", tables.hasByName("abc")); - } -} diff --git a/dbaccess/qa/complex/dbaccess/Beamer.java b/dbaccess/qa/complex/dbaccess/Beamer.java deleted file mode 100644 index 2fb885de0..000000000 --- a/dbaccess/qa/complex/dbaccess/Beamer.java +++ /dev/null @@ -1,146 +0,0 @@ -/************************************************************************* - * - * 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 complex.dbaccess; - -import com.sun.star.beans.PropertyState; -import com.sun.star.beans.PropertyValue; -import com.sun.star.container.XEnumeration; -import com.sun.star.container.XEnumerationAccess; -import com.sun.star.frame.FrameSearchFlag; -import com.sun.star.frame.XComponentLoader; -import com.sun.star.frame.XController; -import com.sun.star.frame.XDispatch; -import com.sun.star.frame.XDispatchProvider; -import com.sun.star.frame.XFrame; -import com.sun.star.frame.XModel; -import com.sun.star.lang.XComponent; -import com.sun.star.sdb.CommandType; -import com.sun.star.uno.Exception; -import com.sun.star.uno.UnoRuntime; -import com.sun.star.util.URL; -import com.sun.star.util.XURLTransformer; -import com.sun.star.view.XSelectionSupplier; -import java.io.IOException; - - -// ---------- junit imports ----------------- -import org.junit.After; -// import org.junit.AfterClass; -import org.junit.Before; -// import org.junit.BeforeClass; -import org.junit.Test; -// import org.openoffice.test.OfficeConnection; -import static org.junit.Assert.*; -// ------------------------------------------ - - -/** complex test case for Base's application UI - */ -public class Beamer extends TestCase -{ - - private XModel docModel; - - public Beamer() - { - super(); - } - - // -------------------------------------------------------------------------------------------------------- - @Before - @Override - public void before() throws Exception, java.lang.Exception - { - // load it into a frame - final Object object = getMSF().createInstance("com.sun.star.frame.Desktop"); - final XComponentLoader xComponentLoader = UnoRuntime.queryInterface(XComponentLoader.class, object); - final XComponent loadedComponent = xComponentLoader.loadComponentFromURL("private:factory/swriter", "_blank", 0, new PropertyValue[0]); - // get the controller, which provides access to various UI operations - docModel = UnoRuntime.queryInterface(XModel.class, loadedComponent); - } - - // -------------------------------------------------------------------------------------------------------- - @After - @Override - public void after() - { - } - - // -------------------------------------------------------------------------------------------------------- - @Test - public void testBeamer() throws Exception, IOException, java.lang.Exception - { - final XController controller = docModel.getCurrentController(); - final XFrame frame = controller.getFrame(); - final XDispatchProvider dispatchP = UnoRuntime.queryInterface(XDispatchProvider.class, frame); - URL command = new URL(); - command.Complete = ".uno:ViewDataSourceBrowser"; - - Object instance = getMSF().createInstance("com.sun.star.util.URLTransformer"); - XURLTransformer atrans = UnoRuntime.queryInterface(XURLTransformer.class, instance); - com.sun.star.util.URL[] aURLA = new com.sun.star.util.URL[1]; - aURLA[0] = command; - atrans.parseStrict(aURLA); - command = aURLA[0]; - - final XDispatch dispatch = dispatchP.queryDispatch(command, "_self", FrameSearchFlag.AUTO); - assertNotNull(dispatch); - dispatch.dispatch(command, new PropertyValue[0]); - - final PropertyValue[] props = new PropertyValue[] - { - new PropertyValue("DataSourceName", 0, "Bibliography", PropertyState.DIRECT_VALUE), - new PropertyValue("CommandType", 0, Integer.valueOf(CommandType.TABLE), PropertyState.DIRECT_VALUE), - new PropertyValue("Command", 0, "biblio", PropertyState.DIRECT_VALUE) - }; - - final XFrame beamer = frame.findFrame("_beamer", 0); - assertNotNull(beamer); - final XEnumerationAccess evtBc = UnoRuntime.queryInterface(XEnumerationAccess.class, getMSF().createInstance("com.sun.star.frame.GlobalEventBroadcaster")); - XEnumeration enumeration = evtBc.createEnumeration(); - int count = -1; - while (enumeration.hasMoreElements()) - { - enumeration.nextElement(); - ++count; - } - final XSelectionSupplier selSup = UnoRuntime.queryInterface(XSelectionSupplier.class, beamer.getController()); - selSup.select(props); - final com.sun.star.util.XCloseable close = UnoRuntime.queryInterface(com.sun.star.util.XCloseable.class, frame); - close.close(false); - - enumeration = evtBc.createEnumeration(); - int count2 = 0; - while (enumeration.hasMoreElements()) - { - enumeration.nextElement(); - ++count2; - } - - assertTrue("count1 = " + count + " count2 = " + count2, count == count2); - } -} diff --git a/dbaccess/qa/complex/dbaccess/CRMBasedTestCase.java b/dbaccess/qa/complex/dbaccess/CRMBasedTestCase.java deleted file mode 100644 index e803d143f..000000000 --- a/dbaccess/qa/complex/dbaccess/CRMBasedTestCase.java +++ /dev/null @@ -1,91 +0,0 @@ -/************************************************************************* - * - * 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 complex.dbaccess; - -import com.sun.star.sdb.XSingleSelectQueryComposer; -import connectivity.tools.CRMDatabase; -import java.util.logging.Level; -import java.util.logging.Logger; - -// ---------- junit imports ----------------- -import org.junit.After; -import org.junit.Before; -import static org.junit.Assert.*; -// ------------------------------------------ - -public abstract class CRMBasedTestCase extends TestCase -{ - protected CRMDatabase m_database; - - // -------------------------------------------------------------------------------------------------------- - protected void createTestCase() - { - try - { - m_database = new CRMDatabase( getMSF(), false ); - } - catch ( Exception e ) - { - e.printStackTrace( System.err ); - fail( "caught an exception (" + e.getMessage() + ") while creating the test case"); - } - } - - // -------------------------------------------------------------------------------------------------------- - @Before - @Override - public void before() - { - createTestCase(); - } - - // -------------------------------------------------------------------------------------------------------- - @After - @Override - public void after() - { - try - { - if ( m_database != null ) - { - m_database.saveAndClose(); - } - } - catch ( Exception ex ) - { - Logger.getLogger( this.getClass().getName() ).log( Level.SEVERE, null, ex ); - } - } - - // -------------------------------------------------------------------------------------------------------- - /** creates a SingleSelectQueryComposer for our connection - */ - protected final XSingleSelectQueryComposer createQueryComposer() throws com.sun.star.uno.Exception - { - return m_database.getConnection().createSingleSelectQueryComposer(); - } -} diff --git a/dbaccess/qa/complex/dbaccess/CopyTableInterActionHandler.java b/dbaccess/qa/complex/dbaccess/CopyTableInterActionHandler.java deleted file mode 100755 index 25c044ac5..000000000 --- a/dbaccess/qa/complex/dbaccess/CopyTableInterActionHandler.java +++ /dev/null @@ -1,50 +0,0 @@ -/************************************************************************* - * - * 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 complex.dbaccess; - -import com.sun.star.lib.uno.helper.WeakBase; -import com.sun.star.task.XInteractionHandler; -import com.sun.star.task.XInteractionRequest; - -import static org.junit.Assert.*; - -/** - * - * @author oj93728 - */ -class CopyTableInterActionHandler extends WeakBase - implements XInteractionHandler -{ - CopyTableInterActionHandler() - { - } - - public void handle(XInteractionRequest xRequest) - { - fail( "interaction handler is not expected to be called" ); - } -} diff --git a/dbaccess/qa/complex/dbaccess/CopyTableWizard.java b/dbaccess/qa/complex/dbaccess/CopyTableWizard.java deleted file mode 100755 index 85e6a8139..000000000 --- a/dbaccess/qa/complex/dbaccess/CopyTableWizard.java +++ /dev/null @@ -1,225 +0,0 @@ -/************************************************************************* - * - * 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 complex.dbaccess; - -import com.sun.star.accessibility.XAccessible; -import com.sun.star.accessibility.XAccessibleContext; -import com.sun.star.awt.XExtendedToolkit; -import com.sun.star.awt.XWindow; -import com.sun.star.beans.Optional; -import com.sun.star.beans.XPropertySet; -import com.sun.star.container.XNameAccess; -import com.sun.star.sdb.CommandType; -import com.sun.star.sdb.application.XCopyTableWizard; -import com.sun.star.sdb.DataAccessDescriptorFactory; -import com.sun.star.sdbc.XConnection; -import com.sun.star.sdbcx.XTablesSupplier; -import com.sun.star.task.XInteractionHandler; -import com.sun.star.uno.Exception; -import com.sun.star.uno.UnoRuntime; -import com.sun.star.uno.XComponentContext; -import connectivity.tools.DbaseDatabase; -import java.io.IOException; -import util.UITools; - -// ---------- junit imports ----------------- -import org.junit.After; -import org.junit.Before; -import org.junit.Test; -import static org.junit.Assert.*; -// ------------------------------------------ - -/** complex test case for Base's application UI - */ -public class CopyTableWizard extends CRMBasedTestCase -{ - - private DatabaseApplication source; - private DatabaseApplication dest; - - public CopyTableWizard() - { - super(); - } - - // -------------------------------------------------------------------------------------------------------- - - @After - @Override - public void after() - { - dest.store(); - super.after(); - } - - @Before - @Override - public void before() - { - try - { - createTestCase(); - source = new DatabaseApplication(this.m_database.getDatabase()); - dest = new DatabaseApplication(new DbaseDatabase(getMSF())); - } - catch (java.lang.Exception ex) - { - fail(""); - } - } - - // -------------------------------------------------------------------------------------------------------- - class CopyThread implements Runnable - { - - final XCopyTableWizard copyWizard; - - CopyThread(final XCopyTableWizard copyWizard) - { - this.copyWizard = copyWizard; - } - - public void run() - { - copyWizard.execute(); - } - } - - private XWindow getActiveWindow() - { - Object toolKit = null; - try - { - toolKit = getMSF().createInstance("com.sun.star.awt.Toolkit"); - } - catch (com.sun.star.uno.Exception e) - { - return null; - } - - XExtendedToolkit tk = UnoRuntime.queryInterface( XExtendedToolkit.class, toolKit ); - Object atw = tk.getActiveTopWindow(); - return UnoRuntime.queryInterface( XWindow.class, atw ); - } - - @Test - public void copyTable() throws Exception, IOException, java.lang.Exception - { - copyTable(source,source); - } - - @Test - public void copyTableDbase() throws Exception, IOException, java.lang.Exception - { - copyTable(source,dest); - } - private void copyTable(final DatabaseApplication sourceDb,final DatabaseApplication destDb) throws Exception, IOException, java.lang.Exception - { - final XConnection destConnection = destDb.getDocumentUI().getActiveConnection(); - - final XConnection sourceConnection = sourceDb.getDocumentUI().getActiveConnection(); - final XTablesSupplier suppTables = UnoRuntime.queryInterface(XTablesSupplier.class, sourceConnection); - final XNameAccess tables = suppTables.getTables(); - - final String[] names = tables.getElementNames(); - for (int i = 0; i < names.length; i++) - { - copyTable(names[i], sourceConnection, destConnection); - } - } - - private void copyTable(final String tableName, final XConnection sourceConnection, final XConnection destConnection) throws Exception, IOException, java.lang.Exception - { - - final XInteractionHandler interAction = new CopyTableInterActionHandler(); - final XComponentContext context = getComponentContext(); - final XPropertySet sourceDescriptor = DataAccessDescriptorFactory.get(context).createDataAccessDescriptor(); - sourceDescriptor.setPropertyValue("CommandType", CommandType.TABLE); - sourceDescriptor.setPropertyValue("Command", tableName); - sourceDescriptor.setPropertyValue("ActiveConnection", sourceConnection); - - final XPropertySet destDescriptor = DataAccessDescriptorFactory.get(context).createDataAccessDescriptor(); - destDescriptor.setPropertyValue("ActiveConnection", destConnection); - - final XCopyTableWizard copyWizard = com.sun.star.sdb.application.CopyTableWizard.createWithInteractionHandler( - context, sourceDescriptor, destDescriptor, interAction); - copyWizard.setOperation((short) 0); // com.sun.star.sdb.application.CopyDefinitionAndData - Optional<String> auto = new Optional<String>(); - - auto.IsPresent = destConnection.getMetaData().supportsCoreSQLGrammar(); - if (auto.IsPresent) - { - auto.Value = "ID_test"; - } - copyWizard.setCreatePrimaryKey(auto); - Thread thread = new Thread(new CopyThread(copyWizard)); - thread.start(); - sleep(); - - try - { - final XWindow dialog = getActiveWindow(); - final UITools uiTools = new UITools(getMSF(), dialog); - final XAccessible root = uiTools.getRoot(); - final XAccessibleContext accContext = root.getAccessibleContext(); - final int count = accContext.getAccessibleChildCount(); - String buttonName = "Create"; - final XAccessibleContext childContext = accContext.getAccessibleChild(count - 3).getAccessibleContext(); - final String name = childContext.getAccessibleName(); - if (name != null && !"".equals(name)) - { - buttonName = name; - } - try - { - uiTools.clickButton(buttonName); - } - catch (java.lang.Exception exception) - { - exception.printStackTrace( System.err ); - } - } - catch (com.sun.star.lang.IndexOutOfBoundsException indexOutOfBoundsException) - { - } - sleep(); - - thread.join(); - } - - private void sleep() - { - try - { - Thread.sleep(500); - } - catch (java.lang.InterruptedException e) - { - } - } - // -------------------------------------------------------------------------------------------------------- -} diff --git a/dbaccess/qa/complex/dbaccess/DataSource.java b/dbaccess/qa/complex/dbaccess/DataSource.java deleted file mode 100644 index 19f89d646..000000000 --- a/dbaccess/qa/complex/dbaccess/DataSource.java +++ /dev/null @@ -1,97 +0,0 @@ -/************************************************************************* - * - * 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 complex.dbaccess; - -import com.sun.star.container.XNameAccess; -import com.sun.star.uno.Exception; -import com.sun.star.uno.UnoRuntime; -import com.sun.star.uno.XNamingService; -import connectivity.tools.CRMDatabase; -import connectivity.tools.HsqlDatabase; - -// ---------- junit imports ----------------- -import org.junit.Test; -import static org.junit.Assert.*; -// ------------------------------------------ - - -public class DataSource extends TestCase -{ - - HsqlDatabase m_database; - connectivity.tools.DataSource m_dataSource; - - // -------------------------------------------------------------------------------------------------------- - private void createTestCase() - { - try - { - if (m_database == null) - { - final CRMDatabase database = new CRMDatabase( getMSF(), false ); - m_database = database.getDatabase(); - m_dataSource = m_database.getDataSource(); - } - } - catch (Exception e) - { - fail("could not create the test case, error message:\n" + e.getMessage()); - } - catch (java.lang.Exception e) - { - fail("could not create the test case, error message:\n" + e.getMessage()); - } - } - - // -------------------------------------------------------------------------------------------------------- - @Test - public void testRegistrationName() - { - try - { - createTestCase(); - // 1. check the existing "Bibliography" data source whether it has the proper name - String dataSourceName = "Bibliography"; - final connectivity.tools.DataSource bibliography = new connectivity.tools.DataSource(getMSF(), dataSourceName); - assertEquals("pre-registered database has a wrong name!", dataSourceName, bibliography.getName()); - // 2. register a newly created data source, and verify it has the proper name - dataSourceName = "someDataSource"; - final XNamingService dataSourceRegistrations = UnoRuntime.queryInterface( - XNamingService.class, getMSF().createInstance( "com.sun.star.sdb.DatabaseContext" ) ); - final XNameAccess existenceCheck = UnoRuntime.queryInterface( XNameAccess.class, dataSourceRegistrations ); - if ( existenceCheck.hasByName( "someDataSource" ) ) - dataSourceRegistrations.revokeObject( "someDataSource" ); - dataSourceRegistrations.registerObject("someDataSource", m_dataSource.getXDataSource()); - assertEquals("registration name of a newly registered data source is wrong", dataSourceName, m_dataSource.getName()); - } - catch (Exception ex) - { - // Logger.getLogger(DataSource.class.getName()).log(Level.SEVERE, null, ex); - fail(); - } - } -} diff --git a/dbaccess/qa/complex/dbaccess/DatabaseApplication.java b/dbaccess/qa/complex/dbaccess/DatabaseApplication.java deleted file mode 100755 index 6aefa4582..000000000 --- a/dbaccess/qa/complex/dbaccess/DatabaseApplication.java +++ /dev/null @@ -1,98 +0,0 @@ -/************************************************************************* - * - * 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 complex.dbaccess; - -import com.sun.star.beans.PropertyValue; -import com.sun.star.frame.FrameSearchFlag; -import com.sun.star.frame.XComponentLoader; -import com.sun.star.frame.XModel; -import com.sun.star.frame.XStorable; -import com.sun.star.lang.XComponent; -import com.sun.star.sdb.XOfficeDatabaseDocument; -import com.sun.star.sdb.application.XDatabaseDocumentUI; -import com.sun.star.uno.Exception; -import com.sun.star.uno.UnoRuntime; -import connectivity.tools.DatabaseAccess; - -/** - * - * @author oj93728 - */ -public class DatabaseApplication -{ - - private final XOfficeDatabaseDocument databaseDocument; - private final XDatabaseDocumentUI documentUI; - private final DatabaseAccess db; - - public DatabaseApplication(final DatabaseAccess _db) throws Exception - { - db = _db; - databaseDocument = db.getDatabaseDocument(); - - // load it into a frame - final Object object = db.getORB().createInstance("com.sun.star.frame.Desktop"); - final XComponentLoader xComponentLoader = UnoRuntime.queryInterface(XComponentLoader.class, object); - final XComponent loadedComponent = xComponentLoader.loadComponentFromURL(db.getDocumentURL(), "_blank", FrameSearchFlag.ALL, new PropertyValue[0]); - - // get the controller, which provides access to various UI operations - final XModel docModel = UnoRuntime.queryInterface(XModel.class, loadedComponent); - documentUI = UnoRuntime.queryInterface(XDatabaseDocumentUI.class, docModel.getCurrentController()); - documentUI.connect(); - } - - public XOfficeDatabaseDocument getDatabaseDocument() - { - return databaseDocument; - } - - public XDatabaseDocumentUI getDocumentUI() - { - return documentUI; - } - - public DatabaseAccess getDb() - { - return db; - } - - public void store() - { - // store the doc in a new location - try - { - final XStorable storeDoc = UnoRuntime.queryInterface(XStorable.class, databaseDocument); - if (storeDoc != null) - { - storeDoc.store(); - } - } - catch (com.sun.star.io.IOException iOException) - { - } - } -} diff --git a/dbaccess/qa/complex/dbaccess/DatabaseDocument.java b/dbaccess/qa/complex/dbaccess/DatabaseDocument.java deleted file mode 100644 index 6f7106aab..000000000 --- a/dbaccess/qa/complex/dbaccess/DatabaseDocument.java +++ /dev/null @@ -1,996 +0,0 @@ -/************************************************************************* - * - * 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 complex.dbaccess; - -import com.sun.star.lang.NotInitializedException; -import com.sun.star.frame.DoubleInitializationException; -import com.sun.star.awt.XTopWindow; -import com.sun.star.beans.PropertyState; -import com.sun.star.document.DocumentEvent; -import com.sun.star.lang.XEventListener; -import com.sun.star.lang.XMultiServiceFactory; -import com.sun.star.script.XStorageBasedLibraryContainer; -import com.sun.star.task.XInteractionRequest; - -import com.sun.star.uno.Type; -import com.sun.star.uno.UnoRuntime; -import com.sun.star.frame.XStorable; -import com.sun.star.beans.PropertyValue; -import com.sun.star.beans.XPropertySet; -import com.sun.star.container.XNameContainer; -import com.sun.star.container.XSet; -import com.sun.star.document.XDocumentEventBroadcaster; -import com.sun.star.document.XDocumentEventListener; -import com.sun.star.document.XEmbeddedScripts; -import com.sun.star.document.XEventsSupplier; -import com.sun.star.lang.XComponent; -import com.sun.star.frame.XComponentLoader; -import com.sun.star.frame.XDispatch; -import com.sun.star.frame.XDispatchProvider; -import com.sun.star.frame.XFrame; -import com.sun.star.frame.XLoadable; -import com.sun.star.frame.XModel; -import com.sun.star.frame.XModel2; -import com.sun.star.frame.XTitle; -import com.sun.star.lang.EventObject; -import com.sun.star.lang.XServiceInfo; -import com.sun.star.lang.XSingleComponentFactory; -import com.sun.star.lang.XTypeProvider; -import com.sun.star.script.provider.XScriptProviderSupplier; -import com.sun.star.sdb.XDocumentDataSource; - -import com.sun.star.sdb.XFormDocumentsSupplier; -import com.sun.star.sdb.XOfficeDatabaseDocument; -import com.sun.star.sdb.XReportDocumentsSupplier; -import com.sun.star.task.DocumentMacroConfirmationRequest; -import com.sun.star.task.XInteractionApprove; -import com.sun.star.task.XInteractionContinuation; -import com.sun.star.task.XInteractionHandler; -import com.sun.star.uno.XComponentContext; -import com.sun.star.util.CloseVetoException; -import com.sun.star.util.URL; -import com.sun.star.util.XChangesBatch; -import com.sun.star.util.XCloseable; -import com.sun.star.util.XModifiable; -import com.sun.star.util.XURLTransformer; -import java.io.IOException; -import java.util.Iterator; -import java.util.ArrayList; -import java.util.logging.Level; -import java.util.logging.Logger; - -// ---------- junit imports ----------------- -import org.junit.After; -import org.junit.Before; -import org.junit.Test; -import static org.junit.Assert.*; -// ------------------------------------------ - -public class DatabaseDocument extends TestCase implements com.sun.star.document.XDocumentEventListener -{ - - private static final String _BLANK = "_blank"; - private XComponent m_callbackFactory = null; - private final ArrayList m_documentEvents = new ArrayList(); - private final ArrayList m_globalEvents = new ArrayList(); - // for those states, see testDocumentEvents - private static short STATE_NOT_STARTED = 0; - private static short STATE_LOADING_DOC = 1; - private static short STATE_MACRO_EXEC_APPROVED = 2; - private static short STATE_ON_LOAD_RECEIVED = 3; - private short m_loadDocState = STATE_NOT_STARTED; - - // ======================================================================================================== - /** a helper class which can be used by the Basic scripts in our test documents - * to notify us of events in this document - */ - private class CallbackComponent implements XDocumentEventListener, XTypeProvider - { - - public void documentEventOccured(DocumentEvent _event) - { - onDocumentEvent(_event); - } - - public void disposing(com.sun.star.lang.EventObject _Event) - { - // not interested in - } - - public Type[] getTypes() - { - final Class interfaces[] = getClass().getInterfaces(); - Type types[] = new Type[interfaces.length]; - for (int i = 0; i < interfaces.length; ++i) - { - types[i] = new Type(interfaces[i]); - } - return types; - } - - public byte[] getImplementationId() - { - return getClass().toString().getBytes(); - } - }; - - // ======================================================================================================== - private static String getCallbackComponentServiceName() - { - return "org.openoffice.complex.dbaccess.EventCallback"; - } - - // ======================================================================================================== - /** a factory for a CallbackComponent - */ - private class CallbackComponentFactory implements XSingleComponentFactory, XServiceInfo, XComponent - { - - private final ArrayList m_eventListeners = new ArrayList(); - - public Object createInstanceWithContext(XComponentContext _context) throws com.sun.star.uno.Exception - { - return new CallbackComponent(); - } - - public Object createInstanceWithArgumentsAndContext(Object[] arg0, XComponentContext _context) throws com.sun.star.uno.Exception - { - return createInstanceWithContext(_context); - } - - public String getImplementationName() - { - return "org.openoffice.complex.dbaccess.CallbackComponent"; - } - - public boolean supportsService(String _service) - { - return _service.equals(getCallbackComponentServiceName()); - } - - public String[] getSupportedServiceNames() - { - return new String[] - { - getCallbackComponentServiceName() - }; - } - - public void dispose() - { - final EventObject event = new EventObject(this); - - final ArrayList eventListenersCopy = (ArrayList) m_eventListeners.clone(); - final Iterator iter = eventListenersCopy.iterator(); - while (iter.hasNext()) - { - ((XEventListener) iter.next()).disposing(event); - } - } - - public void addEventListener(XEventListener _listener) - { - if (_listener != null) - { - m_eventListeners.add(_listener); - } - } - - public void removeEventListener(XEventListener _listener) - { - m_eventListeners.remove(_listener); - } - }; - - // ======================================================================================================== - private class MacroExecutionApprove implements XInteractionHandler - { - - private XInteractionHandler m_defaultHandler = null; - - MacroExecutionApprove(XMultiServiceFactory _factory) - { - try - { - m_defaultHandler = UnoRuntime.queryInterface(XInteractionHandler.class, _factory.createInstance("com.sun.star.task.InteractionHandler")); - } - catch (Exception ex) - { - Logger.getLogger(DatabaseDocument.class.getName()).log(Level.SEVERE, null, ex); - } - } - - public void handle(XInteractionRequest _request) - { - final Object request = _request.getRequest(); - if (!(request instanceof DocumentMacroConfirmationRequest) && (m_defaultHandler != null)) - { - m_defaultHandler.handle(_request); - return; - } - - assertEquals("interaction handleer called in wrong state", STATE_LOADING_DOC, m_loadDocState); - - // auto-approve - final XInteractionContinuation continuations[] = _request.getContinuations(); - for (int i = 0; i < continuations.length; ++i) - { - final XInteractionApprove approve = UnoRuntime.queryInterface(XInteractionApprove.class, continuations[i]); - if (approve != null) - { - approve.select(); - m_loadDocState = STATE_MACRO_EXEC_APPROVED; - break; - } - } - } - }; - - // ======================================================================================================== - // -------------------------------------------------------------------------------------------------------- - @Before - public void before() throws java.lang.Exception - { - super.before(); - - try - { - // at our service factory, insert a new factory for our CallbackComponent - // this will allow the Basic code in our test documents to call back into this test case - // here, by just instantiating this service - final XSet globalFactory = UnoRuntime.queryInterface(XSet.class, getMSF()); - m_callbackFactory = new CallbackComponentFactory(); - globalFactory.insert(m_callbackFactory); - - // register ourself as listener at the global event broadcaster - final XDocumentEventBroadcaster broadcaster = UnoRuntime.queryInterface(XDocumentEventBroadcaster.class, getMSF().createInstance("com.sun.star.frame.GlobalEventBroadcaster")); - broadcaster.addDocumentEventListener(this); - } - catch (Exception e) - { - System.out.println("could not create the test case, error message:\n" + e.getMessage()); - e.printStackTrace(System.err); - fail("failed to create the test case"); - } - } - - // -------------------------------------------------------------------------------------------------------- - @After - public void after() throws java.lang.Exception - { - try - { - // dispose our callback factory. This will automatically remove it from our service - // factory - m_callbackFactory.dispose(); - - // revoke ourself as listener at the global event broadcaster - final XDocumentEventBroadcaster broadcaster = UnoRuntime.queryInterface(XDocumentEventBroadcaster.class, getMSF().createInstance("com.sun.star.frame.GlobalEventBroadcaster")); - broadcaster.removeDocumentEventListener(this); - } - catch (Exception e) - { - System.out.println("could not create the test case, error message:\n" + e.getMessage()); - e.printStackTrace(System.err); - fail("failed to close the test case"); - } - - super.after(); - } - - // -------------------------------------------------------------------------------------------------------- - private static class UnoMethodDescriptor - { - - public Class unoInterfaceClass = null; - public String methodName = null; - - UnoMethodDescriptor(Class _class, String _method) - { - unoInterfaceClass = _class; - methodName = _method; - } - } - - // -------------------------------------------------------------------------------------------------------- - private void impl_checkDocumentInitState(Object _document, boolean _isInitialized) - { - // things you cannot do with an uninitialized document: - final UnoMethodDescriptor[] unsupportedMethods = new UnoMethodDescriptor[] - { - new UnoMethodDescriptor(XStorable.class, "store"), - new UnoMethodDescriptor(XFormDocumentsSupplier.class, "getFormDocuments"), - new UnoMethodDescriptor(XReportDocumentsSupplier.class, "getReportDocuments"), - new UnoMethodDescriptor(XScriptProviderSupplier.class, "getScriptProvider"), - new UnoMethodDescriptor(XEventsSupplier.class, "getEvents"), - new UnoMethodDescriptor(XTitle.class, "getTitle"), - new UnoMethodDescriptor(XModel2.class, "getControllers") - // (there's much more than this, but we cannot list all methods here, can we ...) - }; - - for (int i = 0; i < unsupportedMethods.length; ++i) - { - assureException( _document, unsupportedMethods[i].unoInterfaceClass, - unsupportedMethods[i].methodName, new Object[]{}, _isInitialized ? null : NotInitializedException.class ); - } - } - - // -------------------------------------------------------------------------------------------------------- - private XModel impl_createDocument() throws Exception - { - final XModel databaseDoc = UnoRuntime.queryInterface(XModel.class, getMSF().createInstance("com.sun.star.sdb.OfficeDatabaseDocument")); - - // should not be initialized here - we did neither initNew nor load nor storeAsURL it - impl_checkDocumentInitState(databaseDoc, false); - - return databaseDoc; - } - - // -------------------------------------------------------------------------------------------------------- - private void impl_closeDocument(XModel _databaseDoc) throws CloseVetoException, IOException, Exception - { - final XCloseable closeDoc = UnoRuntime.queryInterface(XCloseable.class, _databaseDoc); - closeDoc.close(true); - } - - // -------------------------------------------------------------------------------------------------------- - private XModel impl_createEmptyEmbeddedHSQLDocument() throws Exception, IOException - { - final XModel databaseDoc = UnoRuntime.queryInterface(XModel.class, getMSF().createInstance("com.sun.star.sdb.OfficeDatabaseDocument")); - final XStorable storeDoc = UnoRuntime.queryInterface(XStorable.class, databaseDoc); - - // verify the document rejects API calls which require it to be initialized - impl_checkDocumentInitState(databaseDoc, false); - - // though the document is not initialized, you can ask for the location, the URL, and the args - final String location = storeDoc.getLocation(); - final String url = databaseDoc.getURL(); - final PropertyValue[] args = databaseDoc.getArgs(); - // they should be all empty at this time - assertEquals("location is expected to be empty here", "", location); - assertEquals("URL is expected to be empty here", "", url); - assertEquals("Args are expected to be empty here", 0, args.length); - - // and, you should be able to set properties at the data source - final XOfficeDatabaseDocument dataSourceAccess = UnoRuntime.queryInterface(XOfficeDatabaseDocument.class, databaseDoc); - final XPropertySet dsProperties = UnoRuntime.queryInterface(XPropertySet.class, dataSourceAccess.getDataSource()); - dsProperties.setPropertyValue("URL", "sdbc:embedded:hsqldb"); - - final String documentURL = createTempFileURL(); - storeDoc.storeAsURL(documentURL, new PropertyValue[0]); - - // now that the document is stored, ... - // ... its URL should be correct - assertEquals("wrong URL after storing the document", documentURL, databaseDoc.getURL()); - // ... it should be initialized - impl_checkDocumentInitState(databaseDoc, true); - - return databaseDoc; - } - - // -------------------------------------------------------------------------------------------------------- - @Test - public void testLoadable() throws Exception, IOException - { - XModel databaseDoc = impl_createEmptyEmbeddedHSQLDocument(); - String documentURL = databaseDoc.getURL(); - - // there's three methods how you can initialize a database document: - - // .................................................................... - // 1. XStorable::storeAsURL - // (this is for compatibility reasons, to not break existing code) - // this test is already made in impl_createEmptyEmbeddedHSQLDocument - - // .................................................................... - // 2. XLoadable::load - databaseDoc = UnoRuntime.queryInterface(XModel.class, getMSF().createInstance("com.sun.star.sdb.OfficeDatabaseDocument")); - documentURL = copyToTempFile(documentURL); - // load the doc, and verify it's initialized then, and has the proper URL - XLoadable loadDoc = UnoRuntime.queryInterface(XLoadable.class, databaseDoc); - loadDoc.load(new PropertyValue[] - { - new PropertyValue("URL", 0, documentURL, PropertyState.DIRECT_VALUE) - }); - databaseDoc.attachResource(documentURL, new PropertyValue[0]); - - assertEquals("wrong URL after loading the document", documentURL, databaseDoc.getURL()); - impl_checkDocumentInitState(databaseDoc, true); - - // and while we are here ... initilizing the same document again should not be possible - assureException( databaseDoc, XLoadable.class, "initNew", new Object[0], - DoubleInitializationException.class ); - assureException( databaseDoc, XLoadable.class, "load", new Object[] { new PropertyValue[0] }, - DoubleInitializationException.class ); - - // .................................................................... - // 3. XLoadable::initNew - impl_closeDocument(databaseDoc); - databaseDoc = impl_createDocument(); - loadDoc = UnoRuntime.queryInterface(XLoadable.class, databaseDoc); - loadDoc.initNew(); - assertEquals("wrong URL after initializing the document", "", databaseDoc.getURL()); - impl_checkDocumentInitState(databaseDoc, true); - - // same as above - initializing the document a second time must fail - assureException( databaseDoc, XLoadable.class, "initNew", new Object[0], - DoubleInitializationException.class ); - assureException( databaseDoc, XLoadable.class, "load", new Object[] { new PropertyValue[0] }, - DoubleInitializationException.class ); - } - - // -------------------------------------------------------------------------------------------------------- - private PropertyValue[] impl_getMarkerLoadArgs() - { - return new PropertyValue[] - { - new PropertyValue( "PickListEntry", 0, false, PropertyState.DIRECT_VALUE ), - new PropertyValue( "TestCase_Marker", 0, "Yes", PropertyState.DIRECT_VALUE ) - }; - } - - // -------------------------------------------------------------------------------------------------------- - private boolean impl_hasMarker( final PropertyValue[] _args ) - { - for ( int i=0; i<_args.length; ++i ) - { - if ( _args[i].Name.equals( "TestCase_Marker" ) && _args[i].Value.equals( "Yes" ) ) - { - return true; - } - } - return false; - } - - // -------------------------------------------------------------------------------------------------------- - private PropertyValue[] impl_getDefaultLoadArgs() - { - return new PropertyValue[] - { - new PropertyValue("PickListEntry", 0, false, PropertyState.DIRECT_VALUE) - }; - } - - // -------------------------------------------------------------------------------------------------------- - private PropertyValue[] impl_getMacroExecLoadArgs() - { - return new PropertyValue[] - { - new PropertyValue("PickListEntry", 0, false, PropertyState.DIRECT_VALUE), - new PropertyValue("MacroExecutionMode", 0, com.sun.star.document.MacroExecMode.USE_CONFIG, PropertyState.DIRECT_VALUE), - new PropertyValue("InteractionHandler", 0, new MacroExecutionApprove(getMSF()), PropertyState.DIRECT_VALUE) - }; - } - - // -------------------------------------------------------------------------------------------------------- - private int impl_setMacroSecurityLevel(int _level) throws Exception - { - final XMultiServiceFactory configProvider = UnoRuntime.queryInterface(XMultiServiceFactory.class, getMSF().createInstance("com.sun.star.configuration.ConfigurationProvider")); - - final PropertyValue[] args = new PropertyValue[] - { - new PropertyValue("nodepath", 0, "/org.openoffice.Office.Common/Security/Scripting", PropertyState.DIRECT_VALUE) - }; - - final XPropertySet securitySettings = UnoRuntime.queryInterface(XPropertySet.class, configProvider.createInstanceWithArguments("com.sun.star.configuration.ConfigurationUpdateAccess", args)); - final int oldValue = ((Integer) securitySettings.getPropertyValue("MacroSecurityLevel")).intValue(); - securitySettings.setPropertyValue("MacroSecurityLevel", Integer.valueOf(_level)); - - final XChangesBatch committer = UnoRuntime.queryInterface(XChangesBatch.class, securitySettings); - committer.commitChanges(); - - return oldValue; - } - - // -------------------------------------------------------------------------------------------------------- - private XModel impl_loadDocument( final String _documentURL, final PropertyValue[] _loadArgs ) throws Exception - { - final XComponentLoader loader = UnoRuntime.queryInterface(XComponentLoader.class, getMSF().createInstance("com.sun.star.frame.Desktop")); - return UnoRuntime.queryInterface(XModel.class, loader.loadComponentFromURL(_documentURL, _BLANK, 0, _loadArgs)); - } - - // -------------------------------------------------------------------------------------------------------- - private void impl_storeDocument( final XModel _document ) throws Exception, IOException - { - // store the document - final String documentURL = FileHelper.getOOoCompatibleFileURL( _document.getURL() ); - final XStorable storeDoc = UnoRuntime.queryInterface(XStorable.class, _document); - storeDoc.store(); - - } - - // -------------------------------------------------------------------------------------------------------- - private XModel impl_createDocWithMacro( final String _libName, final String _moduleName, final String _code ) throws Exception, IOException - { - // create an empty document - XModel databaseDoc = impl_createEmptyEmbeddedHSQLDocument(); - - // create Basic library/module therein - final XEmbeddedScripts embeddedScripts = UnoRuntime.queryInterface(XEmbeddedScripts.class, databaseDoc); - final XStorageBasedLibraryContainer basicLibs = embeddedScripts.getBasicLibraries(); - final XNameContainer newLib = basicLibs.createLibrary( _libName ); - newLib.insertByName( _moduleName, _code ); - - return databaseDoc; - } - - // -------------------------------------------------------------------------------------------------------- - /** tests various aspects of database document "revenants" - * - * Well, I do not really have a good term for this ... The point is, database documents are in real - * only *one* aspect of a more complex thing. The second aspect is a data source. Both, in some sense, - * just represent different views on the same thing. For a given database, there's at each time at most - * one data source, and at most one database document. Both have a independent life time, and are - * created when needed. - * In particular, a document can be closed (this is what happens when the last UI window displaying - * this document is closed), and then dies. Now when the other "view", the data source, still exists, - * the the underlying document data is not discarded, but kept alive (else the data source would die - * just because the document dies, which is not desired). If the document is loaded, again, then - * it is re-created, using the data of its previous "incarnation". - * - * This method here tests some of those aspects of a document which should survive the death of one - * instance and re-creation as a revenant. - */ - @Test - public void testDocumentRevenants() throws Exception, IOException - { - // create an empty document - XModel databaseDoc = impl_createDocWithMacro( "Lib", "Module", - "Sub Hello\n" + - " MsgBox \"Hello\"\n" + - "End Sub\n" - ); - impl_storeDocument( databaseDoc ); - final String documentURL = databaseDoc.getURL(); - - // at this stage, the marker should not yet be present in the doc's args, else some of the below - // tests become meaningless - assertTrue( "A newly created doc should not have the test case marker", !impl_hasMarker( databaseDoc.getArgs() ) ); - - // obtain the DataSource associated with the document. Keeping this alive - // ensures that the "impl data" of the document is kept alive, too, so when closing - // and re-opening it, this "impl data" must be re-used. - XDocumentDataSource dataSource = UnoRuntime.queryInterface(XDocumentDataSource.class, (UnoRuntime.queryInterface(XOfficeDatabaseDocument.class, databaseDoc)).getDataSource()); - - // close and reload the doc - impl_closeDocument(databaseDoc); - databaseDoc = impl_loadDocument( documentURL, impl_getMarkerLoadArgs() ); - // since we just put the marker into the load-call, it should be present at the doc - assertTrue( "The test case marker got lost.", impl_hasMarker( databaseDoc.getArgs() ) ); - - // The basic library should have survived - final XEmbeddedScripts embeddedScripts = UnoRuntime.queryInterface(XEmbeddedScripts.class, databaseDoc); - final XStorageBasedLibraryContainer basicLibs = embeddedScripts.getBasicLibraries(); - assertTrue( "Baisc lib did not survive reloading a closed document", basicLibs.hasByName( "Lib" ) ); - final XNameContainer lib = UnoRuntime.queryInterface(XNameContainer.class, basicLibs.getByName("Lib")); - assertTrue( "Basic module did not survive reloading a closed document", lib.hasByName( "Module" ) ); - - // now closing the doc, and obtaining it from the data source, should preserve the marker we put into the load - // args - impl_closeDocument( databaseDoc ); - databaseDoc = UnoRuntime.queryInterface(XModel.class, dataSource.getDatabaseDocument()); - assertTrue( "The test case marker did not survive re-retrieval of the doc from the data source.", - impl_hasMarker( databaseDoc.getArgs() ) ); - - // on the other hand, closing and regurlarly re-loading the doc *without* the marker should indeed - // lose it - impl_closeDocument( databaseDoc ); - databaseDoc = impl_loadDocument( documentURL, impl_getDefaultLoadArgs() ); - assertTrue( "Reloading the document kept the old args, instead of the newly supplied ones.", - !impl_hasMarker( databaseDoc.getArgs() ) ); - - // clean up - impl_closeDocument( databaseDoc ); - } - - // -------------------------------------------------------------------------------------------------------- - @Test - public void testDocumentEvents() throws Exception, IOException - { - // create an empty document - final String libName = "EventHandlers"; - final String moduleName = "all"; - final String eventHandlerCode = - "Option Explicit\n" + - "\n" + - "Sub OnLoad\n" + - " Dim oCallback as Object\n" + - " oCallback = createUnoService( \"" + getCallbackComponentServiceName() + "\" )\n" + - "\n" + - " ' as long as the Document is not passed to the Basic callbacks, we need to create\n" + - " ' one ourself\n" + - " Dim oEvent as new com.sun.star.document.DocumentEvent\n" + - " oEvent.EventName = \"OnLoad\"\n" + - " oEvent.Source = ThisComponent\n" + - "\n" + - " oCallback.documentEventOccurred( oEvent )\n" + - "End Sub\n"; - XModel databaseDoc = impl_createDocWithMacro( libName, moduleName, eventHandlerCode ); - final String documentURL = databaseDoc.getURL(); - - // bind the macro to the OnLoad event - final String macroURI = "vnd.sun.star.script:" + libName + "." + moduleName + ".OnLoad?language=Basic&location=document"; - final XEventsSupplier eventsSupplier = UnoRuntime.queryInterface(XEventsSupplier.class, databaseDoc); - eventsSupplier.getEvents().replaceByName("OnLoad", new PropertyValue[] - { - new PropertyValue("EventType", 0, "Script", PropertyState.DIRECT_VALUE), - new PropertyValue("Script", 0, macroURI, PropertyState.DIRECT_VALUE) - }); - - // store the document, and close it - impl_storeDocument( databaseDoc ); - impl_closeDocument( databaseDoc ); - - // ensure the macro security configuration is "ask the user for document macro execution" - final int oldSecurityLevel = impl_setMacroSecurityLevel(1); - - // load it, again - m_loadDocState = STATE_LOADING_DOC; - // expected order of states is: - // STATE_LOADING_DOC - initialized here - // STATE_MACRO_EXEC_APPROVED - done in our interaction handler, which auto-approves the execution of macros - // STATE_ON_LOAD_RECEIVED - done in our callback for the document events - // - // In particular, it is important that the interaction handler (which plays the role of the user confirmation - // here) is called before the OnLoad notification is received - since the latter happens from within - // a Basic macro which is bound to the OnLoad event of the document. - - final String context = "OnLoad"; - impl_startObservingEvents(context); - databaseDoc = impl_loadDocument( documentURL, impl_getMacroExecLoadArgs() ); - impl_stopObservingEvents(m_documentEvents, new String[] - { - "OnLoad" - }, context); - - assertEquals("our provided interaction handler was not called", STATE_ON_LOAD_RECEIVED, m_loadDocState); - - // restore macro security level - impl_setMacroSecurityLevel(oldSecurityLevel); - - // close the document - impl_closeDocument(databaseDoc); - } - - // -------------------------------------------------------------------------------------------------------- - @Test - public void testGlobalEvents() throws Exception, IOException - { - XModel databaseDoc = impl_createEmptyEmbeddedHSQLDocument(); - final XStorable storeDoc = UnoRuntime.queryInterface(XStorable.class, databaseDoc); - - String context, newURL; - - // XStorable.store - final String oldURL = databaseDoc.getURL(); - context = "store"; - impl_startObservingEvents(context); - storeDoc.store(); - assertEquals("store is not expected to change the document URL", databaseDoc.getURL(), oldURL); - impl_stopObservingEvents(m_globalEvents, new String[] - { - "OnSave", "OnSaveDone" - }, context); - - // XStorable.storeToURL - context = "storeToURL"; - impl_startObservingEvents(context); - storeDoc.storeToURL(createTempFileURL(), new PropertyValue[0]); - assertEquals("storetoURL is not expected to change the document URL", databaseDoc.getURL(), oldURL); - impl_stopObservingEvents(m_globalEvents, new String[] - { - "OnSaveTo", "OnSaveToDone" - }, context); - - // XStorable.storeAsURL - newURL = createTempFileURL(); - context = "storeAsURL"; - impl_startObservingEvents(context); - storeDoc.storeAsURL(newURL, new PropertyValue[0]); - assertEquals("storeAsURL is expected to change the document URL", databaseDoc.getURL(), newURL); - impl_stopObservingEvents(m_globalEvents, new String[] - { - "OnSaveAs", "OnSaveAsDone" - }, context); - - // XModifiable.setModified - final XModifiable modifyDoc = UnoRuntime.queryInterface(XModifiable.class, databaseDoc); - context = "setModified"; - impl_startObservingEvents(context); - modifyDoc.setModified(true); - assertEquals("setModified didn't work", modifyDoc.isModified(), true); - impl_stopObservingEvents(m_globalEvents, new String[] - { - "OnModifyChanged" - }, context); - - // XStorable.store, with implicit reset of the "Modified" flag - context = "store (2)"; - impl_startObservingEvents(context); - storeDoc.store(); - assertEquals("'store' should implicitly reset the modified flag", modifyDoc.isModified(), false); - impl_stopObservingEvents(m_globalEvents, new String[] - { - "OnSave", "OnSaveDone", "OnModifyChanged" - }, context); - - // XComponentLoader.loadComponentFromURL - newURL = copyToTempFile(databaseDoc.getURL()); - final XComponentLoader loader = UnoRuntime.queryInterface(XComponentLoader.class, getMSF().createInstance("com.sun.star.frame.Desktop")); - context = "loadComponentFromURL"; - impl_startObservingEvents(context); - databaseDoc = UnoRuntime.queryInterface(XModel.class, loader.loadComponentFromURL(newURL, _BLANK, 0, impl_getDefaultLoadArgs())); - impl_stopObservingEvents(m_globalEvents, - new String[] - { - "OnLoadFinished", "OnViewCreated", "OnFocus", "OnLoad" - }, context); - - // closing a document by API - final XCloseable closeDoc = UnoRuntime.queryInterface(XCloseable.class, databaseDoc); - context = "close (API)"; - impl_startObservingEvents(context); - closeDoc.close(true); - impl_stopObservingEvents(m_globalEvents, - new String[] - { - "OnPrepareUnload", "OnViewClosed", "OnUnload" - }, context); - - // closing a document via UI - context = "close (UI)"; - impl_startObservingEvents("prepare for '" + context + "'"); - databaseDoc = UnoRuntime.queryInterface(XModel.class, loader.loadComponentFromURL(newURL, _BLANK, 0, impl_getDefaultLoadArgs())); - impl_waitForEvent(m_globalEvents, "OnLoad", 5000); - // wait for all events to arrive - OnLoad should be the last one - - final XDispatchProvider dispatchProvider = UnoRuntime.queryInterface(XDispatchProvider.class, databaseDoc.getCurrentController().getFrame()); - final URL url = impl_getURL(".uno:CloseDoc"); - final XDispatch dispatcher = dispatchProvider.queryDispatch(url, "", 0); - impl_startObservingEvents(context); - dispatcher.dispatch(url, new PropertyValue[0]); - impl_stopObservingEvents(m_globalEvents, - new String[] - { - "OnPrepareViewClosing", "OnViewClosed", "OnPrepareUnload", "OnUnload" - }, context); - - // creating a new document - databaseDoc = impl_createDocument(); - final XLoadable loadDoc = UnoRuntime.queryInterface(XLoadable.class, databaseDoc); - context = "initNew"; - impl_startObservingEvents(context); - loadDoc.initNew(); - impl_stopObservingEvents(m_globalEvents, new String[] - { - "OnCreate" - }, context); - - impl_startObservingEvents(context + " (cleanup)"); - impl_closeDocument(databaseDoc); - impl_waitForEvent(m_globalEvents, "OnUnload", 5000); - - // focus changes - context = "activation"; - // for this, load a database document ... - impl_startObservingEvents("prepare for '" + context + "'"); - databaseDoc = UnoRuntime.queryInterface(XModel.class, loader.loadComponentFromURL(newURL, _BLANK, 0, impl_getDefaultLoadArgs())); - final int previousOnLoadEventPos = impl_waitForEvent(m_globalEvents, "OnLoad", 5000); - // ... and another document ... - final String otherURL = copyToTempFile(databaseDoc.getURL()); - final XModel otherDoc = UnoRuntime.queryInterface(XModel.class, loader.loadComponentFromURL(otherURL, _BLANK, 0, impl_getDefaultLoadArgs())); - impl_raise(otherDoc); - impl_waitForEvent(m_globalEvents, "OnLoad", 5000, previousOnLoadEventPos + 1); - - // ... and switch between the two - impl_startObservingEvents(context); - impl_raise(databaseDoc); - impl_stopObservingEvents(m_globalEvents, new String[] - { - "OnUnfocus", "OnFocus" - }, context); - - // cleanup - impl_startObservingEvents("cleanup after '" + context + "'"); - impl_closeDocument(databaseDoc); - impl_closeDocument(otherDoc); - } - - // -------------------------------------------------------------------------------------------------------- - private URL impl_getURL(String _completeURL) throws Exception - { - final URL[] url = - { - new URL() - }; - url[0].Complete = _completeURL; - final XURLTransformer urlTransformer = UnoRuntime.queryInterface(XURLTransformer.class, getMSF().createInstance("com.sun.star.util.URLTransformer")); - urlTransformer.parseStrict(url); - return url[0]; - } - - // -------------------------------------------------------------------------------------------------------- - private void impl_raise(XModel _document) - { - final XFrame frame = _document.getCurrentController().getFrame(); - final XTopWindow topWindow = UnoRuntime.queryInterface(XTopWindow.class, frame.getContainerWindow()); - topWindow.toFront(); - } - - // -------------------------------------------------------------------------------------------------------- - private void impl_startObservingEvents(String _context) - { - System.out.println(" " + _context + " {"); - synchronized (m_documentEvents) - { - m_documentEvents.clear(); - } - synchronized (m_globalEvents) - { - m_globalEvents.clear(); - } - } - - // -------------------------------------------------------------------------------------------------------- - private void impl_stopObservingEvents(ArrayList _actualEvents, String[] _expectedEvents, String _context) - { - try - { - synchronized (_actualEvents) - { - int actualEventCount = _actualEvents.size(); - while (actualEventCount < _expectedEvents.length) - { - // well, it's possible not all events already arrived, yet - finally, some of them - // are notified asynchronously - // So, wait a few seconds. - try - { - _actualEvents.wait(20000); - } - catch (InterruptedException ex) - { - } - - if (actualEventCount == _actualEvents.size()) - // the above wait was left because of the timeout, *not* because an event - // arrived. Okay, we won't wait any longer, this is a failure. - { - break; - } - actualEventCount = _actualEvents.size(); - } - - assertEquals("wrong event count for '" + _context + "'", - _expectedEvents.length, _actualEvents.size()); - - for (int i = 0; i < _expectedEvents.length; ++i) - { - assertEquals("wrong event at positon " + (i + 1) + " for '" + _context + "'", - _expectedEvents[i], _actualEvents.get(i)); - } - } - } - finally - { - System.out.println(" }"); - } - } - - // -------------------------------------------------------------------------------------------------------- - int impl_waitForEvent(ArrayList _eventQueue, String _expectedEvent, int _maxMilliseconds) - { - return impl_waitForEvent(_eventQueue, _expectedEvent, _maxMilliseconds, 0); - } - - // -------------------------------------------------------------------------------------------------------- - int impl_waitForEvent(ArrayList _eventQueue, String _expectedEvent, int _maxMilliseconds, int _firstQueueElementToCheck) - { - synchronized (_eventQueue) - { - int waitedMilliseconds = 0; - - while (waitedMilliseconds < _maxMilliseconds) - { - for (int i = _firstQueueElementToCheck; i < _eventQueue.size(); ++i) - { - if (_expectedEvent.equals(_eventQueue.get(i))) - // found the event in the queue - { - return i; - } - } - - // wait a little, perhaps the event will still arrive - try - { - _eventQueue.wait(500); - waitedMilliseconds += 500; - } - catch (InterruptedException e) - { - } - } - } - - fail("expected event '" + _expectedEvent + "' did not arrive after " + _maxMilliseconds + " milliseconds"); - return -1; - } - - // -------------------------------------------------------------------------------------------------------- - void onDocumentEvent(DocumentEvent _Event) - { - if ("OnTitleChanged".equals(_Event.EventName)) - // OnTitleChanged events are notified too often. This is known, and accepted. - // (the deeper reason is that it's diffult to determine, in the DatabaseDocument implementatin, - // when the title actually changed. In particular, when we do a saveAsURL, and then ask for a - // title *before* the TitleHelper got the document's OnSaveAsDone event, then the wrong (old) - // title is obtained. - { - return; - } - - if ((_Event.EventName.equals("OnLoad")) && (m_loadDocState != STATE_NOT_STARTED)) - { - assertEquals("OnLoad event must come *after* invocation of the interaction handler / user!", - m_loadDocState, STATE_MACRO_EXEC_APPROVED); - m_loadDocState = STATE_ON_LOAD_RECEIVED; - } - - synchronized (m_documentEvents) - { - m_documentEvents.add(_Event.EventName); - m_documentEvents.notifyAll(); - } - - System.out.println(" document event: " + _Event.EventName); - } - - // -------------------------------------------------------------------------------------------------------- - public void documentEventOccured(DocumentEvent _Event) - { - if ("OnTitleChanged".equals(_Event.EventName)) - // ignore. See onDocumentEvent for a justification - { - return; - } - - synchronized (m_globalEvents) - { - m_globalEvents.add(_Event.EventName); - m_globalEvents.notifyAll(); - } - - System.out.println(" global event: " + _Event.EventName); - } - - // -------------------------------------------------------------------------------------------------------- - public void disposing(EventObject _Event) - { - // not interested in - } -} diff --git a/dbaccess/qa/complex/dbaccess/FileHelper.java b/dbaccess/qa/complex/dbaccess/FileHelper.java deleted file mode 100644 index f9c2b0a40..000000000 --- a/dbaccess/qa/complex/dbaccess/FileHelper.java +++ /dev/null @@ -1,44 +0,0 @@ -/************************************************************************* - * - * 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 complex.dbaccess; - -public class FileHelper -{ - private FileHelper(){} - static public String getOOoCompatibleFileURL( String _javaFileURL ) - { - String returnURL = _javaFileURL; - if ( ( returnURL.indexOf( "file:/" ) == 0 ) && ( returnURL.indexOf( "file:///" ) == -1 ) ) - { - // for some reason, the URLs here in Java start with "file:/" only, instead of "file:///" - // Some of the office code doesn't like this ... - returnURL = "file:///" + returnURL.substring( 6 ); - } - return returnURL; - } -} diff --git a/dbaccess/qa/complex/dbaccess/Parser.java b/dbaccess/qa/complex/dbaccess/Parser.java deleted file mode 100644 index 89662f5e9..000000000 --- a/dbaccess/qa/complex/dbaccess/Parser.java +++ /dev/null @@ -1,201 +0,0 @@ -/************************************************************************* - * - * 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 complex.dbaccess; - -import com.sun.star.beans.XPropertySet; -import com.sun.star.container.XIndexAccess; -import com.sun.star.sdb.XParametersSupplier; -import com.sun.star.sdb.XSingleSelectQueryComposer; -import com.sun.star.sdbc.DataType; -import com.sun.star.sdbc.SQLException; -import com.sun.star.uno.Exception; -import com.sun.star.uno.UnoRuntime; - - -// ---------- junit imports ----------------- -import org.junit.Test; -import static org.junit.Assert.*; -// ------------------------------------------ - -public class Parser extends CRMBasedTestCase -{ - // -------------------------------------------------------------------------------------------------------- - @Override - protected void createTestCase() - { - try - { - super.createTestCase(); - m_database.getDatabase().getDataSource().createQuery( "query products", "SELECT * FROM \"products\"" ); - } - catch ( Exception e ) - { - e.printStackTrace( System.err ); - fail( "caught an exception (" + e.getMessage() + ") while creating the test case"); - } - } - - // -------------------------------------------------------------------------------------------------------- - @Test - public void checkWhere() throws Exception - { - final XSingleSelectQueryComposer composer = createQueryComposer(); - final String SELECT = "SELECT \"products\".\"Name\" FROM \"products\" WHERE "; - final String[] queries = new String[] - { - "\"ID\" in ( 1,2,3,4)" - ,"not ( \"ID\" in ( 1,2,3,4))" - ,"(1 = 1) is true" - ,"(1 = 1) is not false" - ,"(1 = 1) is not null" - ,"not ( (1 = 1) is not null)" - ,"'a' like 'a%'" - ,"not ( 'a' like 'a%')" - ,"'a' not like 'a%'" - ,"1 between 0 and 2" - ,"not ( 1 between 0 and 2 )" - ,"1 not between 3 and 4" - ,"1 not between ( select \"ID\" from \"categories\") and ( select \"ID\" from \"categories\")" - ,"1 = 1" - ,"0 < 1" - ,"not(0 < 1)" - ,"1 > 0" - ,"not(1 > 0)" - ,"1 <> 0" - ,"(1 <> 0 and 'a' = 'a' and 'c' = 'd') or (1 = 1 and 2 = 2 and 3 = 4)" - ,"not ( 1 <> 0 )" - ,"\"CategoryID\" in ( select \"ID\" from \"categories\")" - ,"not (\"CategoryID\" in ( select \"ID\" from \"categories\"))" - ,"\"CategoryID\" not in ( select \"ID\" from \"categories\")" - }; - for (int i = 0; i < queries.length; i++) - { - composer.setQuery( SELECT + queries[i]); - } - } - // -------------------------------------------------------------------------------------------------------- - /** verifies that aliases for inner queries work as expected - */ - @Test - public void checkJoinSyntax() throws Exception - { - final XSingleSelectQueryComposer composer = createQueryComposer(); - - // feed the composer with some statements. If any of those cannot be parsed, the composer - // will throw an exception - which is a regression then - composer.setQuery( - "SELECT \"categories\".\"Name\", " + - "\"products\".\"Name\" " + - "FROM \"products\" RIGHT OUTER JOIN \"categories\" AS \"categories\" ON \"products\".\"CategoryID\" = \"categories\".\"ID\"" ); - - composer.setQuery( - "SELECT \"categories\".\"Name\", " + - "\"products\".\"Name\" " + - "FROM \"products\" LEFT OUTER JOIN \"categories\" AS \"categories\" ON \"products\".\"CategoryID\" = \"categories\".\"ID\"" ); - - composer.setQuery( - "SELECT \"categories\".\"Name\", " + - "\"products\".\"Name\" " + - "FROM \"products\" CROSS JOIN \"categories\" AS \"categories\"" ); - - composer.setQuery( - "SELECT \"categories\".\"Name\", " + - "\"products\".\"Name\" " + - "FROM \"products\" INNER JOIN \"categories\" AS \"categories\" ON \"products\".\"CategoryID\" = \"categories\".\"ID\"" ); - - // just to be sure the composer *really* parses upon setting the query: feed it with - // an unparseable statement - boolean caughtExpected = false; - try - { - composer.setQuery( "NONSENSE" ); - } - catch( SQLException e ) - { - caughtExpected = true; - } - assertTrue( "pre-condition not met: parser should except on unparseable statements, else the complete" + - "test is bogus!", caughtExpected ); - } - - // -------------------------------------------------------------------------------------------------------- - private void impl_checkParameters( final String _statement, final String[] _expectedParameterNames, final int[] _expectedParameterTypes,final String _context ) throws Exception - { - final XSingleSelectQueryComposer composer = createQueryComposer(); - composer.setQuery( _statement ); - - assertEquals( "checkParameterTypes: internal error", _expectedParameterNames.length, _expectedParameterTypes.length ); - - final XParametersSupplier paramSupp = UnoRuntime.queryInterface(XParametersSupplier.class, composer); - final XIndexAccess parameters = paramSupp.getParameters(); - - assertEquals( "(ctx: " + _context + ") unexpected parameter count", _expectedParameterNames.length, parameters.getCount() ); - for ( int i=0; i<parameters.getCount(); ++i ) - { - final XPropertySet parameter = UnoRuntime.queryInterface(XPropertySet.class, parameters.getByIndex(i)); - - final String name = (String)parameter.getPropertyValue( "Name" ); - assertEquals( "(ctx: " + _context + ") unexpected parameter name for parameter number " + ( i + 1 ), _expectedParameterNames[i], name ); - - final int type = ((Integer)parameter.getPropertyValue( "Type" )).intValue(); - assertEquals( "(ctx: " + _context + ") unexpected data type for parameter number " + ( i + 1 ), _expectedParameterTypes[i], type ); - } - } - - // -------------------------------------------------------------------------------------------------------- - /** verifies that the parser properly recognizes the types of parameters - */ - @Test - public void checkParameterTypes() throws Exception - { - impl_checkParameters( - "SELECT * FROM \"all orders\" " + - "WHERE ( \"Order Date\" >= :order_date ) " + - " AND ( ( \"Customer Name\" LIKE :customer ) " + - " OR ( \"Product Name\" LIKE ? ) " + - " )", - new String[] { "order_date", "customer", "Product Name" }, - new int[] { DataType.DATE, DataType.VARCHAR, DataType.VARCHAR }, - ">= && LIKE" - ); - - impl_checkParameters( - "SELECT * FROM \"categories\" " + - "WHERE \"ID\" BETWEEN :id_lo AND :id_hi", - new String[] { "id_lo", "id_hi" }, - new int[] { DataType.INTEGER, DataType.INTEGER }, - "BETWEEN" - ); - - impl_checkParameters( - "SELECT CONCAT( :prefix, CONCAT( \"Name\", :suffix ) ) FROM \"customers\"", - new String[] { "prefix", "suffix" }, - new int[] { DataType.VARCHAR, DataType.VARCHAR }, - "CONCAT" - ); - } -} diff --git a/dbaccess/qa/complex/dbaccess/PropertyBag.java b/dbaccess/qa/complex/dbaccess/PropertyBag.java deleted file mode 100644 index ffcbb3490..000000000 --- a/dbaccess/qa/complex/dbaccess/PropertyBag.java +++ /dev/null @@ -1,321 +0,0 @@ -/************************************************************************* - * - * 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 complex.dbaccess; - -// import complexlib.ComplexTestCase; - -import com.sun.star.beans.NamedValue; -import com.sun.star.beans.PropertyState; -import com.sun.star.beans.PropertyValue; -import com.sun.star.beans.PropertyAttribute; -import com.sun.star.beans.XPropertyAccess; -import com.sun.star.beans.XPropertySet; -import com.sun.star.beans.XPropertyContainer; -import com.sun.star.uno.UnoRuntime; -import com.sun.star.uno.XInterface; -import com.sun.star.lang.XMultiServiceFactory; - -// ---------- junit imports ----------------- -import org.junit.Before; -import org.junit.Test; -import static org.junit.Assert.*; -// ------------------------------------------ - -public class PropertyBag extends TestCase -{ - private static final String VALUE = "Value"; - private XPropertyContainer m_bag; - private XPropertySet m_set; - private XPropertyAccess m_access; - private XMultiServiceFactory m_orb = null; - - public String getTestObjectName() - { - return "PropertyBag"; - } - - @Before - @Override - public void before() - { - m_orb = getMSF(); - } - - @Test - public void checkBasics() - { - createEmptyBag(); - System.out.println("testing the basics"); - - // check whether empty property names are rejected - boolean caughtExpected = false; - try - { - m_bag.addProperty( "", PropertyAttribute.BOUND, Integer.valueOf( 3 ) ); - } - catch(com.sun.star.lang.IllegalArgumentException e) { caughtExpected = true; } - catch(com.sun.star.uno.Exception e) { } - if ( !caughtExpected ) - { - fail("empty property names are not rejected by XPropertyContainer::addProperty"); - } - - // check whether duplicate insertions are rejected - caughtExpected = false; - try - { - m_bag.addProperty( VALUE, PropertyAttribute.BOUND, "" ); - m_bag.addProperty( VALUE, PropertyAttribute.BOUND, "" ); - } - catch(com.sun.star.beans.PropertyExistException e) { caughtExpected = true; } - catch(com.sun.star.uno.Exception e) { } - if ( !caughtExpected ) - { - fail("insertion of duplicate property names is not rejected"); - } - - // try removing the property we just added - this should fail, as it does not have - // the REMOVEABLE attribute - caughtExpected = false; - try - { - m_bag.removeProperty( VALUE); - } - catch(com.sun.star.beans.NotRemoveableException e) { caughtExpected = true; } - catch(com.sun.star.uno.Exception e) { } - if ( !caughtExpected ) - { - fail("removing non-removeable properties is expected to fail - but it didn't"); - } - - // try removing a non-existent property - caughtExpected = false; - try - { - m_bag.removeProperty( "NonExistent" ); - } - catch(com.sun.star.beans.UnknownPropertyException e) { caughtExpected = true; } - catch(com.sun.star.uno.Exception e) { } - if ( !caughtExpected ) - { - fail("removing non-existent properties is expected to fail - but it didn't"); - } - - // try writing and reading a value for the one property we have so far - try - { - final String testValue = "someArbitraryValue"; - m_set.setPropertyValue( VALUE , testValue); - final String currentValue = (String)m_set.getPropertyValue( VALUE); - if ( !currentValue.equals( testValue ) ) - { - fail("set property is not remembered"); - } - } - catch(com.sun.star.uno.Exception e) - { - fail( "setting or getting a property value failed" ); - } - - // try setting an illegal value for the property - caughtExpected = false; - try - { - m_set.setPropertyValue( VALUE, Integer.valueOf( 3 ) ); - } - catch(com.sun.star.lang.IllegalArgumentException e) { caughtExpected = true; } - catch(com.sun.star.uno.Exception e) { } - if ( !caughtExpected ) - { - fail("the bag does not respect the property type we declared for the property"); - } - } - - @Test - public void checkSequenceAccess() throws com.sun.star.uno.Exception - { - System.out.println( "checking PropertySetAccess via sequences" ); - createStandardBag( false ); - - // --------------------------------- - // XPropertyAccess.setPropertyValues - final PropertyValue expectedValues[] = - { - new PropertyValue( "BoolValue", -1, Boolean.FALSE, PropertyState.DIRECT_VALUE ), - new PropertyValue( "StringValue", -1, "some text", PropertyState.DIRECT_VALUE ), - new PropertyValue( "IntegerValue", -1, Integer.valueOf( 3 ), PropertyState.DIRECT_VALUE ), - new PropertyValue( "InterfaceValue", -1, m_bag, PropertyState.DIRECT_VALUE ) - }; - m_access.setPropertyValues( expectedValues ); - - for ( int i=0; i<expectedValues.length; ++i ) - { - final Object value = m_set.getPropertyValue( expectedValues[i].Name ); - if ( !value.equals( expectedValues[i].Value ) ) - { - System.out.println( "property name : " + expectedValues[i].Name ); - System.out.println( "expected value: " + expectedValues[i].Value.toString() ); - System.out.println( "current value : " + value.toString() ); - fail( "retrieving a previously set property (" + expectedValues[i].Value.getClass().toString() + ") failed" ); - } - } - - // --------------------------------- - // XPropertyAccess.getPropertyValues - final PropertyValue currentValues[] = m_access.getPropertyValues(); - for ( int i=0; i<currentValues.length; ++i ) - { - final String name = currentValues[i].Name; - final Object value = currentValues[i].Value; - for ( int j=0; j<expectedValues.length; ++j ) - { - if ( expectedValues[j].Name.equals( name ) ) - { - if ( !expectedValues[j].Value.equals( value ) ) - { - System.out.println( "property name : " + expectedValues[j].Name ); - System.out.println( "expected value: " + expectedValues[j].Value.toString() ); - System.out.println( "current value : " + value.toString() ); - fail( "getPropertyValues failed for property '" + name + "' failed" ); - } - break; - } - } - - if ( !m_set.getPropertyValue( name ).equals( value ) ) - { - fail("XPropertyAccess::getPropertyValues() and XPropertyset::getPropertyValue results are inconsistent"); - } - } - } - - @Test - public void checkDynamicSet() throws com.sun.star.uno.Exception - { - System.out.println( "checking proper dynamic of the set" ); - createStandardBag( false ); - - final PropertyValue props[] = - { - new PropertyValue( "BoolValue", -1, Boolean.FALSE, PropertyState.DIRECT_VALUE), - new PropertyValue( "StringValue", -1, "test", PropertyState.DIRECT_VALUE ), - new PropertyValue( "SomeOtherStringValue", -1, "string value", PropertyState.DIRECT_VALUE ) - }; - - // try setting some property values which are not existent - boolean caughtExpected = false; - try - { - m_access.setPropertyValues( props ); - } - catch( com.sun.star.beans.UnknownPropertyException e ) { caughtExpected = true; } - catch( com.sun.star.uno.Exception e ) { } - if ( !caughtExpected ) - { - fail("the set shouldn't accept unknown property values, if not explicitly told to do so"); - } - - // re-create the bag, this time allow it to implicitly add properties - createStandardBag( true ); - boolean success = false; - try { m_access.setPropertyValues( props ); success = true; } - catch( com.sun.star.uno.Exception e ) { } - if ( !success ) - { - fail("property bag failed to implicitly add unknown properties"); - } - - // see whether this property was really added, and not just ignored - final PropertyValue newlyAdded = props[ props.length - 1 ]; - try - { - if ( !m_set.getPropertyValue( newlyAdded.Name ).equals( newlyAdded.Value ) ) - { - fail("the new property was not really added, or not added with the proper value"); - } - } - catch( com.sun.star.uno.Exception e ) { } - } - - private void createEmptyBag() - { - try - { - m_bag = null; - final String serviceName = "com.sun.star.beans.PropertyBag"; - m_bag = UnoRuntime.queryInterface(XPropertyContainer.class, m_orb.createInstance(serviceName)); - if ( m_bag == null ) - { - fail("could not create a " + serviceName + " instance"); - } - m_set = UnoRuntime.queryInterface(XPropertySet.class, m_bag); - m_access = UnoRuntime.queryInterface(XPropertyAccess.class, m_bag); - } - catch( com.sun.star.uno.Exception e ) - { - } - } - - private void createStandardBag( boolean allowLazyAdding ) - { - try - { - m_bag = null; - - final Object initArgs[] = { new NamedValue( "AutomaticAddition", Boolean.valueOf( allowLazyAdding ) ) }; - - final String serviceName = "com.sun.star.beans.PropertyBag"; - m_bag = UnoRuntime.queryInterface(XPropertyContainer.class, m_orb.createInstanceWithArguments(serviceName, initArgs)); - if ( m_bag == null ) - { - fail("could not create a " + serviceName + " instance"); - } - m_set = UnoRuntime.queryInterface(XPropertySet.class, m_bag); - m_access = UnoRuntime.queryInterface(XPropertyAccess.class, m_bag); - - final Object properties[][] = - { - { "BoolValue", Boolean.TRUE }, - { "StringValue", "" }, - { "IntegerValue", Integer.valueOf( 3 ) }, - { "InterfaceValue", (XInterface)m_bag } - }; - for ( int i=0; i<properties.length; ++i ) - { - m_bag.addProperty( - (String)properties[i][0], - PropertyAttribute.MAYBEVOID, - properties[i][1] - ); - } - } - catch( com.sun.star.uno.Exception e ) - { - } - } -} diff --git a/dbaccess/qa/complex/dbaccess/Query.java b/dbaccess/qa/complex/dbaccess/Query.java deleted file mode 100644 index d89cfcf07..000000000 --- a/dbaccess/qa/complex/dbaccess/Query.java +++ /dev/null @@ -1,121 +0,0 @@ -/************************************************************************* - * - * 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 complex.dbaccess; - -import com.sun.star.beans.XPropertySet; -import com.sun.star.container.XIndexAccess; -import com.sun.star.container.XNameAccess; -import com.sun.star.container.XNamed; -import com.sun.star.sdb.XQueriesSupplier; -import com.sun.star.sdbcx.XColumnsSupplier; -import com.sun.star.uno.UnoRuntime; -import connectivity.tools.CRMDatabase; - -// ---------- junit imports ----------------- -import org.junit.Test; -import static org.junit.Assert.*; -// ------------------------------------------ - -public class Query extends TestCase -{ - - connectivity.tools.HsqlDatabase m_database; - - // -------------------------------------------------------------------------------------------------------- - private void createTestCase() - { - try - { - if (m_database == null) - { - final CRMDatabase database = new CRMDatabase(getMSF(), false); - m_database = database.getDatabase(); - } - } - catch (Exception e) - { - System.out.println("could not create the test case, error message:\n" + e.getMessage()); - e.printStackTrace(System.err); - fail("failed to created the test case"); - } - } - - // -------------------------------------------------------------------------------------------------------- -// private XMultiServiceFactory getFactory() -// { -// return (XMultiServiceFactory)param.getMSF(); -// } - // -------------------------------------------------------------------------------------------------------- - @Test - public void testQueryColumns() - { - createTestCase(); - - try - { - final XQueriesSupplier suppQueries = UnoRuntime.queryInterface( - XQueriesSupplier.class, m_database.defaultConnection().getXConnection() ); - final XNameAccess queries = suppQueries.getQueries(); - - final String[] queryNames = new String[] { "parseable", "parseable native", "unparseable" }; - final String[][] expectedColumnNames = new String[][] { - new String[] { "ID", "Name", "Address", "City", "Postal","Comment" }, - new String[] { "TABLE_CATALOG", "TABLE_SCHEMA", "TABLE_NAME", "VIEW_DEFINITION", "CHECK_OPTION", "IS_UPDATABLE", "VALID" }, - new String[] { "ID_VARCHAR" } - }; - - for ( int i = 0; i < queryNames.length; ++i ) - { - if (queries.hasByName(queryNames[i])) - { - final XPropertySet query = UnoRuntime.queryInterface( - XPropertySet.class, queries.getByName( queryNames[i] ) ); - - final XColumnsSupplier suppCols = UnoRuntime.queryInterface( - XColumnsSupplier.class, query); - final XIndexAccess columns = UnoRuntime.queryInterface( - XIndexAccess.class, suppCols.getColumns()); - - // check whether the columns supplied by the query match what we expected - assertTrue( "invalid column count (found " + columns.getCount() + ", expected: " + expectedColumnNames[i].length + ") for query \"" + queryNames[i] + "\"", - columns.getCount() == expectedColumnNames[i].length ); - for ( int col = 0; col < columns.getCount(); ++col ) - { - final XNamed columnName = UnoRuntime.queryInterface( - XNamed.class, columns.getByIndex(col) ); - assertTrue( "column no. " + col + " of query \"" + queryNames[i] + "\" not matching", - columnName.getName().equals( expectedColumnNames[i][col] ) ); - } - } - } - } - catch ( Exception e ) - { - fail( "caught an unexpected exception: " + e.getMessage() ); - } - } -} diff --git a/dbaccess/qa/complex/dbaccess/QueryInQuery.java b/dbaccess/qa/complex/dbaccess/QueryInQuery.java deleted file mode 100644 index 3a06313c4..000000000 --- a/dbaccess/qa/complex/dbaccess/QueryInQuery.java +++ /dev/null @@ -1,186 +0,0 @@ -/************************************************************************* - * - * 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 complex.dbaccess; - -import com.sun.star.container.ElementExistException; -import com.sun.star.lang.IllegalArgumentException; -import com.sun.star.lang.WrappedTargetException; -import com.sun.star.sdb.CommandType; -import com.sun.star.sdbc.SQLException; -import connectivity.tools.HsqlColumnDescriptor; -import connectivity.tools.HsqlTableDescriptor; -import connectivity.tools.RowSet; -import com.sun.star.sdbc.XStatement; -import com.sun.star.sdbc.XResultSet; - -// ---------- junit imports ----------------- -import org.junit.Test; -import static org.junit.Assert.*; -// ------------------------------------------ - -public class QueryInQuery extends CRMBasedTestCase -{ - private static final String QUERY_PRODUCTS = "query products"; - - // -------------------------------------------------------------------------------------------------------- - @Override - protected void createTestCase() - { - try - { - super.createTestCase(); - m_database.getDatabase().getDataSource().createQuery( QUERY_PRODUCTS,"SELECT * FROM \"products\""); - } - catch ( Exception e ) - { - e.printStackTrace( System.err ); - fail( "caught an exception (" + e.getMessage() + ") while creating the test case" ); - } - } - - // -------------------------------------------------------------------------------------------------------- - private void verifyEqualRowSetContent( int _outerCommandType, String _outerCommand, int _innerCommandType, String _innerCommand ) throws SQLException - { - final RowSet outerRowSet = m_database.getDatabase().createRowSet( _outerCommandType, _outerCommand ); - outerRowSet.execute(); - - final RowSet innerRowSet = m_database.getDatabase().createRowSet( _innerCommandType, _innerCommand ); - innerRowSet.execute(); - - outerRowSet.last(); - innerRowSet.last(); - assertTrue( "wrong record counts", outerRowSet.getRow() == innerRowSet.getRow() ); - - outerRowSet.beforeFirst(); - innerRowSet.beforeFirst(); - assertTrue( "wrong column counts", outerRowSet.getColumnCount() == innerRowSet.getColumnCount() ); - - while ( outerRowSet.next() && innerRowSet.next() ) - { - for ( int i=1; i <= outerRowSet.getColumnCount(); ++i ) - { - assertTrue( "content of column " + i + " of row " + outerRowSet.getRow() + " not identical", - innerRowSet.getString(i).equals( outerRowSet.getString(i) ) ); - } - } - } - - // -------------------------------------------------------------------------------------------------------- - /** executes a SQL statement simply selecting all columns from a query - */ - @Test - public void executeSimpleSelect() throws SQLException - { - verifyEqualRowSetContent( - CommandType.COMMAND, "SELECT * FROM \"query products\"", - CommandType.QUERY,QUERY_PRODUCTS); - } - - // -------------------------------------------------------------------------------------------------------- - /** verifies that aliases for inner queries work as expected - */ - @Test - public void executeAliasedSelect() throws SQLException - { - verifyEqualRowSetContent( - CommandType.COMMAND, "SELECT \"PROD\".\"ID\" FROM \"query products\" AS \"PROD\"", - CommandType.COMMAND, "SELECT \"ID\" FROM \"products\"" ); - verifyEqualRowSetContent( - CommandType.COMMAND, "SELECT \"PROD\".* FROM \"query products\" AS \"PROD\"", - CommandType.QUERY,QUERY_PRODUCTS); - } - - // -------------------------------------------------------------------------------------------------------- - /** verifies that aliases for inner queries work as expected - */ - @Test - public void checkNameCollisions() - { - // create a query with a name which is used by a table - boolean caughtExpected = false; - try - { - m_database.getDatabase().getDataSource().createQuery( "products", "SELECT * FROM \"products\"" ); - } - catch ( WrappedTargetException e ) { caughtExpected = true; } - catch ( IllegalArgumentException e ) {} - catch ( ElementExistException e ) { caughtExpected = true; } - assertTrue( "creating queries with the name of an existing table should not be possible", - caughtExpected ); - - // create a table with a name which is used by a query - final HsqlTableDescriptor table = new HsqlTableDescriptor( QUERY_PRODUCTS, - new HsqlColumnDescriptor[] { - new HsqlColumnDescriptor( "ID", "INTEGER" ), - new HsqlColumnDescriptor( "Name", "VARCHAR(50)" ) } ); - - caughtExpected = false; - try - { - m_database.getDatabase().createTableInSDBCX( table ); - } - catch ( SQLException e ) { caughtExpected = true; } - catch ( ElementExistException ex ) { } - assertTrue( "creating tables with the name of an existing query should not be possible", - caughtExpected ); - } - - // -------------------------------------------------------------------------------------------------------- - @Test - public void checkCyclicReferences() throws ElementExistException, WrappedTargetException, IllegalArgumentException - { - // some queries which create a cycle in the sub query tree - m_database.getDatabase().getDataSource().createQuery( "orders level 1", "SELECT * FROM \"orders level 0\"" ); - m_database.getDatabase().getDataSource().createQuery( "orders level 2", "SELECT * FROM \"orders level 1\"" ); - m_database.getDatabase().getDataSource().createQuery( "orders level 3", "SELECT * FROM \"orders level 2\"" ); - m_database.getDatabase().getDataSource().createQuery( "orders level 0", "SELECT * FROM \"orders level 3\"" ); - - final RowSet rowSet = m_database.getDatabase().createRowSet( CommandType.QUERY, "orders level 0" ); - - boolean caughtExpected = false; - try { rowSet.execute(); } - catch ( SQLException e ) { caughtExpected = ( e.ErrorCode == -com.sun.star.sdb.ErrorCondition.PARSER_CYCLIC_SUB_QUERIES ); } - - assertTrue( "executing a query with cyclic nested sub queries should fail!", caughtExpected ); - } - - // -------------------------------------------------------------------------------------------------------- - @Test - public void checkStatementQiQSupport() - { - try - { - final XStatement statement = m_database.getConnection().createStatement(); - final XResultSet resultSet = statement.executeQuery( "SELECT * FROM \"query products\"" ); - assertTrue( "Result Set is null", resultSet != null ); - } - catch( SQLException e ) - { - fail( "SDB level statements do not allow for queries in queries" ); - } - } -} diff --git a/dbaccess/qa/complex/dbaccess/RowSet.java b/dbaccess/qa/complex/dbaccess/RowSet.java deleted file mode 100644 index 742ce59c8..000000000 --- a/dbaccess/qa/complex/dbaccess/RowSet.java +++ /dev/null @@ -1,1007 +0,0 @@ -/************************************************************************* - * - * 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 complex.dbaccess; - -import com.sun.star.beans.PropertyVetoException; -import com.sun.star.beans.UnknownPropertyException; -import com.sun.star.beans.XPropertySet; -import com.sun.star.container.XIndexAccess; -import com.sun.star.lang.WrappedTargetException; -import com.sun.star.lang.XComponent; -import com.sun.star.sdb.CommandType; -import com.sun.star.sdb.XParametersSupplier; -import com.sun.star.sdb.XResultSetAccess; -import com.sun.star.sdb.XRowSetApproveBroadcaster; -import com.sun.star.sdbc.SQLException; -import com.sun.star.sdbc.XParameters; -import com.sun.star.sdbc.XPreparedStatement; -import com.sun.star.sdbc.XResultSet; -import com.sun.star.sdbc.XResultSetUpdate; -import com.sun.star.sdbc.XRow; -import com.sun.star.sdbc.XRowSet; -import com.sun.star.sdbc.XRowUpdate; -import com.sun.star.sdbcx.XColumnsSupplier; -import com.sun.star.sdbcx.XDeleteRows; -import com.sun.star.sdbcx.XRowLocate; -import com.sun.star.uno.UnoRuntime; - -import connectivity.tools.CRMDatabase; -import connectivity.tools.DataSource; -import connectivity.tools.HsqlDatabase; -import connectivity.tools.sdb.Connection; -import java.lang.reflect.Method; -import java.util.Random; - -// ---------- junit imports ----------------- -import org.junit.Test; -import static org.junit.Assert.*; -// ------------------------------------------ - -public class RowSet extends TestCase -{ - - static final int MAX_TABLE_ROWS = 100; - static final int MAX_FETCH_ROWS = 10; - private static final String NEXT = "next"; - private static final String TEST21 = "Test21"; - HsqlDatabase m_database; - DataSource m_dataSource; - XRowSet m_rowSet; - XResultSet m_resultSet; - XResultSetUpdate m_resultSetUpdate; - XRow m_row; - XRowLocate m_rowLocate; - XPropertySet m_rowSetProperties; - XParametersSupplier m_paramsSupplier; - - // -------------------------------------------------------------------------------------------------------- - class ResultSetMovementStress implements Runnable - { - - XResultSet m_resultSet; - XRow m_row; - int m_id; - - ResultSetMovementStress(XResultSet _resultSet, int _id) throws java.lang.Exception - { - m_resultSet = _resultSet; - m_row = UnoRuntime.queryInterface( XRow.class, m_resultSet ); - m_id = _id; - } - - public void run() - { - try - { - m_resultSet.beforeFirst(); - for (int i = 0; m_resultSet.next(); ++i) - { - int pos = m_resultSet.getRow(); - testPosition(m_resultSet, m_row, i + 1, "clone move(" + m_id + ")"); - int pos2 = m_resultSet.getRow(); - assertTrue("ResultSetMovementStress wrong position: " + i + " Pos1: " + pos + " Pos2: " + pos2, pos == pos2); - } - } - catch (Exception e) - { - fail("ResultSetMovementStress(" + m_id + ") failed: " + e); - } - } - } - // -------------------------------------------------------------------------------------------------------- - private void createTestCase(boolean _defaultRowSet) - { - if (m_database == null) - { - try - { - final CRMDatabase database = new CRMDatabase( getMSF(), false ); - m_database = database.getDatabase(); - m_dataSource = m_database.getDataSource(); - } - catch (Exception e) - { - fail("could not create the embedded HSQL database: " + e.getMessage()); - } - } - - try - { - createStruture(); - } - catch (SQLException e) - { - fail("could not connect to the database/table structure, error message:\n" + e.getMessage()); - } - - if (_defaultRowSet) - { - createRowSet("TEST1", CommandType.TABLE, true, true); - } - } - - // -------------------------------------------------------------------------------------------------------- - /** creates a com.sun.star.sdb.RowSet to use during the test - * @param command - * the command to use for the RowSet - * @param commandType - * the command type to use for the RowSet - * @param execute - * determines whether the RowSet should be executed - */ - private void createRowSet(String command, int commandType, boolean execute) - { - createRowSet(command, commandType, execute, false); - } - - // -------------------------------------------------------------------------------------------------------- - /** creates a com.sun.star.sdb.RowSet to use during the test - * @param command - * the command to use for the RowSet - * @param commandType - * the command type to use for the RowSet - * @param limitFetchSize - * determines whether the fetch size of the RowSet should be limited to MAX_FETCH_ROWS - * @param execute - * determines whether the RowSet should be executed - */ - private void createRowSet(String command, int commandType, boolean execute, boolean limitFetchSize) - { - try - { - m_rowSet = UnoRuntime.queryInterface( XRowSet.class, getMSF().createInstance( "com.sun.star.sdb.RowSet" ) ); - final XPropertySet rowSetProperties = UnoRuntime.queryInterface( XPropertySet.class, m_rowSet ); - rowSetProperties.setPropertyValue("Command", command); - rowSetProperties.setPropertyValue("CommandType", Integer.valueOf(commandType)); - rowSetProperties.setPropertyValue("ActiveConnection", m_database.defaultConnection().getXConnection()); - if (limitFetchSize) - { - rowSetProperties.setPropertyValue("FetchSize", Integer.valueOf(MAX_FETCH_ROWS)); - } - - m_resultSet = UnoRuntime.queryInterface( XResultSet.class, m_rowSet ); - m_resultSetUpdate = UnoRuntime.queryInterface( XResultSetUpdate.class, m_rowSet ); - m_row = UnoRuntime.queryInterface( XRow.class, m_rowSet ); - m_rowLocate = UnoRuntime.queryInterface( XRowLocate.class, m_resultSet ); - m_rowSetProperties = UnoRuntime.queryInterface( XPropertySet.class, m_rowSet ); - m_paramsSupplier = UnoRuntime.queryInterface( XParametersSupplier.class, m_rowSet ); - - if (execute) - { - m_rowSet.execute(); - } - } - catch (Exception e) - { - fail("caught an exception while creating the RowSet. Type:\n" + e.getClass().toString() + "\nMessage:\n" + e.getMessage()); - } - } - - // -------------------------------------------------------------------------------------------------------- - @Test - public void testRowSet() throws java.lang.Exception - { - - System.out.println("testing testRowSet"); - createTestCase(true); - - // sequential postioning - m_resultSet.beforeFirst(); - testSequentialPositining(m_resultSet, m_row); - - // absolute positioning - testAbsolutePositioning(m_resultSet, m_row); - - // 3rd test - test3(createClone(), m_resultSet); - // 4th test - test4(m_resultSet); - - // concurrent (multi threaded) access to the row set and its clones - testConcurrentAccess(m_resultSet); - } - - // -------------------------------------------------------------------------------------------------------- - XResultSet createClone() throws SQLException - { - final XResultSetAccess rowAcc = UnoRuntime.queryInterface( XResultSetAccess.class, m_rowSet ); - return rowAcc.createResultSet(); - } - - // -------------------------------------------------------------------------------------------------------- - void createStruture() throws SQLException - { - m_database.executeSQL("DROP TABLE \"TEST1\" IF EXISTS"); - m_database.executeSQL("CREATE TABLE \"TEST1\" (\"ID\" integer not null primary key, \"col2\" varchar(50) )"); - - final Connection connection = m_database.defaultConnection(); - final XPreparedStatement prep = connection.prepareStatement("INSERT INTO \"TEST1\" values (?,?)"); - final XParameters para = UnoRuntime.queryInterface( XParameters.class, prep ); - for (int i = 1; i <= MAX_TABLE_ROWS; ++i) - { - para.setInt(1, i); - para.setString(2, "Test" + i); - prep.executeUpdate(); - } - - connection.refreshTables(); - } - - // -------------------------------------------------------------------------------------------------------- - void testPosition(XResultSet m_resultSet, XRow m_row, int expectedValue, String location) throws SQLException - { - final int val = m_row.getInt(1); - final int pos = m_resultSet.getRow(); - assertTrue(location + ": value/position do not match: " + pos + " (pos) != " + val + " (val)", val == pos); - assertTrue(location + ": value/position are not as expected: " + val + " (val) != " + expectedValue + " (expected)", val == expectedValue); - } - - // -------------------------------------------------------------------------------------------------------- - void testSequentialPositining(XResultSet _resultSet, XRow _row) - { - try - { - // 1st test - int i = 1; - while (_resultSet.next()) - { - testPosition(_resultSet, _row, i, "testSequentialPositining"); - ++i; - } - } - catch (Exception e) - { - fail("testSequentialPositining failed: " + e); - } - } - - // -------------------------------------------------------------------------------------------------------- - void testAbsolutePositioning(XResultSet _resultSet, XRow _row) - { - try - { - for (int i = 1; i <= MAX_FETCH_ROWS; ++i) - { - final int calcPos = (MAX_TABLE_ROWS % i) + 1; - assertTrue("testAbsolutePositioning failed", _resultSet.absolute(calcPos)); - testPosition(_resultSet, _row, calcPos, "testAbsolutePositioning"); - } - } - catch (Exception e) - { - fail("testAbsolutePositioning failed: " + e); - } - } - - // -------------------------------------------------------------------------------------------------------- - void test3(XResultSet clone, XResultSet _resultSet) - { - try - { - final XRow _row = UnoRuntime.queryInterface( XRow.class, _resultSet ); - final XRow cloneRow = UnoRuntime.queryInterface( XRow.class, clone ); - for (int i = 1; i <= MAX_FETCH_ROWS; ++i) - { - final int calcPos = (MAX_TABLE_ROWS % i) + 1; - if (clone.absolute(calcPos)) - { - testPosition(clone, cloneRow, calcPos, "test3"); - testAbsolutePositioning(_resultSet, _row); - testAbsolutePositioning(clone, cloneRow); - } - } - } - catch (Exception e) - { - fail("test3 failed: " + e); - } - } - - // -------------------------------------------------------------------------------------------------------- - void test4(XResultSet _resultSet) - { - try - { - final XRow _row = UnoRuntime.queryInterface( XRow.class, _resultSet ); - _resultSet.beforeFirst(); - - for (int i = 1; i <= MAX_TABLE_ROWS; ++i) - { - _resultSet.next(); - final XResultSet clone = createClone(); - final XRow cloneRow = UnoRuntime.queryInterface( XRow.class, clone ); - final int calcPos = MAX_TABLE_ROWS - 1; - if (calcPos != 0 && clone.absolute(calcPos)) - { - testPosition(clone, cloneRow, calcPos, "test4: clone"); - testPosition(_resultSet, _row, i, "test4: rowset"); - } - } - } - catch (Exception e) - { - fail("test4 failed: " + e); - } - } - - // -------------------------------------------------------------------------------------------------------- - void testConcurrentAccess(XResultSet _resultSet) - { - System.out.println("testing Thread"); - try - { - _resultSet.beforeFirst(); - - final int numberOfThreads = 10; - - final Thread threads[] = new Thread[numberOfThreads]; - for (int i = 0; i < numberOfThreads; ++i) - { - threads[i] = new Thread(new ResultSetMovementStress(createClone(), i)); - System.out.println("starting thread " + (i + 1) + " of " + (numberOfThreads)); - threads[i].start(); - } - - for (int i = 0; i < numberOfThreads; ++i) - { - threads[i].join(); - } - } - catch (Exception e) - { - fail("testConcurrentAccess failed: " + e); - } - } - // -------------------------------------------------------------------------------------------------------- - - @Test - public void testRowSetEvents() throws java.lang.Exception - { - System.out.println("testing RowSet Events"); - createTestCase(true); - - // first we create our RowSet object - final RowSetEventListener pRow = new RowSetEventListener(); - - final XColumnsSupplier colSup = UnoRuntime.queryInterface( XColumnsSupplier.class, m_rowSet ); - final XPropertySet col = UnoRuntime.queryInterface( XPropertySet.class, colSup.getColumns().getByName( "ID" ) ); - col.addPropertyChangeListener("Value", pRow); - m_rowSetProperties.addPropertyChangeListener("IsModified", pRow); - m_rowSetProperties.addPropertyChangeListener("IsNew", pRow); - m_rowSetProperties.addPropertyChangeListener("IsRowCountFinal", pRow); - m_rowSetProperties.addPropertyChangeListener("RowCount", pRow); - - final XRowSetApproveBroadcaster xApBroad = UnoRuntime.queryInterface( XRowSetApproveBroadcaster.class, m_resultSet ); - xApBroad.addRowSetApproveListener(pRow); - m_rowSet.addRowSetListener(pRow); - - // do some movements to check if we got all notifications - final Class cResSet = Class.forName("com.sun.star.sdbc.XResultSet"); - final boolean moves[] = new boolean[9]; - for (int i = 0; i < moves.length; ++i) - { - moves[i] = false; - } - moves[RowSetEventListener.APPROVE_CURSOR_MOVE] = true; - moves[RowSetEventListener.COLUMN_VALUE] = true; - moves[RowSetEventListener.CURSOR_MOVED] = true; - moves[RowSetEventListener.IS_ROW_COUNT_FINAL] = true; - moves[RowSetEventListener.ROW_COUNT] = true; - - testCursorMove(m_resultSet, cResSet.getMethod("afterLast", (Class[]) null), pRow, moves, null); - - moves[RowSetEventListener.IS_ROW_COUNT_FINAL] = false; - moves[RowSetEventListener.ROW_COUNT] = false; - testCursorMove(m_resultSet, cResSet.getMethod(NEXT, (Class[]) null), pRow, moves, null); - testCursorMove(m_resultSet, cResSet.getMethod(NEXT, (Class[]) null), pRow, moves, null); - testCursorMove(m_resultSet, cResSet.getMethod(NEXT, (Class[]) null), pRow, moves, null); - testCursorMove(m_resultSet, cResSet.getMethod("last", (Class[]) null), pRow, moves, null); - testCursorMove(m_resultSet, cResSet.getMethod(NEXT, (Class[]) null), pRow, moves, null); - testCursorMove(m_resultSet, cResSet.getMethod("first", (Class[]) null), pRow, moves, null); - testCursorMove(m_resultSet, cResSet.getMethod("previous", (Class[]) null), pRow, moves, null); - testCursorMove(m_resultSet, cResSet.getMethod(NEXT, (Class[]) null), pRow, moves, null); - moves[RowSetEventListener.IS_MODIFIED] = true; - final XRowUpdate updRow = UnoRuntime.queryInterface( XRowUpdate.class, m_resultSet ); - updRow.updateString(2, TEST21); - testCursorMove(m_resultSet, cResSet.getMethod(NEXT, (Class[]) null), pRow, moves, null); - - moves[RowSetEventListener.IS_MODIFIED] = false; - updRow.updateString(2, m_row.getString(2)); - testCursorMove(m_resultSet, cResSet.getMethod(NEXT, (Class[]) null), pRow, moves, null); - - moves[RowSetEventListener.IS_MODIFIED] = false; - final Class cupd = Class.forName("com.sun.star.sdbc.XResultSetUpdate"); - final XResultSetUpdate upd = UnoRuntime.queryInterface( XResultSetUpdate.class, m_resultSet ); - testCursorMove(upd, cupd.getMethod("moveToInsertRow", (Class[]) null), pRow, moves, null); - - updRow.updateInt(1, MAX_TABLE_ROWS + 2); - updRow.updateString(2, "HHHH"); - moves[RowSetEventListener.APPROVE_CURSOR_MOVE] = false; - moves[RowSetEventListener.CURSOR_MOVED] = false; - moves[RowSetEventListener.IS_MODIFIED] = true; - moves[RowSetEventListener.IS_NEW] = true; - moves[RowSetEventListener.ROW_COUNT] = true; - moves[RowSetEventListener.APPROVE_ROW_CHANGE] = true; - moves[RowSetEventListener.ROW_CHANGED] = true; - testCursorMove(upd, cupd.getMethod("insertRow", (Class[]) null), pRow, moves, null); - - moves[RowSetEventListener.IS_NEW] = false; - moves[RowSetEventListener.ROW_COUNT] = false; - m_resultSet.first(); - updRow.updateInt(1, MAX_TABLE_ROWS + 3); - updRow.updateString(2, "__"); - testCursorMove(upd, cupd.getMethod("updateRow", (Class[]) null), pRow, moves, null); - - moves[RowSetEventListener.IS_NEW] = true; - moves[RowSetEventListener.ROW_COUNT] = true; - m_resultSet.first(); - testCursorMove(upd, cupd.getMethod("deleteRow", (Class[]) null), pRow, moves, null); - - moves[RowSetEventListener.IS_NEW] = false; - moves[RowSetEventListener.COLUMN_VALUE] = true; - moves[RowSetEventListener.ROW_COUNT] = false; - m_resultSet.first(); - updRow.updateString(2, TEST21); - testCursorMove(m_resultSet, cResSet.getMethod("refreshRow", (Class[]) null), pRow, moves, null); - - m_resultSet.first(); - updRow.updateString(2, TEST21); - testCursorMove(upd, cupd.getMethod("cancelRowUpdates", (Class[]) null), pRow, moves, null); - - for (int i = 0; i < moves.length; ++i) - { - moves[i] = false; - } - moves[RowSetEventListener.APPROVE_CURSOR_MOVE] = true; - moves[RowSetEventListener.COLUMN_VALUE] = true; - moves[RowSetEventListener.CURSOR_MOVED] = true; - - final Class cloc = Class.forName("com.sun.star.sdbcx.XRowLocate"); - m_resultSet.first(); - final Object bookmark = m_rowLocate.getBookmark(); - m_resultSet.next(); - final Object temp[] = new Object[1]; - temp[0] = bookmark; - Class ctemp[] = new Class[1]; - ctemp[0] = Object.class; - testCursorMove(m_rowLocate, cloc.getMethod("moveToBookmark", ctemp), pRow, moves, temp); - - final Object temp2[] = new Object[2]; - temp2[0] = bookmark; - temp2[1] = Integer.valueOf(1); - final Class ctemp2[] = new Class[2]; - ctemp2[0] = Object.class; - ctemp2[1] = int.class; - testCursorMove(m_rowLocate, cloc.getMethod("moveRelativeToBookmark", ctemp2), pRow, moves, temp2); - - for (int i = 0; i < moves.length; ++i) - { - moves[i] = false; - } - moves[RowSetEventListener.APPROVE_ROW_CHANGE] = true; - moves[RowSetEventListener.ROW_CHANGED] = true; - moves[RowSetEventListener.ROW_COUNT] = true; - final Class cdelRows = Class.forName("com.sun.star.sdbcx.XDeleteRows"); - ctemp[0] = Object[].class; - final XDeleteRows delRows = UnoRuntime.queryInterface( XDeleteRows.class, m_resultSet ); - final Object bookmarks[] = new Object[5]; - m_resultSet.first(); - for (int i = 0; i < bookmarks.length; ++i) - { - m_resultSet.next(); - bookmarks[i] = m_rowLocate.getBookmark(); - } - - temp[0] = bookmarks; - testCursorMove(delRows, cdelRows.getMethod("deleteRows", ctemp), pRow, moves, temp); - - // now destroy the RowSet - final XComponent xComp = UnoRuntime.queryInterface( XComponent.class, m_resultSet ); - xComp.dispose(); - } - - // -------------------------------------------------------------------------------------------------------- - private void testCursorMove(Object res, Method _method, RowSetEventListener _evt, boolean _must[], Object args[]) throws java.lang.Exception - { - _evt.clearCalling(); - _method.invoke(res, args); - - System.out.println("testing events for " + _method.getName()); - final int calling[] = _evt.getCalling(); - int pos = 1; - assertTrue("Callings are not in the correct order for APPROVE_CURSOR_MOVE ", - (!_must[RowSetEventListener.APPROVE_CURSOR_MOVE] || calling[RowSetEventListener.APPROVE_CURSOR_MOVE] == -1) || calling[RowSetEventListener.APPROVE_CURSOR_MOVE] == pos++); - assertTrue("Callings are not in the correct order for APPROVE_ROW_CHANGE", - (!_must[RowSetEventListener.APPROVE_ROW_CHANGE] || calling[RowSetEventListener.APPROVE_ROW_CHANGE] == -1) || calling[RowSetEventListener.APPROVE_ROW_CHANGE] == pos++); - assertTrue("Callings are not in the correct order for COLUMN_VALUE", - (!_must[RowSetEventListener.COLUMN_VALUE] || calling[RowSetEventListener.COLUMN_VALUE] == -1) || calling[RowSetEventListener.COLUMN_VALUE] == pos++); - assertTrue("Callings are not in the correct order for CURSOR_MOVED", - (!_must[RowSetEventListener.CURSOR_MOVED] || calling[RowSetEventListener.CURSOR_MOVED] == -1) || calling[RowSetEventListener.CURSOR_MOVED] == pos++); - assertTrue("Callings are not in the correct order for ROW_CHANGED", - (!_must[RowSetEventListener.ROW_CHANGED] || calling[RowSetEventListener.ROW_CHANGED] == -1) || calling[RowSetEventListener.ROW_CHANGED] == pos++); - assertTrue("Callings are not in the correct order for IS_MODIFIED", - (!_must[RowSetEventListener.IS_MODIFIED] || calling[RowSetEventListener.IS_MODIFIED] == -1) || calling[RowSetEventListener.IS_MODIFIED] == pos++); - assertTrue("Callings are not in the correct order for IS_NEW", - (!_must[RowSetEventListener.IS_NEW] || calling[RowSetEventListener.IS_NEW] == -1) || calling[RowSetEventListener.IS_NEW] == pos++); - assertTrue("Callings are not in the correct order for ROW_COUNT", - (!_must[RowSetEventListener.ROW_COUNT] || calling[RowSetEventListener.ROW_COUNT] == -1) || calling[RowSetEventListener.ROW_COUNT] == pos++); - assertTrue("Callings are not in the correct order for IS_ROW_COUNT_FINAL", - (!_must[RowSetEventListener.IS_ROW_COUNT_FINAL] || calling[RowSetEventListener.IS_ROW_COUNT_FINAL] == -1) || calling[RowSetEventListener.IS_ROW_COUNT_FINAL] == pos); - - _evt.clearCalling(); - } - - // -------------------------------------------------------------------------------------------------------- - /** returns the current row count of the RowSet - */ - private int currentRowCount() throws UnknownPropertyException, WrappedTargetException - { - final Integer rowCount = (Integer) m_rowSetProperties.getPropertyValue("RowCount"); - return rowCount.intValue(); - } - - // -------------------------------------------------------------------------------------------------------- - /** positions the row set at an arbitrary position between 2 and (current row count - 1) - */ - private int positionRandom() throws SQLException, UnknownPropertyException, WrappedTargetException - { - final int position = (new Random()).nextInt(currentRowCount() - 2) + 2; - assertTrue("sub task failed: could not position to row no. " + (Integer.valueOf(position)).toString(), - m_resultSet.absolute(position)); - return m_resultSet.getRow(); - } - - // -------------------------------------------------------------------------------------------------------- - /** moves the result set to a random record between 2 and (current row count - 1), and deletes this record - * - * After returning from this method, the row set is still positioned at the deleted record - * @return - * the number/position of the record which has been deleted - */ - private int deleteRandom() throws SQLException, UnknownPropertyException, WrappedTargetException - { - // check if the current position and the row count in the result set is changed by a deletion (it should not) - final int positionBefore = positionRandom(); - final int rowCountBefore = currentRowCount(); - - m_resultSetUpdate.deleteRow(); - - final int positionAfter = m_resultSet.getRow(); - final int rowCountAfter = currentRowCount(); - assertTrue("position changed during |deleteRow| (it should not)", positionAfter == positionBefore); - assertTrue("row count changed with a |deleteRow| (it should not)", rowCountBefore == rowCountAfter); - assertTrue("RowSet does not report the current row as deleted after |deleteRow|", m_resultSet.rowDeleted()); - - return positionBefore; - } - - // -------------------------------------------------------------------------------------------------------- - @Test - public void testDeleteBehavior() throws Exception - { - createTestCase(true); - - // ensure that all records are known - m_resultSet.last(); - final int initialRowCount = currentRowCount(); - - // delete a random row - int deletedRow = deleteRandom(); - - // ..................................................................................................... - // asking for the bookmark of a deleted row should fail - boolean caughtException = false; - try - { - m_rowLocate.getBookmark(); - } - catch (SQLException e) - { - caughtException = true; - } - assertTrue("asking for the bookmark of a deleted row should throw an exception", caughtException); - - // ..................................................................................................... - // isXXX methods should return |false| on a deleted row - assertTrue("one of the isFoo failed after |deleteRow|", !m_resultSet.isBeforeFirst() && !m_resultSet.isAfterLast() && !m_resultSet.isFirst() && !m_resultSet.isLast()); - // note that we can assume that isFirst / isLast also return |false|, since deleteRandom did - // not position on the first or last record, but inbetween - - // ..................................................................................................... - // check if moving away from this row in either direction yields the expected results - assertTrue("|previous| after |deleteRow| failed", m_resultSet.previous()); - final int positionPrevious = m_resultSet.getRow(); - assertTrue("position after |previous| after |deleteRow| is not as expected", positionPrevious == deletedRow - 1); - - deletedRow = deleteRandom(); - assertTrue("|next| after |deleteRow| failed", m_resultSet.next()); - final int positionAfter = m_resultSet.getRow(); - assertTrue("position after |next| after |deleteRow| is not as expected", positionAfter == deletedRow); - // since the deleted record "vanishs" as soon as the cursor is moved away from it, the absolute position does - // not change with a |next| call here - - // ..................................................................................................... - // check if the deleted rows really vanished after moving away from them - assertTrue("row count did not change as expected after two deletions", initialRowCount - 2 == currentRowCount()); - - // ..................................................................................................... - // check if the deleted row vanishes after moving to the insertion row - final int rowCountBefore = currentRowCount(); - final int deletedPos = deleteRandom(); - m_resultSetUpdate.moveToInsertRow(); - assertTrue("moving to the insertion row immediately after |deleteRow| does not adjust the row count", rowCountBefore == currentRowCount() + 1); - - m_resultSetUpdate.moveToCurrentRow(); - assertTrue("|moveToCurrentRow| after |deleteRow| + |moveToInsertRow| results in unexpected position", - (m_resultSet.getRow() == deletedPos) && !m_resultSet.rowDeleted()); - - // the same, but this time with deleting the first row (which is not covered by deleteRandom) - m_resultSet.last(); - m_resultSetUpdate.deleteRow(); - m_resultSetUpdate.moveToInsertRow(); - m_resultSetUpdate.moveToCurrentRow(); - assertTrue("|last| + |deleteRow| + |moveToInsertRow| + |moveToCurrentRow| results in wrong state", m_resultSet.isAfterLast()); - - // ..................................................................................................... - // check if deleting a deleted row fails as expected - deleteRandom(); - caughtException = false; - try - { - m_resultSetUpdate.deleteRow(); - } - catch (SQLException e) - { - caughtException = true; - } - assertTrue("deleting a deleted row succeeded - it shouldn't", caughtException); - - // ..................................................................................................... - // check if deleteRows fails if it contains the bookmark of a previously-deleted row - m_resultSet.first(); - final Object firstBookmark = m_rowLocate.getBookmark(); - positionRandom(); - final Object deleteBookmark = m_rowLocate.getBookmark(); - m_resultSetUpdate.deleteRow(); - final XDeleteRows multiDelete = UnoRuntime.queryInterface( XDeleteRows.class, m_resultSet ); - final int[] deleteSuccess = multiDelete.deleteRows(new Object[] - { - firstBookmark, deleteBookmark - }); - assertTrue("XDeleteRows::deleteRows with the bookmark of an already-deleted row failed", - (deleteSuccess.length == 2) && (deleteSuccess[0] != 0) && (deleteSuccess[1] == 0)); - - // ..................................................................................................... - // check if refreshing a deleted row fails as expected - deleteRandom(); - caughtException = false; - try - { - m_resultSet.refreshRow(); - } - catch (SQLException e) - { - caughtException = true; - } - assertTrue("refreshing a deleted row succeeded - it shouldn't", caughtException); - - // ..................................................................................................... - // rowUpdated/rowDeleted - deleteRandom(); - assertTrue("rowDeleted and/or rowUpdated are wrong on a deleted row", !m_resultSet.rowUpdated() && !m_resultSet.rowInserted()); - - // ..................................................................................................... - // updating values in a deleted row should fail - deleteRandom(); - final XRowUpdate rowUpdated = UnoRuntime.queryInterface( XRowUpdate.class, m_resultSet ); - caughtException = false; - try - { - rowUpdated.updateString(2, TEST21); - } - catch (SQLException e) - { - caughtException = true; - } - assertTrue("updating values in a deleted row should not succeed", caughtException); - } - - // -------------------------------------------------------------------------------------------------------- - /** checks whether deletions on the main RowSet properly interfere (or don't interfere) with the movement - * on a clone of the RowSet - */ - @Test - public void testCloneMovesPlusDeletions() throws SQLException, UnknownPropertyException, WrappedTargetException - { - createTestCase(true); - // ensure that all records are known - m_resultSet.last(); - - final XResultSet clone = createClone(); - final XRowLocate cloneRowLocate = UnoRuntime.queryInterface( XRowLocate.class, clone ); - - positionRandom(); - - // ..................................................................................................... - // move the clone to the same record as the RowSet, and delete this record - cloneRowLocate.moveToBookmark(m_rowLocate.getBookmark()); - final int clonePosition = clone.getRow(); - m_resultSetUpdate.deleteRow(); - - assertTrue("clone doesn't know that its current row has been deleted via the RowSet", clone.rowDeleted()); - assertTrue("clone's position changed somehow during deletion", clonePosition == clone.getRow()); - - // ..................................................................................................... - // move the row set away from the deleted record. This should still not touch the state of the clone - m_resultSet.previous(); - - assertTrue("clone doesn't know (anymore) that its current row has been deleted via the RowSet", clone.rowDeleted()); - assertTrue("clone's position changed somehow during deletion and RowSet-movement", clonePosition == clone.getRow()); - - // ..................................................................................................... - // move the clone away from the deleted record - clone.next(); - assertTrue("clone still assumes that its row is deleted - but we already moved it", !clone.rowDeleted()); - - // ..................................................................................................... - // check whether deleting the extremes (first / last) work - m_resultSet.first(); - cloneRowLocate.moveToBookmark(m_rowLocate.getBookmark()); - m_resultSetUpdate.deleteRow(); - clone.previous(); - assertTrue("deleting the first record left the clone in a strange state (after |previous|)", clone.isBeforeFirst()); - clone.next(); - assertTrue("deleting the first record left the clone in a strange state (after |previous| + |next|)", clone.isFirst()); - - m_resultSet.last(); - cloneRowLocate.moveToBookmark(m_rowLocate.getBookmark()); - m_resultSetUpdate.deleteRow(); - clone.next(); - assertTrue("deleting the last record left the clone in a strange state (after |next|)", clone.isAfterLast()); - clone.previous(); - assertTrue("deleting the first record left the clone in a strange state (after |next| + |previous|)", clone.isLast()); - - // ..................................................................................................... - // check whether movements of the clone interfere with movements of the RowSet, if the latter is on a deleted row - final int positionBefore = positionRandom(); - m_resultSetUpdate.deleteRow(); - assertTrue("|deleteRow|, but no |rowDeleted| (this should have been found much earlier!)", m_resultSet.rowDeleted()); - clone.beforeFirst(); - while (clone.next()); - assertTrue("row set forgot that the current row is deleted", m_resultSet.rowDeleted()); - - assertTrue("moving to the next record after |deleteRow| and clone moves failed", m_resultSet.next()); - assertTrue("wrong position after |deleteRow| and clone movement", !m_resultSet.isAfterLast() && !m_resultSet.isBeforeFirst()); - assertTrue("wrong absolute position after |deleteRow| and clone movement", m_resultSet.getRow() == positionBefore); - } - - // -------------------------------------------------------------------------------------------------------- - /** checks whether insertions on the main RowSet properly interfere (or don't interfere) with the movement - * on a clone of the RowSet - */ - @Test - public void testCloneMovesPlusInsertions() throws SQLException, UnknownPropertyException, WrappedTargetException, PropertyVetoException, com.sun.star.lang.IllegalArgumentException - { - createTestCase(true); - // ensure that all records are known - m_rowSetProperties.setPropertyValue("FetchSize", Integer.valueOf(10)); - - final XResultSet clone = createClone(); - final XRow cloneRow = UnoRuntime.queryInterface( XRow.class, clone ); - - // ..................................................................................................... - // first check the basic scenario without the |moveToInsertRow| |moveToCurrentRow|, to ensure that - // really those are broken, if at all - m_resultSet.last(); - clone.first(); - clone.absolute(11); - clone.first(); - - final int rowValue1 = m_row.getInt(1); - final int rowPos = m_resultSet.getRow(); - final int rowValue2 = m_row.getInt(1); - assertTrue("repeated query for the same column value delivers different values (" + rowValue1 + " and " + rowValue2 + ") on row: " + rowPos, - rowValue1 == rowValue2); - - testPosition(clone, cloneRow, 1, "mixed clone/rowset move: clone check"); - testPosition(m_resultSet, m_row, MAX_TABLE_ROWS, "mixed clone/rowset move: rowset check"); - - // ..................................................................................................... - // now the complete scenario - m_resultSet.last(); - m_resultSetUpdate.moveToInsertRow(); - clone.first(); - clone.absolute(11); - clone.first(); - m_resultSetUpdate.moveToCurrentRow(); - - testPosition(clone, cloneRow, 1, "mixed clone/rowset move/insertion: clone check"); - testPosition(m_resultSet, m_row, 100, "mixed clone/rowset move/insertion: rowset check"); - } - - // -------------------------------------------------------------------------------------------------------- - private void testTableParameters() - { - // for a row set simply based on a table, there should be not parameters at all - createRowSet("products", CommandType.TABLE, false); - try - { - verifyParameters(new String[] - { - }, "testTableParameters"); - } - catch (Exception e) - { - fail("testing the parameters of a table failed" + e.getMessage()); - } - } - // -------------------------------------------------------------------------------------------------------- - - private void testParametersAfterNormalExecute() - { - try - { - createRowSet("SELECT * FROM \"customers\"", CommandType.COMMAND, true); - m_rowSetProperties.setPropertyValue("Command", "SELECT * FROM \"customers\" WHERE \"City\" = :city"); - final XParameters rowsetParams = UnoRuntime.queryInterface( XParameters.class, m_rowSet ); - rowsetParams.setString(1, "London"); - m_rowSet.execute(); - } - catch (Exception e) - { - fail("testing the parameters of a table failed" + e.getMessage()); - } - } - - // -------------------------------------------------------------------------------------------------------- - private void verifyParameters(String[] _paramNames, String _context) throws com.sun.star.uno.Exception - { - final XIndexAccess params = m_paramsSupplier.getParameters(); - final int expected = _paramNames.length; - final int found = params != null ? params.getCount() : 0; - - assertTrue("wrong number of parameters (expected: " + expected + ", found: " + found + ") in " + _context, - found == expected); - - if (found == 0) - { - return; - } - - for (int i = 0; i < expected; ++i) - { - final XPropertySet parameter = UnoRuntime.queryInterface( XPropertySet.class, params.getByIndex( i ) ); - - final String expectedName = _paramNames[i]; - final String foundName = (String) parameter.getPropertyValue("Name"); - assertTrue("wrong parameter name (expected: " + expectedName + ", found: " + foundName + ") in" + _context, - expectedName.equals(foundName)); - } - } - - // -------------------------------------------------------------------------------------------------------- - private void testParametrizedQuery() - { - try - { - // for a row set based on a parametrized query, those parameters should be properly - // recognized - m_dataSource.createQuery("products like", "SELECT * FROM \"products\" WHERE \"Name\" LIKE :product_name"); - createRowSet("products like", CommandType.QUERY, false); - verifyParameters(new String[] - { - "product_name" - }, "testParametrizedQuery"); - } - catch (Exception e) - { - fail("testing the parameters of a parametrized query failed" + e.getMessage()); - } - } - - // -------------------------------------------------------------------------------------------------------- - private void testParametersInteraction() - { - try - { - createRowSet("products like", CommandType.QUERY, false); - - // let's fill in a parameter value via XParameters, and see whether it is respected by the parameters container - final XParameters rowsetParams = UnoRuntime.queryInterface(XParameters.class, m_rowSet); - rowsetParams.setString(1, "Apples"); - - XIndexAccess params = m_paramsSupplier.getParameters(); - XPropertySet firstParam = UnoRuntime.queryInterface( XPropertySet.class, params.getByIndex( 0 ) ); - Object firstParamValue = firstParam.getPropertyValue("Value"); - - assertTrue("XParameters and the parameters container do not properly interact", - "Apples".equals(firstParamValue)); - - // let's see whether this also survices an execute of the row set - rowsetParams.setString(1, "Oranges"); - m_rowSet.execute(); - { - // TODO: the following would not be necessary if the parameters container would *survive* - // the execution of the row set. It currently doesn't (though the values it represents do). - // It would be nice, but not strictly necessary, if it would. - params = m_paramsSupplier.getParameters(); - firstParam = UnoRuntime.queryInterface( XPropertySet.class, params.getByIndex( 0 ) ); - } - firstParamValue = firstParam.getPropertyValue("Value"); - assertTrue("XParameters and the parameters container do not properly interact, after the row set has been executed", - "Oranges".equals(firstParamValue)); - } - catch (Exception e) - { - fail("could not test the relationship between XParameters and XParametersSupplier" + e.getMessage()); - } - } - - // -------------------------------------------------------------------------------------------------------- - private void testParametersInFilter() - { - try - { - createRowSet("SELECT * FROM \"customers\"", CommandType.COMMAND, false); - m_rowSetProperties.setPropertyValue("Filter", "\"City\" = :city"); - - m_rowSetProperties.setPropertyValue("ApplyFilter", Boolean.TRUE); - verifyParameters(new String[] - { - "city" - }, "testParametersInFilter"); - - m_rowSetProperties.setPropertyValue("ApplyFilter", Boolean.FALSE); - verifyParameters(new String[] - { - }, "testParametersInFilter"); - } - catch (Exception e) - { - fail("testing the parameters within a WHERE clause failed" + e.getMessage()); - } - } - - // -------------------------------------------------------------------------------------------------------- - /** checks the XParametersSupplier functionality of a RowSet - */ - @Test - public void testParameters() - { - createTestCase(false); - // use an own RowSet instance, not the one which is also used for the other cases - - testTableParameters(); - testParametrizedQuery(); - testParametersInFilter(); - - testParametersAfterNormalExecute(); - - testParametersInteraction(); - } -} - diff --git a/dbaccess/qa/complex/dbaccess/RowSetEventListener.java b/dbaccess/qa/complex/dbaccess/RowSetEventListener.java deleted file mode 100644 index 1359653fc..000000000 --- a/dbaccess/qa/complex/dbaccess/RowSetEventListener.java +++ /dev/null @@ -1,111 +0,0 @@ -/************************************************************************* - * - * 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 complex.dbaccess; - -import com.sun.star.sdb.XRowSetApproveListener; -import com.sun.star.sdbc.XRowSetListener; -import com.sun.star.sdb.RowChangeEvent; -import com.sun.star.lang.EventObject; -import com.sun.star.beans.XPropertyChangeListener; - -public final class RowSetEventListener implements XRowSetApproveListener,XRowSetListener,XPropertyChangeListener -{ - public static final int APPROVE_CURSOR_MOVE = 0; - public static final int APPROVE_ROW_CHANGE = 1; - public static final int COLUMN_VALUE = 2; - public static final int CURSOR_MOVED = 3; - public static final int ROW_CHANGED = 4; - public static final int IS_MODIFIED = 5; - public static final int IS_NEW = 6; - public static final int ROW_COUNT = 7; - public static final int IS_ROW_COUNT_FINAL = 8; - - int callPos = 1; - int calling []; - - RowSetEventListener(){ - calling = new int [9]; - clearCalling(); - } - public int[] getCalling(){ - return calling; - } - public void clearCalling(){ - for(int i = 0 ; i < calling.length; ++i){ - calling[i] = -1; - } - callPos = 1; - } - // XEventListener - public void disposing(com.sun.star.lang.EventObject event) - { - } - // XRowSetApproveBroadcaster - public boolean approveCursorMove(EventObject event) - { - calling[APPROVE_CURSOR_MOVE] = callPos++; - return true; - } - public boolean approveRowChange(RowChangeEvent event) - { - calling[APPROVE_ROW_CHANGE] = callPos++; - return true; - } - public boolean approveRowSetChange(EventObject event) - { - return true; - } - - // XRowSetListener - public void cursorMoved(com.sun.star.lang.EventObject event) - { - calling[CURSOR_MOVED] = callPos++; - } - public void rowChanged(com.sun.star.lang.EventObject event) - { - calling[ROW_CHANGED] = callPos++; - } - public void rowSetChanged(com.sun.star.lang.EventObject event) - { - } - - public void propertyChange(com.sun.star.beans.PropertyChangeEvent propertyChangeEvent) { - if ( "Value".equals(propertyChangeEvent.PropertyName) ){ - calling[COLUMN_VALUE] = callPos++; - } else if ( "IsModified".equals(propertyChangeEvent.PropertyName) ){ - calling[IS_MODIFIED] = callPos++; - } else if ( "IsNew".equals(propertyChangeEvent.PropertyName) ){ - calling[IS_NEW] = callPos++; - } else if ( "RowCount".equals(propertyChangeEvent.PropertyName) ){ - calling[ROW_COUNT] = callPos++; - } else if ( "IsRowCountFinal".equals(propertyChangeEvent.PropertyName) ){ - calling[IS_ROW_COUNT_FINAL] = callPos++; - } - } - -} diff --git a/dbaccess/qa/complex/dbaccess/SingleSelectQueryComposer.java b/dbaccess/qa/complex/dbaccess/SingleSelectQueryComposer.java deleted file mode 100755 index f40aff96e..000000000 --- a/dbaccess/qa/complex/dbaccess/SingleSelectQueryComposer.java +++ /dev/null @@ -1,403 +0,0 @@ -/************************************************************************* - * - * 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 complex.dbaccess; - -import com.sun.star.beans.PropertyState; -import com.sun.star.sdb.SQLFilterOperator; -import com.sun.star.beans.PropertyAttribute; -import com.sun.star.beans.XPropertySet; -import com.sun.star.beans.XPropertyContainer; -import com.sun.star.beans.NamedValue; -import com.sun.star.container.XNameAccess; -import com.sun.star.sdbcx.XTablesSupplier; -import com.sun.star.sdb.XParametersSupplier; -import com.sun.star.beans.PropertyValue; -import com.sun.star.sdbcx.XColumnsSupplier; -import com.sun.star.container.XIndexAccess; -import com.sun.star.sdb.CommandType; -import com.sun.star.sdb.XSingleSelectQueryComposer; -import com.sun.star.uno.UnoRuntime; - -import com.sun.star.sdbc.DataType; -import java.lang.reflect.InvocationTargetException; -import java.lang.reflect.Method; - -// ---------- junit imports ----------------- -import org.junit.Test; -import static org.junit.Assert.*; -// ------------------------------------------ - -public class SingleSelectQueryComposer extends CRMBasedTestCase -{ - - private XSingleSelectQueryComposer m_composer = null; - private final static String COMPLEXFILTER = "( \"ID\" = 1 AND \"Postal\" = '4' )" - + " OR ( \"ID\" = 2 AND \"Postal\" = '5' )" - + " OR ( \"ID\" = 3 AND \"Postal\" = '6' AND \"Address\" = '7' )" - + " OR ( \"Address\" = '8' )" - + " OR ( \"Postal\" = '9' )" - + " OR ( NOW( ) = {D '2010-01-01' } )"; - private final static String INNERPRODUCTSQUERY = "products (inner)"; - - // -------------------------------------------------------------------------------------------------------- - private void createQueries() throws Exception - { - m_database.getDatabase().getDataSource().createQuery(INNERPRODUCTSQUERY, "SELECT * FROM \"products\""); - } - - // -------------------------------------------------------------------------------------------------------- - @Override - protected void createTestCase() - { - try - { - super.createTestCase(); - - createQueries(); - - m_composer = createQueryComposer(); - - } - catch (Exception e) - { - fail("caught an exception (" + e.getMessage() + ") while creating the test case"); - } - } - - // -------------------------------------------------------------------------------------------------------- - private void checkAttributeAccess(String _attributeName, String _attributeValue) - { - System.out.println("setting " + _attributeName + " to " + _attributeValue); - String realValue = null; - try - { - final Class composerClass = m_composer.getClass(); - final Method attributeGetter = composerClass.getMethod("get" + _attributeName, new Class[] - { - }); - final Method attributeSetter = composerClass.getMethod("set" + _attributeName, new Class[] - { - String.class - }); - - attributeSetter.invoke(m_composer, new Object[] - { - _attributeValue - }); - realValue = (String) attributeGetter.invoke(m_composer, new Object[] - { - }); - } - catch (NoSuchMethodException e) - { - } - catch (IllegalAccessException e) - { - } - catch (InvocationTargetException e) - { - } - assertTrue("set/get" + _attributeName + " not working as expected (set: " + _attributeValue + ", get: " + (realValue != null ? realValue : "null") + ")", - realValue.equals(_attributeValue)); - System.out.println(" (results in " + m_composer.getQuery() + ")"); - } - - /** tests setCommand of the composer - */ - @Test - public void testSetCommand() - { - System.out.println("testing SingleSelectQueryComposer's setCommand"); - - try - { - final String table = "SELECT * FROM \"customers\""; - m_composer.setCommand("customers", CommandType.TABLE); - assertTrue("setCommand/getQuery TABLE inconsistent", m_composer.getQuery().equals(table)); - - m_database.getDatabase().getDataSource().createQuery("set command test", "SELECT * FROM \"orders for customer\" \"a\", \"customers\" \"b\" WHERE \"a\".\"Product Name\" = \"b\".\"Name\""); - m_composer.setCommand("set command test", CommandType.QUERY); - assertTrue("setCommand/getQuery QUERY inconsistent", m_composer.getQuery().equals(m_database.getDatabase().getDataSource().getQueryDefinition("set command test").getCommand())); - - final String sql = "SELECT * FROM \"orders for customer\" WHERE \"Product Name\" = 'test'"; - m_composer.setCommand(sql, CommandType.COMMAND); - assertTrue("setCommand/getQuery COMMAND inconsistent", m_composer.getQuery().equals(sql)); - } - catch (Exception e) - { - fail("Exception caught: " + e); - } - } - - /** tests accessing attributes of the composer (order, filter, group by, having) - */ - @Test - public void testAttributes() - { - System.out.println("testing SingleSelectQueryComposer's attributes (order, filter, group by, having)"); - - try - { - System.out.println("check setElementaryQuery"); - - final String simpleQuery2 = "SELECT * FROM \"customers\" WHERE \"Name\" = 'oranges'"; - m_composer.setElementaryQuery(simpleQuery2); - assertTrue("setElementaryQuery/getQuery inconsistent", m_composer.getQuery().equals(simpleQuery2)); - - System.out.println("check setQuery"); - final String simpleQuery = "SELECT * FROM \"customers\""; - m_composer.setQuery(simpleQuery); - assertTrue("set/getQuery inconsistent", m_composer.getQuery().equals(simpleQuery)); - - checkAttributeAccess("Filter", "\"Name\" = 'oranges'"); - checkAttributeAccess("Group", "\"City\""); - checkAttributeAccess("Order", "\"Address\""); - checkAttributeAccess("HavingClause", "\"ID\" <> 4"); - - final XIndexAccess orderColumns = m_composer.getOrderColumns(); - assertTrue("Order columns doesn't exist: \"Address\"", - orderColumns != null && orderColumns.getCount() == 1 && orderColumns.getByIndex(0) != null); - - final XIndexAccess groupColumns = m_composer.getGroupColumns(); - assertTrue("Group columns doesn't exist: \"City\"", - groupColumns != null && groupColumns.getCount() == 1 && groupColumns.getByIndex(0) != null); - - // XColumnsSupplier - final XColumnsSupplier xSelectColumns = UnoRuntime.queryInterface(XColumnsSupplier.class, m_composer); - assertTrue("no select columns, or wrong number of select columns", - xSelectColumns != null && xSelectColumns.getColumns() != null && xSelectColumns.getColumns().getElementNames().length == 6); - - // structured filter - m_composer.setQuery("SELECT \"ID\", \"Postal\", \"Address\" FROM \"customers\""); - m_composer.setFilter(COMPLEXFILTER); - final PropertyValue[][] aStructuredFilter = m_composer.getStructuredFilter(); - m_composer.setFilter(""); - m_composer.setStructuredFilter(aStructuredFilter); - if (!m_composer.getFilter().equals(COMPLEXFILTER)) - { - System.out.println(COMPLEXFILTER); - System.out.println(m_composer.getFilter()); - } - assertTrue("Structured Filter not identical", m_composer.getFilter().equals(COMPLEXFILTER)); - - // structured having clause - m_composer.setHavingClause(COMPLEXFILTER); - final PropertyValue[][] aStructuredHaving = m_composer.getStructuredHavingClause(); - m_composer.setHavingClause(""); - m_composer.setStructuredHavingClause(aStructuredHaving); - assertTrue("Structured Having Clause not identical", m_composer.getHavingClause().equals(COMPLEXFILTER)); - } - catch (Exception e) - { - fail("Exception caught: " + e); - } - } - - /** test various sub query related features ("queries in queries") - */ - @Test - public void testSubQueries() throws Exception - { - m_composer.setQuery("SELECT * from \"" + INNERPRODUCTSQUERY + "\""); - final XTablesSupplier suppTables = UnoRuntime.queryInterface(XTablesSupplier.class, m_composer); - final XNameAccess tables = suppTables.getTables(); - assertTrue("a simple SELECT * FROM <query> could not be parsed", - tables != null && tables.hasByName(INNERPRODUCTSQUERY)); - - final String sInnerCommand = m_database.getDatabase().getDataSource().getQueryDefinition(INNERPRODUCTSQUERY).getCommand(); - final String sExecutableQuery = m_composer.getQueryWithSubstitution(); - assertTrue("simple query containing a sub query improperly parsed to SDBC level statement: \n1. " + sExecutableQuery + "\n2. " + "SELECT * FROM ( " + sInnerCommand + " ) AS \"" + INNERPRODUCTSQUERY + "\"", - sExecutableQuery.equals("SELECT * FROM ( " + sInnerCommand + " ) AS \"" + INNERPRODUCTSQUERY + "\"")); - } - - /** tests the XParametersSupplier functionality - */ - @Test - public void testParameters() - { - try - { - // "orders for customers" is a query with a named parameter (based on another query) - m_database.getDatabase().getDataSource().createQuery("orders for customer", "SELECT * FROM \"all orders\" WHERE \"Customer Name\" LIKE :cname"); - // "orders for customer and product" is query based on "orders for customers", adding an additional, - // anonymous parameter - m_database.getDatabase().getDataSource().createQuery("orders for customer and product", "SELECT * FROM \"orders for customer\" WHERE \"Product Name\" LIKE ?"); - - m_composer.setQuery(m_database.getDatabase().getDataSource().getQueryDefinition("orders for customer and product").getCommand()); - final XParametersSupplier suppParams = UnoRuntime.queryInterface(XParametersSupplier.class, m_composer); - final XIndexAccess parameters = suppParams.getParameters(); - - final String expectedParamNames[] = - - { - "cname", - "Product Name" - }; - - final int paramCount = parameters.getCount(); - assertTrue("composer did find wrong number of parameters in the nested queries.", - paramCount == expectedParamNames.length); - - for (int i = 0; i < paramCount; ++i) - { - final XPropertySet parameter = UnoRuntime.queryInterface(XPropertySet.class, parameters.getByIndex(i)); - final String paramName = (String) parameter.getPropertyValue("Name"); - assertTrue("wrong parameter name at position " + (i + 1) + " (expected: " + expectedParamNames[i] + ", found: " + paramName + ")", - paramName.equals(expectedParamNames[i])); - - } - } - catch (Exception e) - { - fail("caught an exception: " + e); - } - } - - @Test - public void testConditionByColumn() - { - try - { - m_composer.setQuery("SELECT * FROM \"customers\""); - - final Object initArgs[] = - - { - new NamedValue("AutomaticAddition", Boolean.valueOf(true)) - }; - final String serviceName = "com.sun.star.beans.PropertyBag"; - final XPropertyContainer filter = UnoRuntime.queryInterface(XPropertyContainer.class, getMSF().createInstanceWithArguments(serviceName, initArgs)); - filter.addProperty("Name", PropertyAttribute.MAYBEVOID, "Comment"); - filter.addProperty("RealName", PropertyAttribute.MAYBEVOID, "Comment"); - filter.addProperty("TableName", PropertyAttribute.MAYBEVOID, "customers"); - filter.addProperty("Value", PropertyAttribute.MAYBEVOID, "Good one."); - filter.addProperty("Type", PropertyAttribute.MAYBEVOID, Integer.valueOf(DataType.LONGVARCHAR)); - final XPropertySet column = UnoRuntime.queryInterface(XPropertySet.class, filter); - - m_composer.appendFilterByColumn(column, true, SQLFilterOperator.LIKE); - assertTrue("At least one row should exist", m_database.getConnection().createStatement().executeQuery(m_composer.getQuery()).next()); - - } - catch (Exception e) - { - // this is an error: the query is expected to be parseable - fail("caught an exception: " + e); - } - } - - private void impl_testDisjunctiveNormalForm(String _query, PropertyValue[][] _expectedDNF) - { - try - { - m_composer.setQuery(_query); - } - catch (Exception e) - { - // this is an error: the query is expected to be parseable - fail("caught an exception: " + e); - } - - final PropertyValue[][] disjunctiveNormalForm = m_composer.getStructuredFilter(); - - assertEquals("DNF: wrong number of rows", _expectedDNF.length, disjunctiveNormalForm.length); - for (int i = 0; i < _expectedDNF.length; ++i) - { - assertEquals("DNF: wrong number of columns in row " + i, _expectedDNF[i].length, disjunctiveNormalForm[i].length); - for (int j = 0; j < _expectedDNF[i].length; ++j) - { - assertEquals("DNF: wrong content in column " + j + ", row " + i, - _expectedDNF[i][j].Name, disjunctiveNormalForm[i][j].Name); - } - } - } - - /** tests the disjunctive normal form functionality, aka the structured filter, - * of the composer - */ - @Test - public void testDisjunctiveNormalForm() - { - // a simple case: WHERE clause simply is a combination of predicates knitted with AND - String query = - "SELECT \"customers\".\"Name\", " - + "\"customers\".\"Address\", " - + "\"customers\".\"City\", " - + "\"customers\".\"Postal\", " - + "\"products\".\"Name\" " - + "FROM \"orders\", \"customers\", \"orders_details\", \"products\" " - + "WHERE ( \"orders\".\"CustomerID\" = \"customers\".\"ID\" " - + "AND \"orders_details\".\"OrderID\" = \"orders\".\"ID\" " - + "AND \"orders_details\".\"ProductID\" = \"products\".\"ID\" " - + ") "; - - impl_testDisjunctiveNormalForm(query, new PropertyValue[][] - { - new PropertyValue[] - { - new PropertyValue("CustomerID", SQLFilterOperator.EQUAL, "\"customers\".\"ID\"", PropertyState.DIRECT_VALUE), - new PropertyValue("OrderID", SQLFilterOperator.EQUAL, "\"orders\".\"ID\"", PropertyState.DIRECT_VALUE), - new PropertyValue("ProductID", SQLFilterOperator.EQUAL, "\"products\".\"ID\"", PropertyState.DIRECT_VALUE) - } - }); - - // somewhat more challenging: One of the conjunction terms is a disjunction itself - query = - "SELECT \"customers\".\"Name\", " - + "\"customers\".\"Address\", " - + "\"customers\".\"City\", " - + "\"customers\".\"Postal\", " - + "\"products\".\"Name\" " - + "FROM \"orders\", \"customers\", \"orders_details\", \"products\" " - + "WHERE ( \"orders\".\"CustomerID\" = \"customers\".\"ID\" " - + "AND \"orders_details\".\"OrderID\" = \"orders\".\"ID\" " - + "AND \"orders_details\".\"ProductID\" = \"products\".\"ID\" " - + ") " - + "AND " - + "( \"products\".\"Name\" = 'Apples' " - + "OR \"products\".\"ID\" = 2 " - + ")"; - - impl_testDisjunctiveNormalForm(query, new PropertyValue[][] - { - new PropertyValue[] - { - new PropertyValue("CustomerID", SQLFilterOperator.EQUAL, "\"customers\".\"ID\"", PropertyState.DIRECT_VALUE), - new PropertyValue("OrderID", SQLFilterOperator.EQUAL, "\"orders\".\"ID\"", PropertyState.DIRECT_VALUE), - new PropertyValue("ProductID", SQLFilterOperator.EQUAL, "\"products\".\"ID\"", PropertyState.DIRECT_VALUE), - new PropertyValue("Name", SQLFilterOperator.EQUAL, "Apples", PropertyState.DIRECT_VALUE) - }, - new PropertyValue[] - { - new PropertyValue("CustomerID", SQLFilterOperator.EQUAL, "\"customers\".\"ID\"", PropertyState.DIRECT_VALUE), - new PropertyValue("OrderID", SQLFilterOperator.EQUAL, "\"orders\".\"ID\"", PropertyState.DIRECT_VALUE), - new PropertyValue("ProductID", SQLFilterOperator.EQUAL, "\"products\".\"ID\"", PropertyState.DIRECT_VALUE), - new PropertyValue("ID", SQLFilterOperator.EQUAL, Integer.valueOf(2), PropertyState.DIRECT_VALUE) - } - }); - - } -} diff --git a/dbaccess/qa/complex/dbaccess/TestCase.java b/dbaccess/qa/complex/dbaccess/TestCase.java deleted file mode 100644 index d60bc272e..000000000 --- a/dbaccess/qa/complex/dbaccess/TestCase.java +++ /dev/null @@ -1,254 +0,0 @@ -/************************************************************************* - * - * 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 complex.dbaccess; - -import java.lang.reflect.InvocationTargetException; -import java.lang.reflect.Method; -import com.sun.star.beans.PropertyValue; -import com.sun.star.beans.XPropertySet; -import com.sun.star.frame.XComponentLoader; -import com.sun.star.frame.XModel; -import com.sun.star.lang.XMultiServiceFactory; -// import com.sun.star.uno.Exception; -import com.sun.star.uno.UnoRuntime; -import com.sun.star.uno.XComponentContext; -import helper.FileTools; -import java.io.File; -import java.io.IOException; -import java.net.URI; -import java.net.URISyntaxException; - -// ---------- junit imports ----------------- -import org.junit.AfterClass; -import org.junit.BeforeClass; -import org.openoffice.test.OfficeConnection; -import static org.junit.Assert.*; -// ------------------------------------------ - - -public abstract class TestCase -{ - // -------------------------------------------------------------------------------------------------------- - protected final XComponentContext getComponentContext() - { - XComponentContext context = null; - try - { - final XPropertySet orbProps = UnoRuntime.queryInterface( XPropertySet.class, getMSF() ); - context = UnoRuntime.queryInterface( XComponentContext.class, - orbProps.getPropertyValue( "DefaultContext" ) ); - } - catch ( Exception ex ) - { - fail( "could not retrieve the ComponentContext" ); - } - return context; - } - - // -------------------------------------------------------------------------------------------------------- - public void before() throws java.lang.Exception - { - } - - // -------------------------------------------------------------------------------------------------------- - public void after() throws java.lang.Exception - { - } - - // -------------------------------------------------------------------------------------------------------- - /** returns the URL of a temporary file which can be used during the test. - * - * The file will be deleted when the process exits - * @return the URL of a temporary file - */ - protected final String createTempFileURL() throws IOException - { - final File documentFile = java.io.File.createTempFile( "dbaccess_test", ".odb" ).getAbsoluteFile(); - if ( documentFile.exists() ) - { - documentFile.delete(); - } - return FileHelper.getOOoCompatibleFileURL( documentFile.toURI().toURL().toString() ); - } - - // -------------------------------------------------------------------------------------------------------- - /** - * copies the file given by URL to a temporary file - * @return - * the URL of the new file - */ - protected final String copyToTempFile( String _sourceURL ) throws IOException - { - final String targetURL = createTempFileURL(); - try - { - FileTools.copyFile( new File( new URI( _sourceURL ) ), new File( new URI( targetURL ) ) ); - } - catch ( URISyntaxException e ) { } - - return FileHelper.getOOoCompatibleFileURL( targetURL ); - } - - // -------------------------------------------------------------------------------------------------------- - protected final XModel loadDocument( final String _docURL ) throws Exception - { - final XComponentLoader loader = UnoRuntime.queryInterface( XComponentLoader.class, - getMSF().createInstance( "com.sun.star.frame.Desktop" ) ); - return UnoRuntime.queryInterface( XModel.class, - loader.loadComponentFromURL( _docURL, "_blank", 0, new PropertyValue[] {} ) ); - } - - // -------------------------------------------------------------------------------------------------------- - /** invokes a given method on a given object, and assures a certain exception is caught - * @param _message - * is the message to print when the check fails - * @param _object - * is the object to invoke the method on - * @param _methodName - * is the name of the method to invoke - * @param _methodArgs - * are the arguments to pass to the method. - * @param _argClasses - * are the classes to assume for the arguments of the methods - * @param _expectedExceptionClass - * is the class of the exception to be caught. If this is null, - * it means that <em>no</em> exception must be throw by invoking the method. - */ - protected void assureException( final String _message, final Object _object, final String _methodName, - final Class[] _argClasses, final Object[] _methodArgs, final Class _expectedExceptionClass ) - { - Class objectClass = _object.getClass(); - - boolean noExceptionAllowed = ( _expectedExceptionClass == null ); - - boolean caughtExpected = noExceptionAllowed ? true : false; - try - { - Method method = objectClass.getMethod( _methodName, _argClasses ); - method.invoke(_object, _methodArgs ); - } - catch ( InvocationTargetException e ) - { - caughtExpected = noExceptionAllowed - ? false - : ( e.getTargetException().getClass().equals( _expectedExceptionClass ) ); - } - catch( Exception e ) - { - caughtExpected = false; - } - - assertTrue( _message, caughtExpected ); - } - - /** invokes a given method on a given object, and assures a certain exception is caught - * @param _message is the message to print when the check fails - * @param _object is the object to invoke the method on - * @param _methodName is the name of the method to invoke - * @param _methodArgs are the arguments to pass to the method. Those implicitly define - * the classes of the arguments of the method which is called. - * @param _expectedExceptionClass is the class of the exception to be caught. If this is null, - * it means that <em>no</em> exception must be throw by invoking the method. - */ - protected void assureException( final String _message, final Object _object, final String _methodName, - final Object[] _methodArgs, final Class _expectedExceptionClass ) - { - Class[] argClasses = new Class[ _methodArgs.length ]; - for ( int i=0; i<_methodArgs.length; ++i ) - argClasses[i] = _methodArgs[i].getClass(); - assureException( _message, _object, _methodName, argClasses, _methodArgs, _expectedExceptionClass ); - } - - /** invokes a given method on a given object, and assures a certain exception is caught - * @param _object is the object to invoke the method on - * @param _methodName is the name of the method to invoke - * @param _methodArgs are the arguments to pass to the method. Those implicitly define - * the classes of the arguments of the method which is called. - * @param _expectedExceptionClass is the class of the exception to be caught. If this is null, - * it means that <em>no</em> exception must be throw by invoking the method. - */ - protected void assureException( final Object _object, final String _methodName, final Object[] _methodArgs, - final Class _expectedExceptionClass ) - { - assureException( - "did not catch the expected exception (" + - ( ( _expectedExceptionClass == null ) ? "none" : _expectedExceptionClass.getName() ) + - ") while calling " + _object.getClass().getName() + "." + _methodName, - _object, _methodName, _methodArgs, _expectedExceptionClass ); - } - - /** invokes a given method on a given object, and assures a certain exception is caught - * @param _object is the object to invoke the method on - * @param _methodName is the name of the method to invoke - * @param _methodArgs are the arguments to pass to the method - * @param _argClasses are the classes to assume for the arguments of the methods - * @param _expectedExceptionClass is the class of the exception to be caught. If this is null, - * it means that <em>no</em> exception must be throw by invoking the method. - */ - protected void assureException( final Object _object, final String _methodName, final Class[] _argClasses, - final Object[] _methodArgs, final Class _expectedExceptionClass ) - { - assureException( - "did not catch the expected exception (" + - ( ( _expectedExceptionClass == null ) ? "none" : _expectedExceptionClass.getName() ) + - ") while calling " + _object.getClass().getName() + "." + _methodName, - _object, _methodName, _argClasses, _methodArgs, _expectedExceptionClass ); - } - - // -------------------------------------------------------------------------------------------------------- - protected void assureException( Object _object, Class _unoInterfaceClass, String _methodName, Object[] _methodArgs, - Class _expectedExceptionClass ) - { - assureException( UnoRuntime.queryInterface( _unoInterfaceClass, _object ), _methodName, - _methodArgs, _expectedExceptionClass ); - } - - // -------------------------------------------------------------------------------------------------------- - protected XMultiServiceFactory getMSF() - { - final XMultiServiceFactory xMSF1 = UnoRuntime.queryInterface(XMultiServiceFactory.class, connection.getComponentContext().getServiceManager()); - return xMSF1; - } - - // -------------------------------------------------------------------------------------------------------- - // setup and close connections - @BeforeClass - public static void setUpConnection() throws Exception - { - connection.setUp(); - } - - // -------------------------------------------------------------------------------------------------------- - @AfterClass - public static void tearDownConnection() throws InterruptedException, com.sun.star.uno.Exception - { - connection.tearDown(); - } - - private static final OfficeConnection connection = new OfficeConnection(); - -} diff --git a/dbaccess/qa/complex/dbaccess/UISettings.java b/dbaccess/qa/complex/dbaccess/UISettings.java deleted file mode 100644 index ee0f8b541..000000000 --- a/dbaccess/qa/complex/dbaccess/UISettings.java +++ /dev/null @@ -1,142 +0,0 @@ -/************************************************************************* - * - * 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 complex.dbaccess; - -import com.sun.star.awt.FontSlant; -import com.sun.star.awt.TextAlign; -import com.sun.star.beans.XPropertySet; -import com.sun.star.container.XNameAccess; -import com.sun.star.form.runtime.XFormController; -import com.sun.star.frame.XController; -import com.sun.star.sdb.application.DatabaseObject; -import com.sun.star.uno.UnoRuntime; -import com.sun.star.util.XCloseable; -import connectivity.tools.CRMDatabase; - -// ---------- junit imports ----------------- -import org.junit.Test; -import static org.junit.Assert.*; -// ------------------------------------------ - -public class UISettings extends TestCase -{ - // -------------------------------------------------------------------------------------------------------- - /** verifies that aliases for inner queries work as expected - */ - @Test - public void checkTableFormattingPersistence() throws java.lang.Exception - { - // create, load, and connect a DB doc - CRMDatabase database = new CRMDatabase( getMSF(), true ); - - // display a table - XFormController tableViewController = UnoRuntime.queryInterface( XFormController.class, - database.loadSubComponent( DatabaseObject.TABLE, "customers" ) ); - XPropertySet tableControlModel = UnoRuntime.queryInterface( XPropertySet.class, - tableViewController.getCurrentControl().getModel() ); - - // change the table's formatting - tableControlModel.setPropertyValue( "FontName", "Andale Sans UI" ); - tableControlModel.setPropertyValue( "FontHeight", Float.valueOf( 20 ) ); - tableControlModel.setPropertyValue( "FontSlant", FontSlant.ITALIC ); - - String docURL = database.getDatabase().getModel().getURL(); - - // save close the database document - database.saveAndClose(); - - // load a copy of the document - // normally, it should be sufficient to load the same doc. However, there might be objects in the Java VM - // which are not yet freed, and which effectively hold the document alive. More precise: The document (|doc|) - // is certainly disposed, but other objects might hold a reference to one of the many other components - // around the database document, the data source, the connection, etc. As long as those objects are - // not cleaned up, the "database model impl" - the structure holding all document data - will - // stay alive, and subsequent requests to load the doc will just reuse it, without really loading it. - docURL = copyToTempFile( docURL ); - loadDocument( docURL ); - database = new CRMDatabase( getMSF(), docURL ); - - // display the table, again - tableViewController = UnoRuntime.queryInterface( XFormController.class, - database.loadSubComponent( DatabaseObject.TABLE, "customers" ) ); - tableControlModel = UnoRuntime.queryInterface( XPropertySet.class, - tableViewController.getCurrentControl().getModel() ); - - // verify the properties - assertEquals( "wrong font name", "Andale Sans UI", (String)tableControlModel.getPropertyValue( "FontName" ) ); - assertEquals( "wrong font height", (float)20, ((Float)tableControlModel.getPropertyValue( "FontHeight" )).floatValue(), 0 ); - assertEquals( "wrong font slant", FontSlant.ITALIC, (FontSlant)tableControlModel.getPropertyValue( "FontSlant" ) ); - - // close the doc - database.saveAndClose(); - } - - /** - * checks whether query columns use the settings of the underlying table column, if they do not (yet) have own - * settings - * @throws java.lang.Exception - */ - @Test - public void checkTransparentQueryColumnSettings() throws java.lang.Exception - { - // create, load, and connect a DB doc - CRMDatabase database = new CRMDatabase( getMSF(), true ); - - // display a table - XController tableView = database.loadSubComponent( DatabaseObject.TABLE, "customers" ); - XFormController tableViewController = UnoRuntime.queryInterface( XFormController.class, - tableView ); - XNameAccess tableControlModel = UnoRuntime.queryInterface( XNameAccess.class, - tableViewController.getCurrentControl().getModel() ); - - // change the formatting of a table column - XPropertySet idColumn = UnoRuntime.queryInterface( XPropertySet.class, tableControlModel.getByName( "ID" ) ); - assertTrue( "precondition not met: column already centered", - ((Short)idColumn.getPropertyValue( "Align" )).shortValue() != TextAlign.CENTER ); - idColumn.setPropertyValue( "Align", TextAlign.CENTER ); - - // close the table data view - XCloseable closeSubComponent = UnoRuntime.queryInterface( XCloseable.class, tableView.getFrame() ); - closeSubComponent.close( true ); - - // create a query based on that column - database.getDatabase().getDataSource().createQuery( "q_customers", "SELECT * FROM \"customers\"" ); - - // load this query, and verify the table column settings was propagated to the query column - XFormController queryViewController = UnoRuntime.queryInterface( XFormController.class, - database.loadSubComponent( DatabaseObject.QUERY, "q_customers" ) ); - tableControlModel = UnoRuntime.queryInterface( XNameAccess.class, - queryViewController.getCurrentControl().getModel() ); - idColumn = UnoRuntime.queryInterface( XPropertySet.class, tableControlModel.getByName( "ID" ) ); - - assertTrue( "table column alignment was not propagated to the query column", - ((Short)idColumn.getPropertyValue( "Align" )).shortValue() == TextAlign.CENTER ); - - // save close the database document - database.saveAndClose(); - } -} diff --git a/dbaccess/qa/complex/dbaccess/makefile.mk b/dbaccess/qa/complex/dbaccess/makefile.mk deleted file mode 100755 index 760f94a29..000000000 --- a/dbaccess/qa/complex/dbaccess/makefile.mk +++ /dev/null @@ -1,102 +0,0 @@ -#************************************************************************* -# -# 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. -# -#************************************************************************* - -.IF "$(OOO_JUNIT_JAR)" == "" -nothing .PHONY: - @echo ----------------------------------------------------- - @echo - JUnit not available, not building anything - @echo ----------------------------------------------------- -.ELSE - -PRJ = ../../.. -PRJNAME = dbaccess -TARGET = qa_complex_dbaccess -PACKAGE = complex/dbaccess - -# --- Settings ----------------------------------------------------- -.INCLUDE: settings.mk - -#----- compile .java files ----------------------------------------- - -JARFILES = OOoRunner.jar ridl.jar test.jar juh.jar unoil.jar ConnectivityTools.jar -EXTRAJARFILES = $(OOO_JUNIT_JAR) - -#----- create a jar from compiled files ---------------------------- - -JARTARGET = $(TARGET).jar - -#----- Java files -------------------------------------------------- - -# here store only Files which contain a @Test -JAVATESTFILES = \ - ApplicationController.java \ - Beamer.java \ - DataSource.java \ - DatabaseDocument.java \ - Parser.java \ - PropertyBag.java \ - Query.java \ - QueryInQuery.java \ - RowSet.java \ - SingleSelectQueryComposer.java \ - UISettings.java \ - CopyTableWizard.java \ - -# put here all other files -JAVAFILES = $(JAVATESTFILES) \ - CRMBasedTestCase.java \ - CopyTableInterActionHandler.java \ - DatabaseApplication.java \ - FileHelper.java \ - RowSetEventListener.java \ - TestCase.java \ - - -# Sample how to debug -# JAVAIFLAGS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,address=9003,suspend=y - -# --- Targets ------------------------------------------------------ - -.INCLUDE: target.mk - -ALL : ALLTAR - -# --- subsequent tests --------------------------------------------- - -.IF "$(OOO_SUBSEQUENT_TESTS)" != "" - -.INCLUDE: installationtest.mk - -ALLTAR : javatest - - # Sample how to debug - # JAVAIFLAGS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,address=9003,suspend=y - -.END # "$(OOO_SUBSEQUENT_TESTS)" == "" - -.END # ELSE "$(OOO_JUNIT_JAR)" != "" - |