Пример #1
0
int
main(int argc, char *argv[])
{    const Arg_parser::Option opts[] =
        {
            { 'h', "help",          Arg_parser::no  },
            { 'v', "verbose",       Arg_parser::no  },
            { 'd', "dump",          Arg_parser::no  },
        };
    
    Arg_parser parser(argc, argv, opts);
    if( ! parser.error().empty() ) {
        cout << parser.error() << endl;
        exit(EXIT_FAILURE);
    }
    
    for( int i = 0; i < parser.arguments(); ++i ) {
        const int code = parser.code(i);
        try {
            switch( code ) {
              case 'h':
                  usage ();
                  exit(EXIT_SUCCESS);
              case 'v':
                    dbglogfile.setVerbosity();
                    // This happens once per 'v' flag 
                    log_debug(_("Verbose output turned on"));
                    break;
	    }
        }
        
        catch (Arg_parser::ArgParserException &e) {
            cerr << _("Error parsing command line options: ") << e.what() << endl;
            cerr << _("This is a Gnash bug.") << endl;
        }
    }

    // Initialize gnash lib
    
    RunResources runResources;

    const URL url("");
    runResources.setStreamProvider(
            boost::shared_ptr<StreamProvider>(new StreamProvider(url, url)));

    // Create a bogus movie with swf version 7 support
    movie_definition* md = new DummyMovieDefinition(runResources, 7);

    ManualClock clock;

    movie_root stage(clock, runResources);

    MovieClip::MovieVariables v;
    stage.init(md, v);

    // run the tests
    test_isnan();
    test_conversion();
   
}
Пример #2
0
int
trymain(int /*argc*/, char** /*argv*/)
{
    gnash::LogFile& dbglogfile = gnash::LogFile::getDefaultInstance();
    dbglogfile.setVerbosity();
    
    // Initialize gnash lib
    
    RunResources ri;
    const URL url("");
    ri.setStreamProvider(
            std::shared_ptr<StreamProvider>(new StreamProvider(url, url)));
    
    // Initialize a VM
    boost::intrusive_ptr<movie_definition> md5(new DummyMovieDefinition(ri, 5));
    boost::intrusive_ptr<movie_definition> md6(new DummyMovieDefinition(ri, 6));
    
    ManualClock clock;
    movie_root stage(clock, ri);
    
    MovieClip::MovieVariables v;
    stage.init(md5.get(), v);
    
    DisplayList dlist1;
    
    check_equals(dlist1, dlist1);
    
    DisplayList dlist2 = dlist1;
    
    check_equals(dlist1, dlist2);
    
    MovieClip* root = const_cast<Movie*>(&stage.getRootMovie());
    
    // just a couple of DisplayObjects
    as_object* ob1 = createObject(getGlobal(*getObject(root)));
    as_object* ob2 = createObject(getGlobal(*getObject(root)));
    
    DisplayObject* ch1 ( new DummyCharacter(ob1, root) );
    DisplayObject* ch2 ( new DummyCharacter(ob2, root) );
    
    dlist1.placeDisplayObject(ch1, 1);
    dlist1.placeDisplayObject(ch2, 2);
    
    check(dlist1 != dlist2);
    
    dlist2.placeDisplayObject(ch2, 1);
    dlist2.placeDisplayObject(ch1, 2);
    
    return 0;
}
Пример #3
0
int
main(int /*argc*/, char** /*argv*/)
{
	cout << "sizeof(Property): " << sizeof(Property) << endl;
	cout << "sizeof(PropertyList): " << sizeof(PropertyList) << endl;

	gnash::LogFile& dbglogfile = gnash::LogFile::getDefaultInstance();
	dbglogfile.setVerbosity();

    // We don't care about the base URL.
    RunResources runResources;
    const URL url("");
    runResources.setStreamProvider(
            boost::shared_ptr<StreamProvider>(new StreamProvider(url, url)));
	
    boost::intrusive_ptr<movie_definition> md5(
            new DummyMovieDefinition(runResources, 5));
	boost::intrusive_ptr<movie_definition> md7(
            new DummyMovieDefinition(runResources, 7));

	// TODO: test both SWF5 and SWF7 as they are different !!

	ManualClock clock;

    movie_root root(clock, runResources);

    root.init(md5.get(), MovieClip::MovieVariables());

    VM& vm = root.getVM();

	log_debug("VM version %d", vm.getSWFVersion());

	as_object* obj = new as_object(getGlobal(vm));
	PropertyList props(*obj);

	as_value val("value");
	as_value val2("value2");
	as_value val3("value3");
	as_value ret;

	if (vm.getSWFVersion() > 6) // SWF 7 or higher is case sensitive.
	{
		check_equals(props.size(), 0);
		check ( props.setValue(getURI(vm, "Var0"), val) );
		check_equals(props.size(), 1);

		check (getVal(props, getURI(vm, "Var0"), ret, *obj) );
		check_strictly_equals ( ret, val );

		// search should be case-sensitive
		check (!getVal(props, getURI(vm, "var0"), ret, *obj) );

		// new value overrides existing value
		check ( props.setValue(getURI(vm, "Var0"), val2) );
		check_equals(props.size(), 1);
		check (getVal(props, getURI(vm, "Var0"), ret, *obj) );
		check_strictly_equals ( ret, val2 );

		// case-sensitive setting value doesn't overrides existing value
		check ( props.setValue(getURI(vm, "var0"), val3) );
		check_equals(props.size(), 2);
		check (!getVal(props, getURI(vm, "vAr0"), ret, *obj) );

		// Now add some new labels
		check ( props.setValue(getURI(vm, "var1"), val) );
		check_equals(props.size(), 3);
		check ( props.setValue(getURI(vm, "var2"), val) );
		check_equals(props.size(), 4);
		check ( props.setValue(getURI(vm, "var3"), val) );
		check_equals(props.size(), 5);

		// Test deletion of properties

		// this succeeds
		check(props.delProperty(getURI(vm, "var3")).second);
		check_equals(props.size(), 4);

		// this fails (non existent property)
		check(!props.delProperty(getURI(vm, "non-existent")).first);
		check_equals(props.size(), 4);

		// Set property var2 as protected from deletion!
		props.setFlags(getURI(vm, "var2"), PropFlags::dontDelete, 0);
        check(props.getProperty(getURI(vm, "var2")));
		// this fails (protected from deletion)
		std::pair<bool, bool> delpair = props.delProperty(getURI(vm, "var2"));
		check_equals(delpair.first, true); // property was found
		check_equals(delpair.second, false); // property was NOT deleted
		check_equals(props.size(), 4);

	}
	else
	{

		// Below SWF or is not case sensitive.

		check_equals(props.size(), 0);
		check ( props.setValue(getURI(vm, "Var0"), val) );
		check_equals(props.size(), 1);

		check (getVal(props, getURI(vm, "Var0"), ret, *obj) );
		check_strictly_equals ( ret, val );

		// search should be case-insensitive
		check (getVal(props, getURI(vm, "var0"), ret, *obj) );
		check_strictly_equals ( ret, val );

		// new value overrides existing value
		check ( props.setValue(getURI(vm, "Var0"), val2) );
		check_equals(props.size(), 1);
		check (getVal(props, getURI(vm, "Var0"), ret, *obj) );
		check_strictly_equals ( ret, val2 );

		// case-insensitive setting value should override existing value
		check ( props.setValue(getURI(vm, "var0"), val3) );
		check_equals(props.size(), 1);
		check (getVal(props, getURI(vm, "vAr0"), ret, *obj) );
		check_strictly_equals ( ret, val3 );

		// Now add some new labels
		check ( props.setValue(getURI(vm, "var1"), val) );
		check_equals(props.size(), 2);
		check ( props.setValue(getURI(vm, "var2"), val) );
		check_equals(props.size(), 3);
		check ( props.setValue(getURI(vm, "var3"), val) );
		check_equals(props.size(), 4);

		// Test deletion of properties

		// this succeeds
		check(props.delProperty(getURI(vm, "var3")).second);
		check_equals(props.size(), 3);

		// this fails (non existent property)
		check(!props.delProperty(getURI(vm, "non-existent")).first);
		check_equals(props.size(), 3);

		// Set property var2 as protected from deletion!
		props.setFlags(getURI(vm, "var2"), PropFlags::dontDelete, 0);
        check(props.getProperty(getURI(vm, "var2")));
		// this fails (protected from deletion)
		std::pair<bool, bool> delpair = props.delProperty(getURI(vm, "var2"));
		check_equals(delpair.first, true); // property was found
		check_equals(delpair.second, false); // property was NOT deleted
		check_equals(props.size(), 3);

	}
}