# # Test script for the winetest program # use wine; $wine::debug = 0; ################################################################ # Declarations for functions we use in this script wine::declare( "kernel32", SetLastError => "void", GetLastError => "int", GlobalAddAtomA => "word", GlobalGetAtomNameA => "int", GetCurrentThread => "int", GetExitCodeThread => "int", GetModuleHandleA => "int", GetProcAddress => "int", lstrcatA => "ptr" ); ################################################################ # Test some simple function calls # Test string arguments $atom = GlobalAddAtomA("foo"); assert( $atom >= 0xc000 && $atom <= 0xffff ); assert( !defined($wine::err) ); # Test integer and string reference arguments $buffer = "xxxxxx"; $ret = GlobalGetAtomNameA( $atom, \$buffer, length(buffer) ); assert( !defined($wine::err) ); assert( $ret == 3 ); assert( lc $buffer eq "foo\000xx" ); # Test integer reference $code = 0; $ret = GetExitCodeThread( GetCurrentThread(), \$code ); assert( !defined($wine::err) ); assert( $ret ); assert( $code == 0x103 ); # Test string return value $str = lstrcatA( "foo\0foo", "bar" ); assert( !defined($wine::err) ); assert( $str eq "foobar" ); ################################################################ # Test last error handling SetLastError( 123 ); $ret = GetLastError(); assert( $ret == 123 ); ################################################################ # Test various error cases eval { SetLastError(1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7); }; assert( $@ =~ /Too many arguments at/ ); my $funcptr = GetProcAddress( GetModuleHandleA("kernel32"), "SetLastError" ); assert( $funcptr ); eval { wine::call_wine_API( $funcptr, 10, $wine::debug, 0); }; assert( $@ =~ /Bad return type 10 at/ ); eval { foobar(1,2,3); }; assert( $@ =~ /Function 'foobar' not declared at/ ); print "OK\n";