summaryrefslogtreecommitdiffstats
path: root/qa/libcmis-c/test-object.cxx
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--qa/libcmis-c/test-object.cxx425
1 files changed, 425 insertions, 0 deletions
diff --git a/qa/libcmis-c/test-object.cxx b/qa/libcmis-c/test-object.cxx
new file mode 100644
index 0000000..1b7324b
--- /dev/null
+++ b/qa/libcmis-c/test-object.cxx
@@ -0,0 +1,425 @@
+/* libcmis
+ * Version: MPL 1.1 / GPLv2+ / LGPLv2+
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License or as specified alternatively below. You may obtain a copy of
+ * the License at http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * Major Contributor(s):
+ * Copyright (C) 2011 SUSE <cbosdonnat@suse.com>
+ *
+ *
+ * All Rights Reserved.
+ *
+ * For minor contributions see the git repository.
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPLv2+"), or
+ * the GNU Lesser General Public License Version 2 or later (the "LGPLv2+"),
+ * in which case the provisions of the GPLv2+ or the LGPLv2+ are applicable
+ * instead of those above.
+ */
+
+#include <cppunit/extensions/HelperMacros.h>
+#include <cppunit/TestFixture.h>
+#include <cppunit/TestAssert.h>
+
+#include <libcmis-c/allowable-actions.h>
+#include <libcmis-c/error.h>
+#include <libcmis-c/folder.h>
+#include <libcmis-c/object.h>
+#include <libcmis-c/object-type.h>
+#include <libcmis-c/property.h>
+#include <libcmis-c/property-type.h>
+#include <libcmis-c/vectors.h>
+
+#include "internals.hxx"
+#include "test-dummies.hxx"
+
+using namespace std;
+
+class ObjectTest : public CppUnit::TestFixture
+{
+ private:
+ libcmis_ObjectPtr getTested( bool triggersFaults );
+ libcmis_FolderPtr getTestFolder( );
+
+ public:
+ void getIdTest( );
+ void getNameTest( );
+ void getPathsTest( );
+ void getBaseTypeTest( );
+ void getTypeTest( );
+ void getCreatedByTest( );
+ void getCreationDateTest( );
+ void getLastModifiedByTest( );
+ void getLastModificationDateTest( );
+ void getChangeTokenTest( );
+ void isImmutableTest( );
+ void getPropertiesTest( );
+ void getPropertyTest( );
+ void getPropertyMissingTest( );
+ void updatePropertiesTest( );
+ void updatePropertiesErrorTest( );
+ void getTypeDescriptionTest( );
+ void getAllowableActionsTest( );
+ void refreshTest( );
+ void refreshErrorTest( );
+ void removeTest( );
+ void removeErrorTest( );
+ void moveTest( );
+ void moveErrorTest( );
+ void toStringTest( );
+
+ CPPUNIT_TEST_SUITE( ObjectTest );
+ CPPUNIT_TEST( getIdTest );
+ CPPUNIT_TEST( getNameTest );
+ CPPUNIT_TEST( getPathsTest );
+ CPPUNIT_TEST( getBaseTypeTest );
+ CPPUNIT_TEST( getTypeTest );
+ CPPUNIT_TEST( getCreatedByTest );
+ CPPUNIT_TEST( getCreationDateTest );
+ CPPUNIT_TEST( getLastModifiedByTest );
+ CPPUNIT_TEST( getLastModificationDateTest );
+ CPPUNIT_TEST( getChangeTokenTest );
+ CPPUNIT_TEST( isImmutableTest );
+ CPPUNIT_TEST( getPropertiesTest );
+ CPPUNIT_TEST( getPropertyTest );
+ CPPUNIT_TEST( getPropertyMissingTest );
+ CPPUNIT_TEST( updatePropertiesTest );
+ CPPUNIT_TEST( updatePropertiesErrorTest );
+ CPPUNIT_TEST( getTypeDescriptionTest );
+ CPPUNIT_TEST( getAllowableActionsTest );
+ CPPUNIT_TEST( refreshTest );
+ CPPUNIT_TEST( refreshErrorTest );
+ CPPUNIT_TEST( removeTest );
+ CPPUNIT_TEST( removeErrorTest );
+ CPPUNIT_TEST( moveTest );
+ CPPUNIT_TEST( moveErrorTest );
+ CPPUNIT_TEST( toStringTest );
+ CPPUNIT_TEST_SUITE_END( );
+};
+
+CPPUNIT_TEST_SUITE_REGISTRATION( ObjectTest );
+
+libcmis_ObjectPtr ObjectTest::getTested( bool triggersFaults )
+{
+ libcmis_ObjectPtr result = new libcmis_object( );
+ libcmis::ObjectPtr handle( new dummies::Object( triggersFaults ) );
+ result->handle = handle;
+
+ return result;
+}
+
+libcmis_FolderPtr ObjectTest::getTestFolder( )
+{
+ libcmis_FolderPtr result = new libcmis_folder( );
+ libcmis::FolderPtr handle( new dummies::Folder( false, false ) );
+ result->handle = handle;
+
+ return result;
+}
+
+void ObjectTest::getIdTest( )
+{
+ libcmis_ObjectPtr tested = getTested( false );
+ char* actual = libcmis_object_getId( tested );
+ CPPUNIT_ASSERT_EQUAL( string( "Object::Id" ), string( actual ) );
+ free( actual );
+ libcmis_object_free( tested );
+}
+
+void ObjectTest::getNameTest( )
+{
+ libcmis_ObjectPtr tested = getTested( false );
+ char* actual = libcmis_object_getName( tested );
+ CPPUNIT_ASSERT_EQUAL( string( "Object::Name" ), string( actual ) );
+ free( actual );
+ libcmis_object_free( tested );
+}
+
+void ObjectTest::getPathsTest( )
+{
+ libcmis_ObjectPtr tested = getTested( false );
+ libcmis_vector_string_Ptr actual = libcmis_object_getPaths( tested );
+ CPPUNIT_ASSERT_EQUAL( size_t( 2 ), libcmis_vector_string_size( actual ) );
+ CPPUNIT_ASSERT_EQUAL(
+ string( "/Path1/" ),
+ string( libcmis_vector_string_get( actual, 0 ) ) );
+ libcmis_vector_string_free( actual );
+ libcmis_object_free( tested );
+}
+
+void ObjectTest::getBaseTypeTest( )
+{
+ libcmis_ObjectPtr tested = getTested( false );
+ char* actual = libcmis_object_getBaseType( tested );
+ CPPUNIT_ASSERT_EQUAL( string( "Object::BaseType" ), string( actual ) );
+ free( actual );
+ libcmis_object_free( tested );
+}
+
+void ObjectTest::getTypeTest( )
+{
+ libcmis_ObjectPtr tested = getTested( false );
+ char* actual = libcmis_object_getType( tested );
+ CPPUNIT_ASSERT_EQUAL( string( "Object::Type" ), string( actual ) );
+ free( actual );
+ libcmis_object_free( tested );
+}
+
+void ObjectTest::getCreatedByTest( )
+{
+ libcmis_ObjectPtr tested = getTested( false );
+ char* actual = libcmis_object_getCreatedBy( tested );
+ CPPUNIT_ASSERT_EQUAL( string( "Object::CreatedBy" ), string( actual ) );
+ free( actual );
+ libcmis_object_free( tested );
+}
+
+void ObjectTest::getCreationDateTest( )
+{
+ libcmis_ObjectPtr tested = getTested( false );
+ time_t actual = libcmis_object_getCreationDate( tested );
+ CPPUNIT_ASSERT( 0 != actual );
+ libcmis_object_free( tested );
+}
+
+void ObjectTest::getLastModifiedByTest( )
+{
+ libcmis_ObjectPtr tested = getTested( false );
+ char* actual = libcmis_object_getLastModifiedBy( tested );
+ CPPUNIT_ASSERT_EQUAL( string( "Object::LastModifiedBy" ), string( actual ) );
+ free( actual );
+ libcmis_object_free( tested );
+}
+
+void ObjectTest::getLastModificationDateTest( )
+{
+ libcmis_ObjectPtr tested = getTested( false );
+ time_t actual = libcmis_object_getLastModificationDate( tested );
+ CPPUNIT_ASSERT( 0 != actual );
+ libcmis_object_free( tested );
+}
+
+void ObjectTest::getChangeTokenTest( )
+{
+ libcmis_ObjectPtr tested = getTested( false );
+ char* actual = libcmis_object_getChangeToken( tested );
+ CPPUNIT_ASSERT_EQUAL( string( "Object::ChangeToken" ), string( actual ) );
+ free( actual );
+ libcmis_object_free( tested );
+}
+
+void ObjectTest::isImmutableTest( )
+{
+ libcmis_ObjectPtr tested = getTested( false );
+ CPPUNIT_ASSERT( libcmis_object_isImmutable( tested ) );
+ libcmis_object_free( tested );
+}
+
+void ObjectTest::getPropertiesTest( )
+{
+ libcmis_ObjectPtr tested = getTested( false );
+ libcmis_vector_property_Ptr actual = libcmis_object_getProperties( tested );
+ CPPUNIT_ASSERT_EQUAL( size_t( 1 ), libcmis_vector_property_size( actual ) );
+ libcmis_vector_property_free( actual );
+ libcmis_object_free( tested );
+}
+
+void ObjectTest::getPropertyTest( )
+{
+ libcmis_ObjectPtr tested = getTested( false );
+ const char* id = "Property1";
+ libcmis_PropertyPtr actual = libcmis_object_getProperty( tested, id );
+ CPPUNIT_ASSERT( NULL != actual );
+ libcmis_property_free( actual );
+ libcmis_object_free( tested );
+}
+
+void ObjectTest::getPropertyMissingTest( )
+{
+ libcmis_ObjectPtr tested = getTested( false );
+ const char* id = "MissingProperty";
+ libcmis_PropertyPtr actual = libcmis_object_getProperty( tested, id );
+ CPPUNIT_ASSERT( NULL == actual );
+ libcmis_property_free( actual );
+ libcmis_object_free( tested );
+}
+
+void ObjectTest::updatePropertiesTest( )
+{
+ libcmis_ObjectPtr tested = getTested( false );
+ CPPUNIT_ASSERT_MESSAGE( "Timestamp not set to 0 initially", 0 == libcmis_object_getRefreshTimestamp( tested ) );
+ libcmis_ErrorPtr error = libcmis_error_create( );
+
+ // Create the changed properties map
+ libcmis_vector_property_Ptr newProperties = libcmis_vector_property_create( );
+ libcmis_ObjectTypePtr objectType = libcmis_object_getTypeDescription( tested );
+ libcmis_PropertyTypePtr propertyType = libcmis_object_type_getPropertyType( objectType, "cmis:Property2" );
+ size_t size = 2;
+ const char** values = new const char*[size];
+ values[0] = "Value 1";
+ values[1] = "Value 2";
+ libcmis_PropertyPtr newProperty = libcmis_property_create( propertyType, values, size );
+ delete[ ] values;
+ libcmis_vector_property_append( newProperties, newProperty );
+
+ // Update the properties (method under test)
+ libcmis_ObjectPtr updated = libcmis_object_updateProperties( tested, newProperties, error );
+
+ // Checks
+ CPPUNIT_ASSERT_MESSAGE( "Timestamp not updated", 0 != libcmis_object_getRefreshTimestamp( tested ) );
+ CPPUNIT_ASSERT( updated != NULL );
+
+ // Free it all
+ libcmis_object_free( updated );
+ libcmis_property_free( newProperty );
+ libcmis_property_type_free( propertyType );
+ libcmis_object_type_free( objectType );
+ libcmis_vector_property_free( newProperties );
+ libcmis_error_free( error );
+ libcmis_object_free( tested );
+}
+
+void ObjectTest::updatePropertiesErrorTest( )
+{
+ libcmis_ObjectPtr tested = getTested( true );
+ CPPUNIT_ASSERT_MESSAGE( "Timestamp not set to 0 initially", 0 == libcmis_object_getRefreshTimestamp( tested ) );
+ libcmis_ErrorPtr error = libcmis_error_create( );
+
+ // Create the changed properties map
+ libcmis_vector_property_Ptr newProperties = libcmis_vector_property_create( );
+ libcmis_ObjectTypePtr objectType = libcmis_object_getTypeDescription( tested );
+ libcmis_PropertyTypePtr propertyType = libcmis_object_type_getPropertyType( objectType, "cmis:Property2" );
+ size_t size = 2;
+ const char** values = new const char*[size];
+ values[0] = "Value 1";
+ values[1] = "Value 2";
+ libcmis_PropertyPtr newProperty = libcmis_property_create( propertyType, values, size );
+ delete[ ] values;
+ libcmis_vector_property_append( newProperties, newProperty );
+
+ // Update the properties (method under test)
+ libcmis_ObjectPtr updated = libcmis_object_updateProperties( tested, newProperties, error );
+
+ // Checks
+ CPPUNIT_ASSERT( updated == NULL );
+ const char* actualMessage = libcmis_error_getMessage( error );
+ CPPUNIT_ASSERT( !string( actualMessage ).empty( ) );
+
+ // Free it all
+ libcmis_object_free( updated );
+ libcmis_property_free( newProperty );
+ libcmis_property_type_free( propertyType );
+ libcmis_object_type_free( objectType );
+ libcmis_vector_property_free( newProperties );
+ libcmis_error_free( error );
+ libcmis_object_free( tested );
+}
+
+void ObjectTest::getTypeDescriptionTest( )
+{
+ libcmis_ObjectPtr tested = getTested( false );
+ libcmis_ObjectTypePtr actual = libcmis_object_getTypeDescription( tested );
+ char* actualId = libcmis_object_type_getId( actual );
+ CPPUNIT_ASSERT( !string( actualId ).empty( ) );
+ free( actualId );
+ libcmis_object_type_free( actual );
+ libcmis_object_free( tested );
+}
+
+void ObjectTest::getAllowableActionsTest( )
+{
+ libcmis_ObjectPtr tested = getTested( false );
+ libcmis_AllowableActionsPtr actual = libcmis_object_getAllowableActions( tested );
+ CPPUNIT_ASSERT( libcmis_allowable_actions_isDefined( actual, libcmis_GetFolderParent ) );
+ libcmis_allowable_actions_free( actual );
+ libcmis_object_free( tested );
+}
+
+void ObjectTest::refreshTest( )
+{
+ libcmis_ObjectPtr tested = getTested( false );
+ CPPUNIT_ASSERT_MESSAGE( "Timestamp not set to 0 initially", 0 == libcmis_object_getRefreshTimestamp( tested ) );
+ libcmis_ErrorPtr error = libcmis_error_create( );
+ libcmis_object_refresh( tested, error );
+ CPPUNIT_ASSERT_MESSAGE( "Timestamp not updated", 0 != libcmis_object_getRefreshTimestamp( tested ) );
+ libcmis_error_free( error );
+ libcmis_object_free( tested );
+}
+
+void ObjectTest::refreshErrorTest( )
+{
+ libcmis_ObjectPtr tested = getTested( true );
+ CPPUNIT_ASSERT_MESSAGE( "Timestamp not set to 0 initially", 0 == libcmis_object_getRefreshTimestamp( tested ) );
+ libcmis_ErrorPtr error = libcmis_error_create( );
+ libcmis_object_refresh( tested, error );
+ const char* actualMessage = libcmis_error_getMessage( error );
+ CPPUNIT_ASSERT( !string( actualMessage ).empty( ) );
+ libcmis_error_free( error );
+ libcmis_object_free( tested );
+}
+
+void ObjectTest::removeTest( )
+{
+ libcmis_ObjectPtr tested = getTested( false );
+ CPPUNIT_ASSERT_MESSAGE( "Timestamp not set to 0 initially", 0 == libcmis_object_getRefreshTimestamp( tested ) );
+ libcmis_ErrorPtr error = libcmis_error_create( );
+ libcmis_object_remove( tested, true, error );
+ CPPUNIT_ASSERT_MESSAGE( "Timestamp not updated", 0 != libcmis_object_getRefreshTimestamp( tested ) );
+ libcmis_error_free( error );
+ libcmis_object_free( tested );
+}
+
+void ObjectTest::removeErrorTest( )
+{
+ libcmis_ObjectPtr tested = getTested( true );
+ CPPUNIT_ASSERT_MESSAGE( "Timestamp not set to 0 initially", 0 == libcmis_object_getRefreshTimestamp( tested ) );
+ libcmis_ErrorPtr error = libcmis_error_create( );
+ libcmis_object_remove( tested, true, error );
+ const char* actualMessage = libcmis_error_getMessage( error );
+ CPPUNIT_ASSERT( !string( actualMessage ).empty( ) );
+ libcmis_error_free( error );
+ libcmis_object_free( tested );
+}
+
+void ObjectTest::moveTest( )
+{
+ libcmis_ObjectPtr tested = getTested( false );
+ CPPUNIT_ASSERT_MESSAGE( "Timestamp not set to 0 initially", 0 == libcmis_object_getRefreshTimestamp( tested ) );
+ libcmis_ErrorPtr error = libcmis_error_create( );
+
+ // Move the object from source to dest (tested method)
+ libcmis_FolderPtr source = getTestFolder( );
+ libcmis_FolderPtr dest = getTestFolder( );
+ libcmis_object_move( tested, source, dest, error );
+
+ // Check
+ CPPUNIT_ASSERT_MESSAGE( "Timestamp not updated", 0 != libcmis_object_getRefreshTimestamp( tested ) );
+
+ // Free it all
+ libcmis_folder_free( dest );
+ libcmis_folder_free( source );
+ libcmis_error_free( error );
+ libcmis_object_free( tested );
+}
+
+void ObjectTest::moveErrorTest( )
+{
+}
+
+void ObjectTest::toStringTest( )
+{
+ libcmis_ObjectPtr tested = getTested( false );
+ char* actual = libcmis_object_toString( tested );
+ CPPUNIT_ASSERT_EQUAL( string( "Object::toString" ), string( actual ) );
+ free( actual );
+ libcmis_object_free( tested );
+}