1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116
|
################################################################################
#
# $Project: /Convert-Binary-C $
# $Author: mhx $
# $Date: 2009/03/15 04:10:59 +0100 $
# $Revision: 15 $
# $Source: /tests/215_local.t $
#
################################################################################
#
# Copyright (c) 2002-2009 Marcus Holland-Moritz. All rights reserved.
# This program is free software; you can redistribute it and/or modify
# it under the same terms as Perl itself.
#
################################################################################
use Test;
use Convert::Binary::C @ARGV;
$^W = 1;
BEGIN {
plan tests => 10;
}
my $CCCFG = require 'tests/include/config.pl';
eval {
$c = new Convert::Binary::C;
};
ok($@,'',"failed to create Convert::Binary::C::Cached object");
eval {
$c->parse( <<'ENDC' );
enum Zoo {
APE, BEAR
};
static int a = 23;
static int test( int abc )
{
int x, y;
y = abc;
x = y * y;
return x;
}
static void foo( void )
{
enum Bar {
FOO, BAR
} xxx;
typedef enum _foo foo;
struct _bar {
int test;
struct _bar *xxx;
};
{
enum Bar;
struct _bar;
}
}
typedef unsigned long u_32;
static void bar( void )
{
enum Bar {
BAR, FOO
} xxx;
typedef enum _foo foo;
struct _bar {
int test;
struct _bar *xxx;
};
}
struct _bar {
int foo;
};
ENDC
};
ok($@,'',"failed to parse code");
# check that only global types have been parsed
eval {
@enum = $c->enum;
@comp = $c->compound;
@type = $c->typedef;
};
ok($@,'',"failed to get types");
ok( scalar @enum, 1, "got more/less enums than expected" );
ok( scalar @comp, 1, "got more/less compounds than expected" );
ok( scalar @type, 1, "got more/less typedefs than expected" );
ok( $enum[0]{identifier}, "Zoo" );
ok( $comp[0]{identifier}, "_bar" );
ok( $type[0]{declarator}, "u_32" );
# this file has some local types, just check if it parses correctly
eval {
$c->clean->configure(%$CCCFG)->parse_file('tests/include/util.c');
};
ok($@,'',"failed to parse file");
|