INTEGRATION: CWS xformsdocmodify (1.1.2); FILE ADDED
2008/06/09 11:05:17 fs 1.1.2.3: check whether the ExternalData setting survives reloading 2008/06/05 21:26:13 fs 1.1.2.2: finished the test for #i90243# 2008/06/04 20:59:14 fs 1.1.2.1: (not yet finished) test for settings of XML form documents (#i90363)
This commit is contained in:
parent
8c17bebc67
commit
042d1d35ea
1 changed files with 226 additions and 0 deletions
226
forms/qa/integration/forms/XMLFormSettings.java
Normal file
226
forms/qa/integration/forms/XMLFormSettings.java
Normal file
|
@ -0,0 +1,226 @@
|
||||||
|
/*************************************************************************
|
||||||
|
*
|
||||||
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
|
*
|
||||||
|
* Copyright 2008 by Sun Microsystems, Inc.
|
||||||
|
*
|
||||||
|
* OpenOffice.org - a multi-platform office productivity suite
|
||||||
|
*
|
||||||
|
* $RCSfile: XMLFormSettings.java,v $
|
||||||
|
* $Revision: 1.2 $
|
||||||
|
*
|
||||||
|
* This file is part of OpenOffice.org.
|
||||||
|
*
|
||||||
|
* OpenOffice.org is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU Lesser General Public License version 3
|
||||||
|
* only, as published by the Free Software Foundation.
|
||||||
|
*
|
||||||
|
* OpenOffice.org is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU Lesser General Public License version 3 for more details
|
||||||
|
* (a copy is included in the LICENSE file that accompanied this code).
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Lesser General Public License
|
||||||
|
* version 3 along with OpenOffice.org. If not, see
|
||||||
|
* <http://www.openoffice.org/license.html>
|
||||||
|
* for a copy of the LGPLv3 License.
|
||||||
|
*
|
||||||
|
************************************************************************/
|
||||||
|
|
||||||
|
package integration.forms;
|
||||||
|
|
||||||
|
import com.sun.star.beans.PropertyValue;
|
||||||
|
import com.sun.star.beans.XPropertySet;
|
||||||
|
import com.sun.star.form.binding.IncompatibleTypesException;
|
||||||
|
import com.sun.star.form.binding.XBindableValue;
|
||||||
|
import com.sun.star.form.binding.XValueBinding;
|
||||||
|
import com.sun.star.frame.XStorable;
|
||||||
|
import com.sun.star.io.IOException;
|
||||||
|
import com.sun.star.lang.XMultiServiceFactory;
|
||||||
|
import com.sun.star.uno.UnoRuntime;
|
||||||
|
import com.sun.star.util.CloseVetoException;
|
||||||
|
import com.sun.star.util.XCloseable;
|
||||||
|
import com.sun.star.xml.dom.XNode;
|
||||||
|
import com.sun.star.xsd.DataTypeClass;
|
||||||
|
import java.io.File;
|
||||||
|
import org.openoffice.xforms.Instance;
|
||||||
|
import org.openoffice.xforms.Model;
|
||||||
|
import org.openoffice.xforms.XMLDocument;
|
||||||
|
|
||||||
|
public class XMLFormSettings extends complexlib.ComplexTestCase
|
||||||
|
{
|
||||||
|
private XMultiServiceFactory m_orb;
|
||||||
|
private XMLDocument m_document;
|
||||||
|
private Model m_defaultModel;
|
||||||
|
private FormLayer m_formLayer;
|
||||||
|
private XPropertySet m_stringBinding;
|
||||||
|
private XPropertySet m_booleanBinding;
|
||||||
|
private XPropertySet m_dateBinding;
|
||||||
|
|
||||||
|
/** Creates a new instance of XMLFormSettings */
|
||||||
|
public XMLFormSettings()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ------------------------------------------------------------------ */
|
||||||
|
public String[] getTestMethodNames()
|
||||||
|
{
|
||||||
|
return new String[] {
|
||||||
|
"checkExternalData"
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ------------------------------------------------------------------ */
|
||||||
|
public String getTestObjectName()
|
||||||
|
{
|
||||||
|
return "Form Control Spreadsheet Cell Binding Test";
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ------------------------------------------------------------------ */
|
||||||
|
public void before() throws java.lang.Exception
|
||||||
|
{
|
||||||
|
// create the document and assign related members
|
||||||
|
m_orb = (XMultiServiceFactory)param.getMSF();
|
||||||
|
m_document = new XMLDocument( m_orb );
|
||||||
|
m_formLayer = new FormLayer( m_document );
|
||||||
|
|
||||||
|
// create a simple structure in the DOM tree: an element with two attributes
|
||||||
|
String[] modelNames = m_document.getXFormModelNames();
|
||||||
|
m_defaultModel = m_document.getXFormModel( modelNames[0] );
|
||||||
|
Instance defaultInstance = m_defaultModel.getDefaultInstance();
|
||||||
|
XNode stringElement = defaultInstance.createElement( "stringElement" );
|
||||||
|
XNode booleanAttrib = defaultInstance.createAttribute( stringElement, "booleanAttribute", "true" );
|
||||||
|
XNode dateAttrib = defaultInstance.createAttribute( stringElement, "dateAttribute" );
|
||||||
|
|
||||||
|
assure( "booleanAttrib's parent is wrong",
|
||||||
|
UnoRuntime.areSame( stringElement, booleanAttrib.getParentNode() ) );
|
||||||
|
assure( "dateAttrib's parent is wrong",
|
||||||
|
UnoRuntime.areSame( stringElement, dateAttrib.getParentNode() ) );
|
||||||
|
|
||||||
|
// also create bindings for the element and its attributes, of the proper type
|
||||||
|
m_stringBinding = m_defaultModel.createBindingForNode( stringElement, DataTypeClass.STRING );
|
||||||
|
m_booleanBinding = m_defaultModel.createBindingForNode( booleanAttrib, DataTypeClass.BOOLEAN );
|
||||||
|
m_dateBinding = m_defaultModel.createBindingForNode( dateAttrib, DataTypeClass.DATE );
|
||||||
|
|
||||||
|
// TODO: set up the bindings so that the date bindings is relevant if and only if
|
||||||
|
// the boolean value is true
|
||||||
|
|
||||||
|
// store the document
|
||||||
|
File tempFile = File.createTempFile( "xmlforms", ".odt" );
|
||||||
|
tempFile.deleteOnExit();
|
||||||
|
String fileURL = tempFile.toURL().toExternalForm();
|
||||||
|
XStorable store = (XStorable)UnoRuntime.queryInterface( XStorable.class,
|
||||||
|
m_document.getDocument() );
|
||||||
|
store.storeAsURL( fileURL, new PropertyValue[] {} );
|
||||||
|
assure( "document still modified after saving it", !m_document.isModified() );
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ------------------------------------------------------------------ */
|
||||||
|
public void after() throws com.sun.star.uno.Exception, java.lang.Exception
|
||||||
|
{
|
||||||
|
//impl_closeDocument();
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ------------------------------------------------------------------ */
|
||||||
|
private void impl_closeDocument() throws CloseVetoException
|
||||||
|
{
|
||||||
|
if ( m_document != null )
|
||||||
|
{
|
||||||
|
XCloseable closeDoc = (XCloseable)UnoRuntime.queryInterface( XCloseable.class,
|
||||||
|
m_document.getDocument() );
|
||||||
|
closeDoc.close( true );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ------------------------------------------------------------------ */
|
||||||
|
private static void impl_bind( XPropertySet _control, XPropertySet _binding ) throws IncompatibleTypesException
|
||||||
|
{
|
||||||
|
XBindableValue bindableControl = (XBindableValue)UnoRuntime.queryInterface(
|
||||||
|
XBindableValue.class, _control );
|
||||||
|
XValueBinding binding = (XValueBinding)UnoRuntime.queryInterface(
|
||||||
|
XValueBinding.class, _binding );
|
||||||
|
bindableControl.setValueBinding( binding );
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ------------------------------------------------------------------ */
|
||||||
|
/** checks if master-detail relationships including multiple keys work
|
||||||
|
*/
|
||||||
|
public void checkExternalData() throws com.sun.star.uno.Exception, java.lang.Exception
|
||||||
|
{
|
||||||
|
// some controls
|
||||||
|
XPropertySet stringControl = m_formLayer.createLabeledControl(
|
||||||
|
"DatabaseTextField", "Task", 10, 10, 6 );
|
||||||
|
impl_bind( stringControl, m_stringBinding );
|
||||||
|
|
||||||
|
XPropertySet booleanControl = m_formLayer.createControlAndShape(
|
||||||
|
"DatabaseCheckBox", 35, 18, 25, 6 );
|
||||||
|
booleanControl.setPropertyValue( "Label", "has due date" );
|
||||||
|
impl_bind( booleanControl, m_booleanBinding );
|
||||||
|
|
||||||
|
XPropertySet dateControl = m_formLayer.createControlAndShape(
|
||||||
|
"DatabaseDateField", 40, 26, 25, 6 );
|
||||||
|
dateControl.setPropertyValue( "Dropdown", new Boolean( true ) );
|
||||||
|
impl_bind( dateControl, m_dateBinding );
|
||||||
|
|
||||||
|
m_document.getCurrentView( ).toggleFormDesignMode( );
|
||||||
|
|
||||||
|
// ensure the model is set up as containing "document-internal" data
|
||||||
|
m_defaultModel.setIsDocumentInternalData( true );
|
||||||
|
assure( "setting up the document to contain 'internal data' failed",
|
||||||
|
m_defaultModel.getIsDocumentInternalData() );
|
||||||
|
impl_storeDocument();
|
||||||
|
|
||||||
|
// okay, here we go ...
|
||||||
|
// what this particular test is about is to check whether we can set up the model
|
||||||
|
// so that any changes to any controls bound to any data in this model actually marks
|
||||||
|
// the containing document as modified
|
||||||
|
m_formLayer.userTextInput( stringControl, "don't break this test" );
|
||||||
|
assure( "model data changed, but document is not modified",
|
||||||
|
m_document.isModified() );
|
||||||
|
|
||||||
|
// TODO: do this with the other control/binding types, too
|
||||||
|
|
||||||
|
// no the other way round: set up the model to contain "document-external" data
|
||||||
|
m_defaultModel.setIsDocumentInternalData( false );
|
||||||
|
assure( "setting up the document to contain 'internal data' failed",
|
||||||
|
!m_defaultModel.getIsDocumentInternalData() );
|
||||||
|
impl_storeDocument();
|
||||||
|
|
||||||
|
// and check that now, changes in the controls / model data are not reflected in
|
||||||
|
// document's modified state
|
||||||
|
m_formLayer.userTextInput( stringControl, "(or any other test, that is)" );
|
||||||
|
assure( "model data changed, but document is modified",
|
||||||
|
!m_document.isModified() );
|
||||||
|
|
||||||
|
// .................................................................
|
||||||
|
// finally, check whether the flag survives loading and saving
|
||||||
|
Model internalDataModel = m_document.addXFormModel( "internalData" );
|
||||||
|
internalDataModel.setIsDocumentInternalData( true );
|
||||||
|
Model externalDataModel = m_document.addXFormModel( "externalData" );
|
||||||
|
externalDataModel.setIsDocumentInternalData( false );
|
||||||
|
|
||||||
|
impl_storeDocument();
|
||||||
|
m_document.reload();
|
||||||
|
|
||||||
|
internalDataModel = m_document.getXFormModel( "internalData" );
|
||||||
|
externalDataModel = m_document.getXFormModel( "externalData" );
|
||||||
|
|
||||||
|
assure( "setting up a model to contain 'internal data' did not survive reloading",
|
||||||
|
internalDataModel.getIsDocumentInternalData() );
|
||||||
|
assure( "setting up a model to contain 'external data' did not survive reloading",
|
||||||
|
!externalDataModel.getIsDocumentInternalData() );
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ------------------------------------------------------------------ */
|
||||||
|
/** stores our document
|
||||||
|
* @throws com.sun.star.io.IOException
|
||||||
|
*/
|
||||||
|
private void impl_storeDocument() throws IOException
|
||||||
|
{
|
||||||
|
XStorable store = (XStorable)UnoRuntime.queryInterface( XStorable.class,
|
||||||
|
m_document.getDocument() );
|
||||||
|
store.store();
|
||||||
|
assure( "document still modified after saving it", !m_document.isModified() );
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in a new issue