#!/usr/bin/perl ################################################################################ # File: .................. 04testArraySerialization.t # Location: .............. /eBay-API/t # Original Author: ....... Milenko Milanovic # Last Modified By: ...... Jeff Nokes # Last Modified: ......... 07/13/2006 @ 12:10 # # Description: # Simple test installation script that will attempt to perform object # serializtion, deserialization on array datatype instances, and compare # their structures. # ################################################################################ BEGIN { # Debug use only #diag("04.begin - \$::REQUIRED_MODS = $::REQUIRED_MODS"); # Required Includes # ------------------------------------------------------------------------------ use strict; use warnings; use Test::More tests => 6; # 6 distinct tests. SKIP: { # Check for the existence of any dependencies on other modules/classes. eval { require Data::Dumper; require eBay::API::XML::DataType::ItemType; require eBay::API::XML::DataType::Enum::BuyerPaymentMethodCodeType; }; # If there was an error given by the eval above, then the user must have # skipped the auto-generation phase, or there is some other module # dependency that is breaking things, thus we should skip this test. if ($@) { skip( "SKIP 1: Most likely dependency on another module not found: [ $@ ]\n\n", 2 ); }# end if else { $::REQUIRED_MODS=1; } # If we got this far, we must be OK to do the test, test required includes. use Data::Dumper; # Tests 1-2 use_ok('eBay::API::XML::DataType::ItemType'); use_ok('eBay::API::XML::DataType::Enum::BuyerPaymentMethodCodeType'); } # end SKIP block } # end BEGIN block # Debug use only #diag("04.middle - \$::REQUIRED_MODS = $::REQUIRED_MODS"); SKIP: { # If there was an error given by the eval above, then the user must have # skipped the auto-generation phase, or there is some other module # dependency that is breaking things, thus we should skip this test. if (!$::REQUIRED_MODS) { skip( "SKIP 2: Requred modules were not found to run the next test, skipping.\n\n", 4 ); }# end if # Local Variables my @outPaymentMethods; my $pItem; my $xml; my $pNewItem; my @inPaymentMethods = ( eBay::API::XML::DataType::Enum::BuyerPaymentMethodCodeType::PaymentSeeDescription, eBay::API::XML::DataType::Enum::BuyerPaymentMethodCodeType::MOCC, eBay::API::XML::DataType::Enum::BuyerPaymentMethodCodeType::COD, ); # Test when argument is an array. # Instantiate an ItemType object. $pItem = eBay::API::XML::DataType::ItemType->new(); # Set some properties with an array type. $pItem->setPaymentMethods(@inPaymentMethods); # Serialize the object. $xml = $pItem->serialize('item'); # Instantiate a new ItemType object. $pNewItem = eBay::API::XML::DataType::ItemType->new(); # Deserialize the new object with the original objects serialized XML. $pNewItem->deserialize('sRawXmlString' => $xml); # Get the array type properties from the new object. @outPaymentMethods = $pNewItem->getPaymentMethods(); # Test 3 - Compare the two array type property object structures. is_deeply( [sort @outPaymentMethods], [sort @inPaymentMethods], 'argument is an array' ); # Test when argument is a reference to an array. # Instanitate an ItemType object. $pItem = eBay::API::XML::DataType::ItemType->new(); # Set some properties with an array reference type. $pItem->setPaymentMethods(\@inPaymentMethods); # Serialize the object. $xml = $pItem->serialize('item'); # Instantiate a new ItemType object. $pNewItem = eBay::API::XML::DataType::ItemType->new(); # Deserialize the new object with the original objects serialized XML. $pNewItem->deserialize('sRawXmlString' => $xml); # Get the array type properties from the new object. @outPaymentMethods = $pNewItem->getPaymentMethods(); # Test 4 - Compare the two array type property object structures. is_deeply( [sort @outPaymentMethods], [sort @inPaymentMethods], 'argument is a reference to an array' ); # Test when argument is a scalar, it has to be converted internaly into an array. # Instanitate an ItemType object. $pItem = eBay::API::XML::DataType::ItemType->new(); # Set some scalar properties. my $code = eBay::API::XML::DataType::Enum::BuyerPaymentMethodCodeType::COD; $pItem->setPaymentMethods($code); # Serialize the object. $xml = $pItem->serialize('item'); # Instantiate a new ItemType object. $pNewItem = eBay::API::XML::DataType::ItemType->new(); # Deserialize the new object with the original objects serialized XML. $pNewItem->deserialize('sRawXmlString' => $xml); # Get the array type properties from the new object. @outPaymentMethods = $pNewItem->getPaymentMethods(); # Test 5-6: Make sure the scalar property we set originally is the only # property still, and it was retrieved as an array. ok( (scalar @outPaymentMethods) == 1, 'one element - count'); is($outPaymentMethods[0], $code , 'one element - value'); }# end SKIP block # Debug use only #diag("04.end - \$::REQUIRED_MODS = $::REQUIRED_MODS");