Contribs: correctly extract D2D headers
[vlc/asuraparaju-public.git] / test / src / misc / variables.c
blob15e7fc5d0df865ecee61f43b1601b1ec3ad618e1
1 /*****************************************************************************
2 * variables.c: test for variables
3 *****************************************************************************
4 * Copyright (C) 2009 the VideoLAN team
5 * $Id$
7 * Authors: Rémi Duraffort <ivoire@videolan.org>
9 * This program is free software; you can redistribute it and/or modify
10 * it under the terms of the GNU General Public License as published by
11 * the Free Software Foundation; either version 2 of the License, or
12 * (at your option) any later version.
14 * This program is distributed in the hope that it will be useful,
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 * GNU General Public License for more details.
19 * You should have received a copy of the GNU General Public License
20 * along with this program; if not, write to the Free Software
21 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
22 *****************************************************************************/
24 #include <limits.h>
26 #include "../../libvlc/test.h"
27 #include <../src/control/libvlc_internal.h>
29 const char *psz_var_name[] = { "a", "abcdef", "abcdefg", "abc123", "abc-123", "é€!!" };
30 const int i_var_count = 6;
31 vlc_value_t var_value[6];
34 static void test_integer( libvlc_int_t *p_libvlc )
36 int i;
37 for( i = 0; i < i_var_count; i++ )
38 var_Create( p_libvlc, psz_var_name[i], VLC_VAR_INTEGER );
40 for( i = 0; i < i_var_count; i++ )
42 var_value[i].i_int = rand();
43 var_SetInteger( p_libvlc, psz_var_name[i], var_value[i].i_int );
46 for( i = 0; i < i_var_count; i++ )
48 assert( var_GetInteger( p_libvlc, psz_var_name[i] ) == var_value[i].i_int );
49 var_IncInteger( p_libvlc, psz_var_name[i] );
50 assert( var_GetInteger( p_libvlc, psz_var_name[i] ) == var_value[i].i_int + 1 );
51 var_DecInteger( p_libvlc, psz_var_name[i] );
52 assert( var_GetInteger( p_libvlc, psz_var_name[i] ) == var_value[i].i_int );
55 for( i = 0; i < i_var_count; i++ )
56 var_Destroy( p_libvlc, psz_var_name[i] );
59 static void test_booleans( libvlc_int_t *p_libvlc )
61 int i;
62 for( i = 0; i < i_var_count; i++ )
63 var_Create( p_libvlc, psz_var_name[i], VLC_VAR_BOOL );
65 for( i = 0; i < i_var_count; i++ )
67 var_value[i].b_bool = (rand() > RAND_MAX/2);
68 var_SetBool( p_libvlc, psz_var_name[i], var_value[i].b_bool );
71 for( i = 0; i < i_var_count; i++ )
72 assert( var_GetBool( p_libvlc, psz_var_name[i] ) == var_value[i].b_bool );
74 for( i = 0; i < i_var_count; i++ )
75 var_ToggleBool( p_libvlc, psz_var_name[i] );
77 for( i = 0; i < i_var_count; i++ )
78 assert( var_GetBool( p_libvlc, psz_var_name[i] ) != var_value[i].b_bool );
80 for( i = 0; i < i_var_count; i++ )
81 var_Destroy( p_libvlc, psz_var_name[i] );
84 static void test_times( libvlc_int_t *p_libvlc )
86 int i;
87 for( i = 0; i < i_var_count; i++ )
88 var_Create( p_libvlc, psz_var_name[i], VLC_VAR_TIME );
90 for( i = 0; i < i_var_count; i++ )
92 var_value[i].i_time = rand();
93 var_SetTime( p_libvlc, psz_var_name[i], var_value[i].i_time );
96 for( i = 0; i < i_var_count; i++ )
97 assert( var_GetTime( p_libvlc, psz_var_name[i] ) == var_value[i].i_time );
99 for( i = 0; i < i_var_count; i++ )
100 var_Destroy( p_libvlc, psz_var_name[i] );
103 static void test_floats( libvlc_int_t *p_libvlc )
105 int i;
106 for( i = 0; i < i_var_count; i++ )
107 var_Create( p_libvlc, psz_var_name[i], VLC_VAR_FLOAT );
109 for( i = 0; i < i_var_count; i++ )
111 var_value[i].f_float = rand();
112 var_SetFloat( p_libvlc, psz_var_name[i], var_value[i].f_float );
115 for( i = 0; i < i_var_count; i++ )
116 assert( var_GetFloat( p_libvlc, psz_var_name[i] ) == var_value[i].f_float );
118 for( i = 0; i < i_var_count; i++ )
119 var_Destroy( p_libvlc, psz_var_name[i] );
122 static void test_strings( libvlc_int_t *p_libvlc )
124 int i;
125 char *psz_tmp;
126 for( i = 0; i < i_var_count; i++ )
127 var_Create( p_libvlc, psz_var_name[i], VLC_VAR_STRING );
129 for( i = 0; i < i_var_count; i++ )
130 var_SetString( p_libvlc, psz_var_name[i], psz_var_name[i] );
132 for( i = 0; i < i_var_count; i++ )
134 psz_tmp = var_GetString( p_libvlc, psz_var_name[i] );
135 assert( !strcmp( psz_tmp, psz_var_name[i] ) );
136 free( psz_tmp );
139 for( i = 0; i < i_var_count; i++ )
140 var_Destroy( p_libvlc, psz_var_name[i] );
143 /* Some more test for strings */
144 var_Create( p_libvlc, "bla", VLC_VAR_STRING );
145 assert( var_GetNonEmptyString( p_libvlc, "bla" ) == NULL );
146 var_SetString( p_libvlc, "bla", "" );
147 assert( var_GetNonEmptyString( p_libvlc, "bla" ) == NULL );
148 var_SetString( p_libvlc, "bla", "test" );
149 psz_tmp = var_GetNonEmptyString( p_libvlc, "bla" );
150 assert( !strcmp( psz_tmp, "test" ) );
151 free( psz_tmp );
152 var_Destroy( p_libvlc, "bla" );
155 static void test_address( libvlc_int_t *p_libvlc )
157 char dummy[i_var_count];
159 int i;
160 for( i = 0; i < i_var_count; i++ )
161 var_Create( p_libvlc, psz_var_name[i], VLC_VAR_ADDRESS );
163 for( i = 0; i < i_var_count; i++ )
165 var_value[i].p_address = dummy + i;
166 var_SetAddress( p_libvlc, psz_var_name[i], var_value[i].p_address );
169 for( i = 0; i < i_var_count; i++ )
171 vlc_value_t val;
172 var_Get( p_libvlc, psz_var_name[i], &val );
173 assert( val.p_address == var_value[i].p_address );
176 for( i = 0; i < i_var_count; i++ )
177 var_Destroy( p_libvlc, psz_var_name[i] );
180 static int callback( vlc_object_t* p_this, char const *psz_var,
181 vlc_value_t oldval, vlc_value_t newval, void *p_data)
183 (void)p_this; (void)oldval;
184 int i;
186 // Check the parameters
187 assert( p_data == psz_var_name );
189 // Find the variable
190 for( i = 0; i < i_var_count; i++ )
192 if( !strcmp( psz_var_name[i], psz_var ) )
193 break;
195 // Check the variable is known
196 assert( i < i_var_count );
198 var_value[i].i_int = newval.i_int;
199 return VLC_SUCCESS;
202 static void test_callbacks( libvlc_int_t *p_libvlc )
204 /* add the callbacks */
205 int i;
206 for( i = 0; i < i_var_count; i++ )
208 var_Create( p_libvlc, psz_var_name[i], VLC_VAR_INTEGER );
209 var_AddCallback( p_libvlc, psz_var_name[i], callback, psz_var_name );
212 /* Set the variables and trigger the callbacks */
213 for( i = 0; i < i_var_count; i++ )
215 int i_temp = rand();
216 var_SetInteger( p_libvlc, psz_var_name[i], i_temp );
217 assert( i_temp == var_value[i].i_int );
218 var_SetInteger( p_libvlc, psz_var_name[i], 0 );
219 assert( var_value[i].i_int == 0 );
220 var_value[i].i_int = 1;
223 /* Only trigger the callback: the value will be 0 again */
224 for( i = 0; i < i_var_count; i++ )
226 var_TriggerCallback( p_libvlc, psz_var_name[i] );
227 assert( var_value[i].i_int == 0 );
230 for( i = 0; i < i_var_count; i++ )
231 var_Destroy( p_libvlc, psz_var_name[i] );
234 static void test_limits( libvlc_int_t *p_libvlc )
236 vlc_value_t val;
237 val.i_int = 0;
238 var_Create( p_libvlc, "bla", VLC_VAR_INTEGER );
240 var_Change( p_libvlc, "bla", VLC_VAR_GETMIN, &val, NULL );
241 assert( val.i_int == 0 );
243 val.i_int = -1234;
244 var_Change( p_libvlc, "bla", VLC_VAR_SETMIN, &val, NULL );
245 val.i_int = 12345;
246 var_Change( p_libvlc, "bla", VLC_VAR_SETMAX, &val, NULL );
248 var_Change( p_libvlc, "bla", VLC_VAR_GETMIN, &val, NULL );
249 assert( val.i_int == -1234 );
250 var_Change( p_libvlc, "bla", VLC_VAR_GETMAX, &val, NULL );
251 assert( val.i_int == 12345 );
253 var_SetInteger( p_libvlc, "bla", -123456 );
254 assert( var_GetInteger( p_libvlc, "bla" ) == -1234 );
255 var_SetInteger( p_libvlc, "bla", 1234 );
256 assert( var_GetInteger( p_libvlc, "bla" ) == 1234 );
257 var_SetInteger( p_libvlc, "bla", 12346 );
258 assert( var_GetInteger( p_libvlc, "bla" ) == 12345 );
260 val.i_int = 42;
261 var_Change( p_libvlc, "bla", VLC_VAR_SETSTEP, &val, NULL );
262 var_SetInteger( p_libvlc, "bla", 20 );
263 val.i_int = 0;
264 var_Change( p_libvlc, "bla", VLC_VAR_GETSTEP, &val, NULL );
265 assert( val.i_int == 42 );
267 var_SetInteger( p_libvlc, "bla", 20 );
268 assert( var_GetInteger( p_libvlc, "bla" ) == 0 );
270 var_SetInteger( p_libvlc, "bla", 21 );
271 assert( var_GetInteger( p_libvlc, "bla" ) == 42 );
273 var_Destroy( p_libvlc, "bla" );
276 static void test_choices( libvlc_int_t *p_libvlc )
278 vlc_value_t val, val2;
279 var_Create( p_libvlc, "bla", VLC_VAR_INTEGER | VLC_VAR_HASCHOICE |
280 VLC_VAR_ISCOMMAND );
281 val.i_int = 1;
282 val2.psz_string = (char*)"one";
283 var_Change( p_libvlc, "bla", VLC_VAR_ADDCHOICE, &val, &val2 );
285 val.i_int = 2;
286 val2.psz_string = (char*)"two";
287 var_Change( p_libvlc, "bla", VLC_VAR_ADDCHOICE, &val, &val2 );
289 assert( var_CountChoices( p_libvlc, "bla" ) == 2 );
291 var_Change( p_libvlc, "bla", VLC_VAR_DELCHOICE, &val, &val2 );
292 assert( var_CountChoices( p_libvlc, "bla" ) == 1 );
294 var_Change( p_libvlc, "bla", VLC_VAR_GETCHOICES, &val, &val2 );
295 assert( val.p_list->i_count == 1 && val.p_list->p_values[0].i_int == 1 &&
296 val2.p_list->i_count == 1 &&
297 !strcmp( val2.p_list->p_values[0].psz_string, "one" ) );
298 var_FreeList( &val, &val2 );
300 var_Change( p_libvlc, "bla", VLC_VAR_CLEARCHOICES, NULL, NULL );
301 assert( var_CountChoices( p_libvlc, "bla" ) == 0 );
303 var_Destroy( p_libvlc, "bla" );
306 static void test_change( libvlc_int_t *p_libvlc )
308 /* Add min, max and step
309 Yes we can have min > max but we don't really care */
310 vlc_value_t val;
311 int i_min, i_max, i_step;
313 var_Create( p_libvlc, "bla", VLC_VAR_INTEGER );
314 val.i_int = i_min = rand();
315 var_Change( p_libvlc, "bla", VLC_VAR_SETMIN, &val, NULL );
316 val.i_int = i_max = rand();
317 var_Change( p_libvlc, "bla", VLC_VAR_SETMAX, &val, NULL );
318 val.i_int = i_step = rand();
319 var_Change( p_libvlc, "bla", VLC_VAR_SETSTEP, &val, NULL );
321 /* Do something */
322 var_SetInteger( p_libvlc, "bla", rand() );
323 val.i_int = var_GetInteger( p_libvlc, "bla" ); /* dummy read */
325 /* Test everything is right */
326 var_Change( p_libvlc, "bla", VLC_VAR_GETMIN, &val, NULL );
327 assert( val.i_int = i_min );
328 var_Change( p_libvlc, "bla", VLC_VAR_GETMAX, &val, NULL );
329 assert( val.i_int = i_max );
330 var_Change( p_libvlc, "bla", VLC_VAR_GETSTEP, &val, NULL );
331 assert( val.i_int = i_step );
333 var_Destroy( p_libvlc, "bla" );
336 static void test_creation_and_type( libvlc_int_t *p_libvlc )
338 vlc_value_t val;
339 val.i_int = 4212;
341 var_Create( p_libvlc, "bla", VLC_VAR_INTEGER );
342 assert( var_Type( p_libvlc, "bla" ) == (VLC_VAR_INTEGER) );
344 assert( var_Create( p_libvlc, "bla", VLC_VAR_INTEGER | VLC_VAR_DOINHERIT ) == VLC_SUCCESS );
345 assert( var_Type( p_libvlc, "bla" ) == (VLC_VAR_INTEGER) );
347 assert( var_Create( p_libvlc, "bla", VLC_VAR_INTEGER | VLC_VAR_ISCOMMAND ) == VLC_SUCCESS );
348 assert( var_Type( p_libvlc, "bla" ) == (VLC_VAR_INTEGER | VLC_VAR_ISCOMMAND) );
350 var_Change( p_libvlc, "bla", VLC_VAR_SETMIN, &val, NULL );
351 assert( var_Type( p_libvlc, "bla" ) == (VLC_VAR_INTEGER | VLC_VAR_ISCOMMAND | VLC_VAR_HASMIN) );
353 var_Change( p_libvlc, "bla", VLC_VAR_SETMAX, &val, NULL );
354 assert( var_Type( p_libvlc, "bla" ) == (VLC_VAR_INTEGER | VLC_VAR_ISCOMMAND | VLC_VAR_HASMIN | VLC_VAR_HASMAX) );
356 var_Change( p_libvlc, "bla", VLC_VAR_SETSTEP, &val, NULL );
357 assert( var_Type( p_libvlc, "bla" ) == (VLC_VAR_INTEGER | VLC_VAR_ISCOMMAND | VLC_VAR_HASMIN | VLC_VAR_HASMAX | VLC_VAR_HASSTEP) );
359 var_Destroy( p_libvlc, "bla" );
360 var_Destroy( p_libvlc, "bla" );
361 var_Destroy( p_libvlc, "bla" );
362 assert( var_Get( p_libvlc, "bla", &val ) == VLC_ENOVAR );
364 var_Create( p_libvlc, "bla", VLC_VAR_INTEGER | VLC_VAR_DOINHERIT );
365 assert( var_Type( p_libvlc, "bla" ) == (VLC_VAR_INTEGER) );
367 assert( var_Create( p_libvlc, "bla", VLC_VAR_INTEGER | VLC_VAR_ISCOMMAND ) == VLC_SUCCESS );
368 assert( var_Type( p_libvlc, "bla" ) == (VLC_VAR_INTEGER | VLC_VAR_ISCOMMAND) );
370 assert( var_Create( p_libvlc, "bla", VLC_VAR_INTEGER | VLC_VAR_ISCOMMAND | VLC_VAR_HASCHOICE ) == VLC_SUCCESS );
371 assert( var_Type( p_libvlc, "bla" ) == (VLC_VAR_INTEGER | VLC_VAR_ISCOMMAND | VLC_VAR_HASCHOICE) );
373 var_Destroy( p_libvlc, "bla" );
374 var_Destroy( p_libvlc, "bla" );
375 var_Destroy( p_libvlc, "bla" );
376 assert( var_Get( p_libvlc, "bla", &val ) == VLC_ENOVAR );
378 var_Create( p_libvlc, "bla", VLC_VAR_INTEGER );
379 var_Change( p_libvlc, "bla", VLC_VAR_SETMIN, &val, NULL );
380 assert( var_Create( p_libvlc, "bla", VLC_VAR_INTEGER | VLC_VAR_ISCOMMAND ) == VLC_SUCCESS );
381 assert( var_Type( p_libvlc, "bla" ) == (VLC_VAR_INTEGER | VLC_VAR_ISCOMMAND | VLC_VAR_HASMIN) );
382 assert( var_Create( p_libvlc, "bla", VLC_VAR_INTEGER | VLC_VAR_HASCHOICE ) == VLC_SUCCESS );
383 assert( var_Type( p_libvlc, "bla" ) == (VLC_VAR_INTEGER | VLC_VAR_ISCOMMAND | VLC_VAR_HASMIN | VLC_VAR_HASCHOICE) );
385 var_Destroy( p_libvlc, "bla" );
386 var_Destroy( p_libvlc, "bla" );
387 var_Destroy( p_libvlc, "bla" );
388 assert( var_Get( p_libvlc, "bla", &val ) == VLC_ENOVAR );
390 var_Create( p_libvlc, "bla", VLC_VAR_INTEGER );
391 var_Change( p_libvlc, "bla", VLC_VAR_SETMAX, &val, NULL );
392 var_Change( p_libvlc, "bla", VLC_VAR_SETSTEP, &val, NULL );
393 assert( var_Create( p_libvlc, "bla", VLC_VAR_INTEGER | VLC_VAR_ISCOMMAND ) == VLC_SUCCESS );
394 assert( var_Type( p_libvlc, "bla" ) == (VLC_VAR_INTEGER | VLC_VAR_ISCOMMAND | VLC_VAR_HASMAX | VLC_VAR_HASSTEP) );
395 assert( var_Create( p_libvlc, "bla", VLC_VAR_INTEGER | VLC_VAR_HASCHOICE ) == VLC_SUCCESS );
396 assert( var_Type( p_libvlc, "bla" ) == (VLC_VAR_INTEGER | VLC_VAR_ISCOMMAND | VLC_VAR_HASMAX | VLC_VAR_HASSTEP | VLC_VAR_HASCHOICE) );
398 var_Destroy( p_libvlc, "bla" );
399 var_Destroy( p_libvlc, "bla" );
400 var_Destroy( p_libvlc, "bla" );
401 assert( var_Get( p_libvlc, "bla", &val ) == VLC_ENOVAR );
404 static void test_variables( libvlc_instance_t *p_vlc )
406 libvlc_int_t *p_libvlc = p_vlc->p_libvlc_int;
407 srand( time( NULL ) );
409 log( "Testing for integers\n" );
410 test_integer( p_libvlc );
412 log( "Testing for booleans\n" );
413 test_booleans( p_libvlc );
415 log( "Testing for times\n" );
416 test_times( p_libvlc );
418 log( "Testing for floats\n" );
419 test_floats( p_libvlc );
421 log( "Testing for strings\n" );
422 test_strings( p_libvlc );
424 log( "Testing for addresses\n" );
425 test_address( p_libvlc );
427 log( "Testing the callbacks\n" );
428 test_callbacks( p_libvlc );
430 log( "Testing the limits\n" );
431 test_limits( p_libvlc );
433 log( "Testing choices\n" );
434 test_choices( p_libvlc );
436 log( "Testing var_Change()\n" );
437 test_change( p_libvlc );
439 log( "Testing type at creation\n" );
440 test_creation_and_type( p_libvlc );
444 int main( void )
446 libvlc_instance_t *p_vlc;
448 test_init();
450 log( "Testing the core variables\n" );
451 p_vlc = libvlc_new( test_defaults_nargs, test_defaults_args );
452 assert( p_vlc != NULL );
454 test_variables( p_vlc );
456 libvlc_release( p_vlc );
458 return 0;