diff options
Diffstat (limited to 'forms/qa/integration/forms/FormControlTest.java')
-rw-r--r-- | forms/qa/integration/forms/FormControlTest.java | 147 |
1 files changed, 95 insertions, 52 deletions
diff --git a/forms/qa/integration/forms/FormControlTest.java b/forms/qa/integration/forms/FormControlTest.java index ca5fcea84c9d..91193ff479e5 100644 --- a/forms/qa/integration/forms/FormControlTest.java +++ b/forms/qa/integration/forms/FormControlTest.java @@ -29,41 +29,33 @@ ************************************************************************/ package integration.forms; -import com.sun.star.uno.UnoRuntime; -import com.sun.star.uno.XNamingService; - +import com.sun.star.awt.XImageProducer; +import com.sun.star.beans.PropertyValue; +import com.sun.star.beans.XPropertySet; import com.sun.star.container.XNameAccess; - +import com.sun.star.form.XFormController; +import com.sun.star.form.XImageProducerSupplier; +import com.sun.star.frame.XDispatch; +import com.sun.star.lang.EventObject; import com.sun.star.lang.XMultiServiceFactory; - -import com.sun.star.util.XCloseable; -import com.sun.star.util.XURLTransformer; -import com.sun.star.util.URL; - import com.sun.star.sdb.CommandType; -import com.sun.star.sdbc.XDataSource; +import com.sun.star.sdb.SQLErrorEvent; +import com.sun.star.sdb.XSQLErrorBroadcaster; +import com.sun.star.sdb.XSQLErrorListener; import com.sun.star.sdbc.XConnection; +import com.sun.star.sdbc.XDataSource; import com.sun.star.sdbc.XResultSet; import com.sun.star.sdbc.XResultSetUpdate; - -import com.sun.star.form.XImageProducerSupplier; - -import com.sun.star.beans.XPropertySet; -import com.sun.star.beans.PropertyValue; - -import com.sun.star.frame.XDispatch; - -import com.sun.star.awt.XImageProducer; - -import com.sun.star.accessibility.XAccessible; -import com.sun.star.accessibility.XAccessibleEditableText; - +import com.sun.star.uno.UnoRuntime; +import com.sun.star.uno.XNamingService; +import com.sun.star.util.URL; +import com.sun.star.util.XCloseable; +import com.sun.star.util.XURLTransformer; import connectivity.tools.HsqlDatabase; +import java.io.FileOutputStream; -import java.util.*; -import java.io.*; -public class FormControlTest extends complexlib.ComplexTestCase +public class FormControlTest extends complexlib.ComplexTestCase implements XSQLErrorListener { private static String s_tableName = "CTC_form_controls"; @@ -74,7 +66,9 @@ public class FormControlTest extends complexlib.ComplexTestCase private DocumentHelper m_document; private FormLayer m_formLayer; private XPropertySet m_masterForm; + private XFormController m_masterFormController; private String m_sImageURL; + private SQLErrorEvent m_mostRecentErrorEvent; private final String m_dataSourceName = "integration.forms.FormControlTest"; @@ -87,7 +81,8 @@ public class FormControlTest extends complexlib.ComplexTestCase "checkImageControl", "checkCrossUpdates_checkBox", "checkCrossUpdates_radioButton", - "checkRowUpdates" + "checkRowUpdates", + "checkEmptyIsNull" }; } @@ -370,11 +365,7 @@ public class FormControlTest extends complexlib.ComplexTestCase { // start with inserting a new record moveToInsertRow(); - if ( !verifyCleanInsertRow() ) - { - failed( "insert row not in expected clean state" ); - return; - } + assure( "insert row not in expected clean state", verifyCleanInsertRow() ); userTextInput( "ID", "3", true ); userTextInput( "f_integer", "729", true ); @@ -404,6 +395,7 @@ public class FormControlTest extends complexlib.ComplexTestCase userTextInput( "ID", "4", true ); userTextInput( "f_integer", "618", true ); userTextInput( "f_text", "yet another stupid, meaningless text", true ); + userTextInput( "f_required_text", "this must not be NULL", true ); userTextInput( "f_decimal", "4562", true ); userTextInput( "f_date", "26.03.2004", true ); userTextInput( "f_time", "17:05:00", true ); @@ -429,6 +421,31 @@ public class FormControlTest extends complexlib.ComplexTestCase } /* ------------------------------------------------------------------ */ + /** checks the "ConvertEmptyToNull" property behavior of an edit control + * + */ + public void checkEmptyIsNull() throws com.sun.star.uno.Exception, java.lang.Exception + { + // start with inserting a new record + moveToInsertRow(); + assure( "insert row not in expected clean state", verifyCleanInsertRow() ); + + // make an input in any field, but leave the edit control which is bound to a required field + // empty + userTextInput( "ID", "5", true ); + userTextInput( "f_text", "more text", true ); + + // this should *not* fail. Even if we did not input anything into the control bound to the + // f_required_text column, this control's reset (done when moving to the insertion row) is + // expected to write an empty string into its bound column, since its EmptyIsNULL property + // is set to FALSE + // (#i92471#) + m_mostRecentErrorEvent = null; + nextRecordByUI(); + assure( "updating an incomplete record did not work as expected", m_mostRecentErrorEvent == null ); + } + + /* ------------------------------------------------------------------ */ private boolean verifyCleanInsertRow( ) throws com.sun.star.uno.Exception, java.lang.Exception { // and check the content of the various controls @@ -477,6 +494,11 @@ public class FormControlTest extends complexlib.ComplexTestCase m_dataSource = (XDataSource)UnoRuntime.queryInterface( XDataSource.class, databaseContext.getByName( m_dataSourceName ) ); m_dataSourceProps = dbfTools.queryPropertySet( m_dataSource ); + + XPropertySet dataSourceSettings = (XPropertySet)UnoRuntime.queryInterface( XPropertySet.class, + m_dataSourceProps.getPropertyValue( "Settings" ) ); + dataSourceSettings.setPropertyValue( "FormsCheckRequiredFields", new Boolean( false ) ); + return m_dataSource != null; } @@ -499,27 +521,29 @@ public class FormControlTest extends complexlib.ComplexTestCase m_formLayer = new FormLayer( m_document ); // insert some controls - XPropertySet xIDField = m_formLayer.insertControlLine( "DatabaseNumericField", "ID", "", 3 ); - m_formLayer.insertControlLine( "DatabaseFormattedField","f_integer", "", 11 ); - m_formLayer.insertControlLine( "DatabaseTextField", "f_text", "", 19 ); - XPropertySet xDecField = m_formLayer.insertControlLine( "DatabaseNumericField", "f_decimal", "", 27 ); - m_formLayer.insertControlLine( "DatabaseDateField", "f_date", "", 35 ); - XPropertySet xTimeField = m_formLayer.insertControlLine( "DatabaseTimeField", "f_time", "", 43 ); - m_formLayer.insertControlLine( "DatabaseDateField", "f_timestamp", "_date", 51 ); - m_formLayer.insertControlLine( "DatabaseTimeField", "f_timestamp", "_time", 59 ); - XPropertySet xImageField = m_formLayer.insertControlLine( "DatabaseImageControl", "f_blob", "", 2, 67, 40 ); - m_formLayer.insertControlLine( "DatabaseTextField", "f_text_enum", "_text", 80, 25, 6 ); - XPropertySet xCheckBox = m_formLayer.insertControlLine( "DatabaseCheckBox", "f_tinyint", "", 80, 33, 6 ); - m_formLayer.insertControlLine( "DatabaseFormattedField","f_tinyint", "_format",80, 41, 6 ); - m_formLayer.insertControlLine( "DatabaseTextField", "dummy", "", 150 ); + XPropertySet xIDField = m_formLayer.insertControlLine( "DatabaseNumericField", "ID", "", 3 ); + m_formLayer.insertControlLine( "DatabaseFormattedField","f_integer", "", 11 ); + m_formLayer.insertControlLine( "DatabaseTextField", "f_text", "", 19 ); + XPropertySet xReqField = m_formLayer.insertControlLine( "DatabaseTextField", "f_required_text", "", 27 ); + m_formLayer.insertControlLine( "DatabaseNumericField", "f_decimal", "", 35 ); + m_formLayer.insertControlLine( "DatabaseDateField", "f_date", "", 43 ); + XPropertySet xTimeField = m_formLayer.insertControlLine( "DatabaseTimeField", "f_time", "", 51 ); + m_formLayer.insertControlLine( "DatabaseDateField", "f_timestamp", "_date", 59 ); + m_formLayer.insertControlLine( "DatabaseTimeField", "f_timestamp", "_time", 67 ); + XPropertySet xImageField = m_formLayer.insertControlLine( "DatabaseImageControl", "f_blob", "", 2, 75, 40 ); + m_formLayer.insertControlLine( "DatabaseTextField", "f_text_enum", "_text", 80, 25, 6 ); + XPropertySet xCheckBox = m_formLayer.insertControlLine( "DatabaseCheckBox", "f_tinyint", "", 80, 33, 6 ); + m_formLayer.insertControlLine( "DatabaseFormattedField","f_tinyint", "_format",80, 41, 6 ); + m_formLayer.insertControlLine( "DatabaseTextField", "dummy", "", 150 ); xIDField.setPropertyValue( "DecimalAccuracy", new Short( (short)0 ) ); xImageField.setPropertyValue( "ScaleImage", new Boolean( true) ); - xImageField.setPropertyValue( "Tabstop", new Boolean( true) ); + xImageField.setPropertyValue( "Tabstop", new Boolean( true ) ); xCheckBox.setPropertyValue( "TriState", new Boolean( true ) ); xCheckBox.setPropertyValue( "DefaultState", new Short( (short)2 ) ); xTimeField.setPropertyValue( "TimeFormat", new Short( (short)1 ) ); xTimeField.setPropertyValue( "TimeMax", new Integer( 23595999 ) ); + xReqField.setPropertyValue( "ConvertEmptyToNull", new Boolean( false ) ); // the logical form m_masterForm = (XPropertySet)dbfTools.getParent( xIDField, XPropertySet.class ); @@ -534,6 +558,11 @@ public class FormControlTest extends complexlib.ComplexTestCase // switch the forms into data entry mode m_document.getCurrentView( ).toggleFormDesignMode( ); + m_masterFormController = m_document.getCurrentView().getFormController( m_masterForm ); + XSQLErrorBroadcaster errorBroadcaster = (XSQLErrorBroadcaster)UnoRuntime.queryInterface( XSQLErrorBroadcaster.class, + m_masterFormController ); + errorBroadcaster.addSQLErrorListener( this ); + // set the focus to the ID control m_document.getCurrentView().grabControlFocus( xIDField ); } @@ -555,6 +584,7 @@ public class FormControlTest extends complexlib.ComplexTestCase sCreateTableStatement += "\"ID\" INTEGER NOT NULL PRIMARY KEY,"; sCreateTableStatement += "\"f_integer\" INTEGER default NULL,"; sCreateTableStatement += "\"f_text\" VARCHAR(50) default NULL,"; + sCreateTableStatement += "\"f_required_text\" VARCHAR(50) NOT NULL,"; sCreateTableStatement += "\"f_decimal\" DECIMAL(10,2) default NULL,"; sCreateTableStatement += "\"f_date\" DATE default NULL,"; sCreateTableStatement += "\"f_time\" TIME default NULL,"; @@ -570,8 +600,8 @@ public class FormControlTest extends complexlib.ComplexTestCase private String[] getSampleDataValueString( ) throws java.lang.Exception { String[] aValues = new String[] { - "1,42,'the answer',0.12,'2003-09-22','15:00:00','2003-09-23 17:15:23',NULL,'none',1", - "2,13,'the question',12.43,'2003-09-24','16:18:00','2003-09-24 08:45:12',NULL,'none',0" + "1,42,'the answer','foo',0.12,'2003-09-22','15:00:00','2003-09-23 17:15:23',NULL,'none',1", + "2,13,'the question','bar',12.43,'2003-09-24','16:18:00','2003-09-24 08:45:12',NULL,'none',0" }; return aValues; } @@ -583,8 +613,8 @@ public class FormControlTest extends complexlib.ComplexTestCase assure( "could not connect to the data source", xConn != null ); // drop the table, if it already exists - if ( !implExecuteStatement( xConn, "DROP TABLE \"" + s_tableName + "\" IF EXISTS" ) - || !implExecuteStatement( xConn, getCreateTableStatement() ) + if ( !implExecuteStatement( "DROP TABLE \"" + s_tableName + "\" IF EXISTS" ) + || !implExecuteStatement( getCreateTableStatement() ) ) { failed( "could not create the required sample table!" ); @@ -594,7 +624,7 @@ public class FormControlTest extends complexlib.ComplexTestCase String sInsertionPrefix = "INSERT INTO \"" + s_tableName + "\" VALUES ("; String[] aValues = getSampleDataValueString(); for ( int i=0; i<aValues.length; ++i ) - if ( !implExecuteStatement( xConn, sInsertionPrefix + aValues[ i ] + ")" ) ) + if ( !implExecuteStatement( sInsertionPrefix + aValues[ i ] + ")" ) ) { failed( "could not create the required sample data" ); return false; @@ -739,7 +769,7 @@ public class FormControlTest extends complexlib.ComplexTestCase /* ------------------------------------------------------------------ */ /** executes the given statement on the given connection */ - protected boolean implExecuteStatement( XConnection xConn, String sStatement ) throws java.lang.Exception + protected boolean implExecuteStatement( String sStatement ) throws java.lang.Exception { try { @@ -872,6 +902,7 @@ public class FormControlTest extends complexlib.ComplexTestCase return aBytes; } + /* ------------------------------------------------------------------ */ private byte[] getSamplePictureBytes() { byte[] aBytes = new byte[] { @@ -908,4 +939,16 @@ public class FormControlTest extends complexlib.ComplexTestCase return compareImages.imagesEqual( ); } + /* ------------------------------------------------------------------ */ + public void errorOccured( SQLErrorEvent _event ) + { + // just remember for the moment + m_mostRecentErrorEvent = _event; + } + + /* ------------------------------------------------------------------ */ + public void disposing( EventObject _event ) + { + // not interested in + } } |