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(); }
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; }
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); } }