diff options
Diffstat (limited to 'shell/source/unix/exec/urltest.cxx')
-rw-r--r-- | shell/source/unix/exec/urltest.cxx | 151 |
1 files changed, 151 insertions, 0 deletions
diff --git a/shell/source/unix/exec/urltest.cxx b/shell/source/unix/exec/urltest.cxx new file mode 100644 index 000000000000..1de12766e650 --- /dev/null +++ b/shell/source/unix/exec/urltest.cxx @@ -0,0 +1,151 @@ +/************************************************************************* + * + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * Copyright 2000, 2010 Oracle and/or its affiliates. + * + * OpenOffice.org - a multi-platform office productivity suite + * + * 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. + * + ************************************************************************/ + +#include "shellexec.hxx" + +#include <osl/process.h> + +#include <stdio.h> +#include <limits.h> +#include <string.h> +#include <strings.h> + +// ----------------------------------------------------------------------- + +int main(int argc, const char *argv[]) +{ + int ret = 0; + + if( argc != 2 ) + { + fprintf(stderr, "Usage: urltest <urllist>\n"); + return -1; + } + + FILE * fp = fopen( argv[1], "r" ); + if( NULL == fp ) + { + perror( argv[1] ); + return -1; + } + + // expect urltest.sh beside this binary + char line[LINE_MAX]; + size_t len = strlen(argv[0]); + strcpy( line, argv[0] ); + strcpy( line + len, ".sh " ); + len += 4; + + unsigned int errors = 0; + + // read url(s) to test from file + char url[512]; + while( NULL != fgets(url, sizeof(url), fp)) + { + // remove trailing line break + strtok( url, "\r\n" ); + + printf( "Passing URL: %s\n", url ); + + // test the encoding functionality from shellexec.cxx + rtl::OString aURL( url ); + rtl::OStringBuffer aBuffer; + escapeForShell(aBuffer, aURL); + + // append encoded URL as (only) parameter to the script + strcpy( line + len, aBuffer.getStr() ); + + printf( "Command line: %s\n", line ); + + FILE * pipe = popen( line, "r" ); + if( NULL != pipe ) + { + char buffer[BUFSIZ]; + + // initialize buffer with '\0' + memset(buffer, '\0', BUFSIZ); + + // read the output of the script + if(NULL == fgets( buffer, BUFSIZ, pipe)) + { + perror("FAILED: output of script could not be read"); + printf( "\n"); + ++errors; + continue; + } + + // remove trailing line break again + strtok( buffer, "\r\n" ); + + int n = pclose(pipe); + if( 0 != n ) + { + printf("FAILED: fclose returned %d\n\n", n ); + ++errors; + continue; + } + + if( 0 == strcmp( url, buffer ) ) + { + // strings are identical: good ! + printf( "OK\n\n"); + } + else + { + // compare failed + printf( "FAILED: returned string is %s\n\n", buffer); + ++errors; + } + + } + else + { + perror( line ); + ret = -2; + break; + } + } + + if( ferror( fp ) ) + { + perror( argv[1] ); + ret = -1; + } + + fclose( fp ); + + if( errors ) + { + printf( "Number of tests failing: %d\n", errors); + ret = -3; + } + else + printf( "All tests passed OK.\n" ); + + + return ret; +} |