Commit 0fbf13c3 authored by Clément Stenac's avatar Clément Stenac

* Tests for previous commit

* Improve test output
parent 23d27c9c
import unittest
import native_libvlc_test
class NativeAlgoTestCase( unittest.TestCase ):
def test_bsearch_direct( self ):
"""[Algo] Check Bsearch with simple types"""
native_libvlc_test.bsearch_direct_test()
def test_bsearch_struct( self ):
"""[Algo] Check Bsearch with structs"""
native_libvlc_test.bsearch_member_test()
def test_dict( self ):
"""[Algo] Check dictionnaries"""
native_libvlc_test.dict_test()
/*****************************************************************************
* algo.c : Algorithms test
*****************************************************************************
* Copyright (C) 2006 VideoLAN
* $Id: i18n.c 16157 2006-07-29 13:32:12Z zorglub $
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program 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 General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
*****************************************************************************/
#include "../pyunit.h"
#include <vlc/vlc.h>
/**********************************************************************
* Binary search
*********************************************************************/
PyObject *bsearch_direct_test( PyObject *self, PyObject *args )
{
#define DIRCHECK( size, initial, checked, expected ) { \
int array[size] = initial; \
int answer = -1; \
BSEARCH( array, size, , int, checked, answer ); \
ASSERT( answer == expected , "" ); }
#define ORDERED10 {0,1,2,3,4,5,6,7,8,9}
DIRCHECK( 10, ORDERED10, 0, 0 );
DIRCHECK( 10, ORDERED10, 1, 1 );
DIRCHECK( 10, ORDERED10, 2, 2 );
DIRCHECK( 10, ORDERED10, 3, 3 );
DIRCHECK( 10, ORDERED10, 4, 4 );
DIRCHECK( 10, ORDERED10, 5, 5 );
DIRCHECK( 10, ORDERED10, 6, 6 );
DIRCHECK( 10, ORDERED10, 7, 7 );
DIRCHECK( 10, ORDERED10, 8, 8 );
DIRCHECK( 10, ORDERED10, 9,9 );
DIRCHECK( 10, ORDERED10, 10, -1 );
DIRCHECK( 10, ORDERED10, -1, -1 );
/* TODO: tests on unordered arrays, odd number of elements, 1 element, 2 */
Py_INCREF( Py_None);
return Py_None;
}
struct bsearch_tester
{
int key; int value;
};
/* Lighter test, we just check correct member access, all the real testing
* has been made already */
PyObject *bsearch_member_test( PyObject *self, PyObject *args )
{
struct bsearch_tester array[] =
{
{ 0, 12 }, { 1, 22 } , { 2, 33 } , { 3, 68 } , { 4, 56 }
};
#define MEMBCHECK( checked, expected ) { \
int answer = -1; \
BSEARCH( array, 5, .key , int, checked, answer ); \
ASSERT( answer == expected , "" ); }
MEMBCHECK( 0, 0 ) ;
MEMBCHECK( 1, 1 );
MEMBCHECK( 2, 2 );
MEMBCHECK( 3, 3 );
MEMBCHECK( 4, 4 );
MEMBCHECK( 5, -1 );
Py_INCREF( Py_None);
return Py_None;
}
/**********************************************************************
* Dictionnary
*********************************************************************/
static void DumpDict( dict_t *p_dict )
{
int i = 0;
fprintf( stderr, "**** Begin Dump ****\n" );
for( i = 0 ; i < p_dict->i_entries; i++ )
{
fprintf( stderr, "Entry %i - hash %lli int %i string %s data %p\n",
i, p_dict->p_entries[i].i_hash,
p_dict->p_entries[i].i_int,
p_dict->p_entries[i].psz_string,
p_dict->p_entries[i].p_data );
}
fprintf( stderr, "**** End Dump ****\n" );
}
PyObject *dict_test( PyObject *self, PyObject *args )
{
int i42 = 42,i40 = 40,i12 = 12, i0 = 0, i00 = 0;
dict_t *p_dict = vlc_DictNew();
ASSERT( p_dict->i_entries == 0, "" );
ASSERT( p_dict->p_entries == NULL, "" );
vlc_DictInsert( p_dict, 0, NULL, (void*)(&i42) );
ASSERT( p_dict->i_entries == 1, "" );
ASSERT( p_dict->p_entries[0].p_data == (void*)(&i42), "" );
vlc_DictInsert( p_dict, 1, "42", (void*)(&i42) );
ASSERT( p_dict->i_entries == 2, "" );
ASSERT( vlc_DictGet( p_dict, 1, "42" ) == (void*)(&i42), "" );
ASSERT( vlc_DictGet( p_dict, 0, "42" ) == NULL , "");
ASSERT( vlc_DictGet( p_dict, 1, " 42" ) == NULL , "");
vlc_DictInsert( p_dict, 1, "12", (void*)(&i12) );
ASSERT( vlc_DictGet( p_dict, 1, "12") == (void*)(&i12), "" );
vlc_DictInsert( p_dict, 3, "40", (void*)(&i40) );
ASSERT( vlc_DictGet( p_dict, 3, "40") == (void*)(&i40), "" );
ASSERT( vlc_DictGet( p_dict, 1, "12") == (void*)(&i12), "" );
ASSERT( vlc_DictGet( p_dict, 1, "42") == (void*)(&i42), "" );
vlc_DictInsert( p_dict, 12, "zero-1", (void*)(&i0) );
vlc_DictInsert( p_dict, 5, "zero-0", (void*)(&i00) );
ASSERT( vlc_DictGet( p_dict, 12, "zero-1") == (void*)(&i0), "" );
ASSERT( vlc_DictGet( p_dict, 5, "zero-0") == (void*)(&i00), "" );
ASSERT( vlc_DictGet( p_dict, 12, "zero-0") == NULL, "" );
vlc_DictInsert( p_dict, 0, "12", (void*)(&i12) );
vlc_DictInsert( p_dict, 0, "thisisaverylongstringwith12", (void*)(&i12) );
ASSERT( vlc_DictGet( p_dict, 0, "thisisaverylongstringwith12" ) ==
(void*)(&i12),"" );
ASSERT( vlc_DictGet( p_dict, 0, "thisisaverylongstringwith13" ) == NULL,"");
vlc_DictClear( p_dict );
Py_INCREF( Py_None);
return Py_None;
}
......@@ -39,4 +39,6 @@ static PyMethodDef native_gc_test_methods[] = {
{ NULL, NULL, 0, NULL }
};
asserts = 0;
DECLARE_MODULE( native_gc_test )
#include "../pyunit.h"
#include "tests.h"
PyObject *init( PyObject *self, PyObject *args )
{
(void)setvbuf (stdout, NULL, _IONBF, 0);
Py_INCREF( Py_None );
return Py_None;
}
static PyMethodDef native_libvlc_test_methods[] = {
DEF_METHOD( init, "Init some stuff" )
DEF_METHOD( create_destroy, "Create and destroy" )
DEF_METHOD( exception_test, "Test Exception handling" )
DEF_METHOD( playlist_test, "Test Playlist interaction" )
......@@ -11,7 +20,12 @@ static PyMethodDef native_libvlc_test_methods[] = {
DEF_METHOD( chains_test, "Test building of chains" )
DEF_METHOD( gui_chains_test, "Test interactions between chains and GUI" )
DEF_METHOD( psz_chains_test, "Test building of chain strings" )
DEF_METHOD( bsearch_direct_test, "Test Bsearch without structure" )
DEF_METHOD( bsearch_member_test, "Test Bsearch with structure" )
DEF_METHOD( dict_test, "Test dictionnaries" )
{ NULL, NULL, 0, NULL }
};
asserts =0;
DECLARE_MODULE( native_libvlc_test )
#include "../pyunit.h"
/* Libvlc */
PyObject *exception_test( PyObject *self, PyObject *args );
PyObject *create_destroy( PyObject *self, PyObject *args );
PyObject *playlist_test( PyObject *self, PyObject *args );
PyObject *vlm_test( PyObject *self, PyObject *args );
/* Stats */
PyObject *timers_test( PyObject *self, PyObject *args );
PyObject *url_decode_test( PyObject *self, PyObject *args );
PyObject *i18n_atof_test( PyObject *self, PyObject *args );
/* Profiles */
PyObject *chains_test( PyObject *self, PyObject *args );
PyObject *gui_chains_test( PyObject *self, PyObject *args );
PyObject *psz_chains_test( PyObject *self, PyObject *args );
/* Algo */
PyObject *bsearch_direct_test( PyObject *self, PyObject *args );
PyObject *bsearch_member_test( PyObject *self, PyObject *args );
PyObject *dict_test( PyObject *self, PyObject *args );
......@@ -42,7 +42,6 @@ PyObject * test_decode (const char *in, const char *out)
PyObject *url_decode_test( PyObject *self, PyObject *args )
{
printf( "\n" );
(void)setvbuf (stdout, NULL, _IONBF, 0);
if( !test_decode ("this_should_not_be_modified_1234",
"this_should_not_be_modified_1234") ) return NULL;
......
#include <Python.h>
#define ASSERT( a, message ) if( !(a) ) { PyErr_SetString( PyExc_AssertionError, message " - " #a ); return NULL; }
extern int asserts;
#define ASSERT( a, message ) asserts++;if( !(a) ) { PyErr_SetString( PyExc_AssertionError, message " - " #a ); return NULL; }
#define DECLARE_MODULE( module ) PyMODINIT_FUNC init##module( void ) { \
Py_InitModule( #module, module##_methods ); \
}
#define ASSERT_NOEXCEPTION if( libvlc_exception_raised( &exception ) ) { \
#define ASSERT_NOEXCEPTION asserts++; if( libvlc_exception_raised( &exception ) ) { \
if( libvlc_exception_get_message( &exception ) ) PyErr_SetString( PyExc_AssertionError, libvlc_exception_get_message( &exception ) ); \
else PyErr_SetString( PyExc_AssertionError, "Exception raised" ); return NULL; }
#define ASSERT_EXCEPTION if( !libvlc_exception_raised( &exception ) ) { \
#define ASSERT_EXCEPTION asserts ++; if( !libvlc_exception_raised( &exception ) ) { \
if( libvlc_exception_get_message( &exception ) ) PyErr_SetString( PyExc_AssertionError, libvlc_exception_get_message( &exception ) ); \
else PyErr_SetString( PyExc_AssertionError, "Exception not raised" ); return NULL; }
......
......@@ -41,7 +41,8 @@ def get_ldflags():
# To compile in a local vlc tree
native_libvlc_test = Extension( 'native_libvlc_test',
sources = ['native/init.c', 'native/url.c', 'native/i18n.c',
'native/stats.c', 'native/libvlc.c', 'native/profiles.c'],
'native/stats.c', 'native/libvlc.c', 'native/profiles.c',
'native/algo.c'],
include_dirs = ['../include', '../', '/usr/win32/include' ],
extra_objects = [ '../src/.libs/libvlc.so' ],
extra_compile_args = get_cflags(),
......
......@@ -8,9 +8,11 @@ found test suites into one big test suite and run them all at once.
"""
import sys, os, re, unittest
import native_libvlc_test
def printAndRun( module ):
print "Running tests from module " + module.__name__;
# print "Running tests from module " + module.__name__;
return unittest.defaultTestLoader.loadTestsFromModule( module )
def regressionTest():
......@@ -21,6 +23,9 @@ def regressionTest():
filenameToModuleName = lambda f: os.path.splitext(f)[0]
moduleNames = map(filenameToModuleName, files)
modules = map(__import__, moduleNames)
native_libvlc_test.init()
# load = unittest.defaultTestLoader.loadTestsFromModule
load = printAndRun
return unittest.TestSuite(map(load, modules))
......
#! /bin/sh
set -e
python setup.py build
cd ..
# TODO: FIXME !!
export PYTHONPATH=$PYTHONPATH:bindings/mediacontrol-python/build/lib.linux-i686-2.3:test/build/lib.linux-i686-2.3:test/build/lib.linux-x86_64-2.3
LD_LIBRARY_PATH=src/.libs/ python test/test.py -v
export LD_LIBRARY_PATH=src/.libs/
python test/test.py -v 2>&1|perl -e \
'$bold = "\033[1m";
$grey = "\033[37m";
$green = "\033[32m";
$blue = "\033[34m";
$red = "\033[31m";
$reset = "\033[0m";
# Combinations
$info = $reset;
$ok = $green;
$err = $red.$bold;
while(<STDIN>)
{
$line = $_;
chomp $line;
if( $line =~ s/^(\[[A-z0-9]*\]\s.*)\.\.\.\sok$/$info$1\.\.\.$ok ok/g ||
$line =~ s/^(\[[A-z0-9]*\]\s.*)\.\.\.\sFAIL$/$info$1\.\.\.$err FAIL/g||
$line =~ s/^(\[[A-z0-9]*\]\s.*)\.\.\.(.)*$/$info$1\.\.\.$2/g ||
$line =~ s/^(ok)$/$ok$1/ig || $line =~ s/^FAIL$/$err FAIL/g ||
$line =~ s/(Ran\s.*)/$info$1/g )
{
print $line.$reset."\n";
}
else
{
print $grey.$line."\n";
}
}'
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment