int main(int argc, char** argv) { SWFMovie mo; SWFMovieClip mc3, mc2, dejagnuclip; SWFAction ac, ac1, initac; SWFDisplayItem it; SWFShape sha; const char *srcdir="."; if (argc > 1) srcdir = argv[1]; else { fprintf(stderr, "Usage: %s <mediadir>\n", argv[0]); return 1; } Ming_init(); mo = newSWFMovieWithVersion(OUTPUT_VERSION); SWFMovie_setDimension(mo, 800, 600); SWFMovie_setRate (mo, 12.0); sha = newSWFShape(); // Character ID 2. Has 1 showframe. Is exported first. mc2 = newSWFMovieClip(); SWFMovieClip_add(mc2, (SWFBlock)sha); SWFMovieClip_nextFrame(mc2); // Export it. SWFMovie_addExport(mo, (SWFBlock)mc2, "C2"); SWFMovie_writeExports(mo); // Main timeline actions for frame 1 add_actions(mo, "var c = 0; var i = 0; trace('frame 1'); gotoAndStop(3);"); initac = newSWFAction("trace('onInitialize'); _root.i++;"); // ID 3 is defined here. It has no showframe. It is exported immediately. mc3 = newSWFMovieClip(); SWFMovie_addExport(mo, (SWFBlock)mc3, "ctor"); SWFMovie_writeExports(mo); dejagnuclip = get_dejagnu_clip((SWFBlock)get_default_font(srcdir), 10, 0, 0, 800, 600); SWFMovie_add(mo, (SWFBlock)dejagnuclip); // Init actions for ID 3. This only exists to create the constructor // for mc2 in its initactions. ac = newSWFAction( " _global.ctor = function () {" " super();" " trace('Object ID 2 is constructed');" " c += 1;" " };" ); SWFInitAction ia = newSWFInitAction_withId(ac, 3); SWFMovie_add(mo, (SWFBlock)ia); // Init actions for ID 2 (registered class) ac1 = newSWFAction("Object.registerClass('C2', ctor); " "trace('Registered class');"); ia = newSWFInitAction_withId(ac1, 2); SWFMovie_add(mo, (SWFBlock)ia); // Frame 2 SWFMovie_nextFrame(mo); add_actions(mo, "trace('Frame 2');"); // Place object ID 2. it = SWFMovie_add(mo, (SWFBlock)mc2); SWFDisplayItem_setName(it, "mc2"); SWFDisplayItem_addAction(it, initac, SWFACTION_INIT); // Frame 3 SWFMovie_nextFrame(mo); // Remove object ID 2 SWFMovie_remove(mo, it); add_actions(mo, "trace('frame 3');"); // The class should not be constructed if the object is removed after // being placed. It should be constructed if it's not removed. MovieClips // with an onUnload handler are always constructed. check_equals(mo, "c", "0"); check_equals(mo, "i", "0"); check(mo, "_root.mc2 == undefined"); add_actions(mo, "gotoAndPlay(5);"); // Frame 4 SWFMovie_nextFrame(mo); add_actions(mo, "trace('Frame 4');"); // Place object ID 2 again it = SWFMovie_add(mo, (SWFBlock)mc2); SWFDisplayItem_setName(it, "mc2a"); SWFDisplayItem_addAction(it, initac, SWFACTION_INIT); // Frame 5 SWFMovie_nextFrame(mo); // This time the MovieClip was not removed before we get here, // so it should be present and the constructor should be // called. add_actions(mo, "trace('frame 5');"); check_equals(mo, "c", "1"); check_equals(mo, "i", "1"); check(mo, "typeof(_root.mc2a) == 'movieclip'"); add_actions(mo, "stop();"); SWFMovie_nextFrame(mo); puts("Saving " OUTPUT_FILENAME ); SWFMovie_save(mo, OUTPUT_FILENAME); return 0; }
/// This test checks the event order of key events. // /// Known listeners are: /// 1. MovieClips with a defined key event /// 2. Button with a defined key event /// 3. Anything added to Key listeners in ActionScript. // /// The test adds objects in this order: // /// Frame 1: /// 1. mc1 /// 3. button1 (responds to 'a') /// 3. o1 (actionscript key listener object) /// 4. mc2 /// /// Frame 2: /// 5. button2 (responds to 'a') /// 6. button3 (responds to 'b') /// 3. o2 (actionscript key listener object) // /// The test shows that, irrespective of construction order: /// 1. MovieClips are notified first /// 2. ActionScript listeners are notified second. /// 3. Buttons are notified last. // /// Additionally: // /// 1. Only one button action can respond to any key. int main(int argc, char** argv) { SWFMovie mo; SWFMovieClip mc, dejagnuclip; SWFButtonRecord br; SWFButton bu; SWFDisplayItem it1, it, it2; SWFShape sh1, sh2; const char *srcdir="."; if ( argc>1 ) srcdir=argv[1]; else { fprintf(stderr, "Usage: %s <mediadir>\n", argv[0]); return 1; } Ming_init(); mo = newSWFMovieWithVersion(OUTPUT_VERSION); SWFMovie_setDimension(mo, 800, 600); SWFMovie_setRate (mo, 12.0); dejagnuclip = get_dejagnu_clip((SWFBlock)get_default_font(srcdir), 10, 0, 0, 800, 600); SWFMovie_add(mo, (SWFBlock)dejagnuclip); SWFMovie_nextFrame(mo); add_actions(mo, "_root.order = '';" "_root.note('Press \"a\" then \"b\"');" "_root.note('Do not press any other keys!');" ); mc = newSWFMovieClip(); it = SWFMovie_add(mo, (SWFBlock)mc); SWFDisplayItem_setName(it, "mc1"); SWFDisplayItem_addAction(it, newSWFAction("trace('mc1'); _root.order += 'mc1,';"), SWFACTION_KEYDOWN); bu = newSWFButton(); sh1 = make_fill_square(200, 0, 40, 40, 0, 0, 0, 0, 0, 0); sh2 = make_fill_square(200, 0, 40, 40, 0, 0, 0, 0, 255, 0); br = SWFButton_addCharacter(bu, (SWFCharacter)sh1, SWFBUTTON_HIT); SWFButtonRecord_setDepth(br, 3); br = SWFButton_addCharacter(bu, (SWFCharacter)sh1, SWFBUTTON_UP); SWFButtonRecord_setDepth(br, 4); br = SWFButton_addCharacter(bu, (SWFCharacter)sh2, SWFBUTTON_OVER); SWFButtonRecord_setDepth(br, 5); SWFButton_addAction(bu, newSWFAction("trace('button1'); _root.order += 'button1,';"), SWFBUTTON_KEYPRESS('a')); it1 = SWFMovie_add(mo, (SWFBlock)bu); SWFDisplayItem_setName(it, "button1"); SWFMovie_add(mo, newSWFAction( "o1 = {};" "o1.onKeyDown = function() {" " trace('o1'); " " _root.order += 'o1,';" "};" "Key.addListener(o1);" )); mc = newSWFMovieClip(); it = SWFMovie_add(mo, (SWFBlock)mc); SWFDisplayItem_setName(it, "mc2"); SWFDisplayItem_addAction(it, newSWFAction("trace('mc2'); _root.order += 'mc2,';"), SWFACTION_KEYDOWN); SWFMovie_nextFrame(mo); // Frame 2 bu = newSWFButton(); sh1 = make_fill_square(240, 0, 40, 40, 0, 0, 0, 0, 0, 0); sh2 = make_fill_square(240, 0, 40, 40, 0, 0, 0, 0, 255, 0); br = SWFButton_addCharacter(bu, (SWFCharacter)sh1, SWFBUTTON_HIT); SWFButtonRecord_setDepth(br, 3); br = SWFButton_addCharacter(bu, (SWFCharacter)sh1, SWFBUTTON_UP); SWFButtonRecord_setDepth(br, 4); br = SWFButton_addCharacter(bu, (SWFCharacter)sh2, SWFBUTTON_OVER); SWFButtonRecord_setDepth(br, 5); SWFButton_addAction(bu, newSWFAction("trace('button2'); _root.order += 'button2,';"), SWFBUTTON_KEYPRESS('a')); it2 = SWFMovie_add(mo, (SWFBlock)bu); SWFDisplayItem_setName(it, "button2"); bu = newSWFButton(); sh1 = make_fill_square(280, 0, 40, 40, 0, 0, 0, 0, 0, 0); sh2 = make_fill_square(280, 0, 40, 40, 0, 0, 0, 0, 255, 0); br = SWFButton_addCharacter(bu, (SWFCharacter)sh1, SWFBUTTON_HIT); SWFButtonRecord_setDepth(br, 3); br = SWFButton_addCharacter(bu, (SWFCharacter)sh1, SWFBUTTON_UP); SWFButtonRecord_setDepth(br, 4); br = SWFButton_addCharacter(bu, (SWFCharacter)sh2, SWFBUTTON_OVER); SWFButtonRecord_setDepth(br, 5); SWFButton_addAction(bu, newSWFAction( "trace('button3'); " "_root.order += 'button3,';" "play();" ), SWFBUTTON_KEYPRESS('b')); it = SWFMovie_add(mo, (SWFBlock)bu); SWFDisplayItem_setName(it, "button3"); SWFMovie_add(mo, newSWFAction( "o2 = {};" "o2.onKeyDown = function() {" " trace('o2'); " " _root.order += 'o2,';" "};" "Key.addListener(o2);" "stop();" )); SWFMovie_nextFrame(mo); xcheck_equals(mo, "_root.order", "'mc2,mc1,o1,o2,button1,mc2,mc1,o1,o2,button3,'"); SWFMovie_nextFrame(mo); SWFDisplayItem_remove(it2); add_actions(mo, "_root.order = '';" "_root.note('Press \"a\" then \"b\" again');" "_root.note('Do not press any other keys!');" "stop();" ); SWFMovie_nextFrame(mo); // Check that removing the second button associated with 'a' does not // remove the key trigger for button2. There's no reason to think it should, // but it could happen if it's implemented badly! check_equals(mo, "_root.order", "'mc2,mc1,o1,o2,button1,mc2,mc1,o1,o2,button3,'"); SWFMovie_add(mo, newSWFAction("stop();")); //Output movie puts("Saving " OUTPUT_FILENAME ); SWFMovie_save(mo, OUTPUT_FILENAME); return 0; }
int main(int argc, char **argv) { SWFMovie mo; SWFDisplayItem it; const char *srcdir="."; SWFMovieClip dejagnuclip; /********************************************* * * Initialization * *********************************************/ puts("Setting things up"); Ming_init(); Ming_useSWFVersion (OUTPUT_VERSION); Ming_setScale(20.0); mo = newSWFMovie(); SWFMovie_setDimension(mo, 800, 600); SWFMovie_setRate(mo, 12); if ( argc>1 ) srcdir=argv[1]; else { fprintf(stderr, "Usage: %s <mediadir>\n", argv[0]); return 1; } font = get_default_font(srcdir); /* Dejagnu equipment */ dejagnuclip = get_dejagnu_clip((SWFBlock)font, 10, 0, 0, 800, 600); it = SWFMovie_add(mo, (SWFBlock)dejagnuclip); SWFDisplayItem_setDepth(it, 200); SWFDisplayItem_move(it, 200, 0); add_text_field(mo, "textfield", "_root.msg", "Button events", 10, 0, 5); add_text_field(mo, "textfield2", "_root.msg2", "Mouse events", 11, 0, 100); add_text_field(mo, "textfield3", "_root.msg3", "Key events", 12, 0, 80); SWFMovie_nextFrame(mo); /* showFrame */ /***************************************************** * * Add button * *****************************************************/ it = add_button(mo); SWFDisplayItem_moveTo(it, 40, 30); SWFDisplayItem_setName(it, "square1"); SWFDisplayItem_setDepth(it, 2); add_actions(mo, "function printBounds(b) {" " return ''+Math.round(b.xMin*100)/100+','+Math.round(b.yMin*100)/100+' '+Math.round(b.xMax*100)/100+','+Math.round(b.yMax*100)/100;" "}" ); // // Mouse pointer events // add_actions(mo, "square1.button.onRollOver = function() { " " _root.msg2 = 'RollOver'; " // Target is the one this function was defined in " check_equals(_target, '/');" "};" ); add_actions(mo, "square1.button.onRollOut = function() {" " _root.msg2 = 'RollOut'; " // Target is the one this function was defined in " check_equals(_target, '/');" "};" ); // // Mouse buttons events // add_actions(mo, "square1.button.onPress = function() {" " _root.msg2 = 'Press'; " // Target is the one this function was defined in " check_equals(_target, '/');" "};" ); add_actions(mo, "square1.button.onRelease = function() {" " _root.msg2 = 'Release'; " // Target is the one this function was defined in " check_equals(_target, '/');" "};" ); add_actions(mo, "square1.button.onReleaseOutside = function() {" " _root.msg2 = 'ReleaseOutside'; " // Target is the one this function was defined in " check_equals(_target, '/');" "};" ); // // Focus events // add_actions(mo, "square1.button.onSetFocus = function() {" " _root.msg3 = 'SetFocus';" // Target is the one this function was defined in " check_equals(_target, '/');" "};" ); // // Key events - button needs focus for these to work // add_actions(mo, "square1.button.onKeyDown = function() {" " _root.msg3 = 'KeyDown';" // Target is the one this function was defined in " check_equals(_target, '/');" "};" ); add_actions(mo, "square1.button.onKeyUp = function() {" " _root.msg3 = 'KeyUp';" // Target is the one this function was defined in " check_equals(_target, '/');" "};" ); SWFMovie_nextFrame(mo); /* showFrame */ /***************************************************** * * On second frame, check construction of the button * DisplayObject states and give instructions to proceed * * *****************************************************/ add_actions(mo, "Array.prototype.realLength = function() {" " var l=0; for (var i in this) { " " if (Number(i) == i) l++;" /* count only numbers */ " };" " return l;" "};"); /* buttonChild was initialized with 2 elements */ check_equals(mo, "typeof(_root.buttonChild)", "'object'"); check(mo, "_root.buttonChild instanceof Array"); check_equals(mo, "_root.buttonChild.realLength()", "2"); /* UP and ALL states */ /* sprite for ALL states */ check_equals(mo, "typeof(_root.buttonChild[10])", "'object'"); check_equals(mo, "(_root.buttonChild[10].nam)", "'_level0.square1.button.instance5'"); check_equals(mo, "(_root.buttonChild[10].exe)", "1"); check_equals(mo, "(_root.buttonChild[10].uld)", "0"); /* sprite for UP state */ check_equals(mo, "typeof(_root.buttonChild[12])", "'object'"); check_equals(mo, "(_root.buttonChild[12].nam)", "'_level0.square1.button.instance6'"); check_equals(mo, "(_root.buttonChild[12].exe)", "1"); check_equals(mo, "(_root.buttonChild[12].uld)", "0"); check_equals(mo, "_level0.square1.button.instance6._name", "'instance6'"); check_equals(mo, "_level0.square1.button.instance6.getDepth()", "-16371"); /* sprite for HIT state not constructed */ check_equals(mo, "typeof(_root.buttonChild[11])", "'undefined'"); /* sprite for DOWN state not constructed */ check_equals(mo, "typeof(_root.buttonChild[13])", "'undefined'"); add_actions(mo, "stop();" /*"_root.note('buttonChild is '+dumpObj(_root.buttonChild));"*/ "_root.testno=0;" "_root.square1.onRollOut = function() { _root.testno++; delete _root.square1.onRollOut; nextFrame(); };" "_root.note('" "0. Roll over and out the red square, not touching the small dark-red square in it." "');"); /* hitTest should work on every child, not just first added */ check(mo, "_level0.square1.hitTest(60,60,true)"); SWFMovie_nextFrame(mo); /* showFrame */ /***************************************************** * * On third frame, start the button event test * *****************************************************/ add_actions(mo, "stop();" /*"_root.note('buttonChild is '+dumpObj(_root.buttonChild));"*/ "_root.testno=1;" "_root.note('" "1. Roll over the red square." "');"); SWFMovie_nextFrame(mo); /* showFrame */ /***************************************************** * * On fourth frame, add a shape at lower depth, * and check bounds of square1 * * *****************************************************/ { SWFShape sh = make_fill_square(0, 0, 120, 120, 0, 0, 0, 0, 255, 0); SWFDisplayItem itsh = SWFMovie_add(mo, (SWFBlock)sh); SWFDisplayItem_setDepth(itsh, 1); check_equals(mo, "printBounds(square1.getBounds())", "'-0.05,-0.05 40.05,40.05'"); /* buttonChild should now have a total of 4 elements (UP,DOWN, OVER and ALL states) */ check_equals(mo, "typeof(_root.buttonChild)", "'object'"); check(mo, "_root.buttonChild instanceof Array"); check_equals(mo, "_root.buttonChild.realLength()", "4"); /* sprite for ALL states */ check_equals(mo, "typeof(_root.buttonChild[10])", "'object'"); check_equals(mo, "(_root.buttonChild[10].nam)", "'_level0.square1.button.instance5'"); check_equals(mo, "(_root.buttonChild[10].exe)", "1"); check_equals(mo, "(_root.buttonChild[10].uld)", "0"); /* sprite for UP state */ check_equals(mo, "typeof(_root.buttonChild[12])", "'object'"); check_equals(mo, "(_root.buttonChild[12].nam)", "'_level0.square1.button.instance6'"); check_equals(mo, "(_root.buttonChild[12].exe)", "3"); check_equals(mo, "(_root.buttonChild[12].uld)", "2"); /* sprite for OVER state */ check_equals(mo, "typeof(_root.buttonChild[13])", "'object'"); check_equals(mo, "(_root.buttonChild[13].nam)", "'_level0.square1.button.instance7'"); check_equals(mo, "(_root.buttonChild[13].exe)", "4"); check_equals(mo, "(_root.buttonChild[13].uld)", "4"); /* sprite for DOWN state */ check_equals(mo, "typeof(_root.buttonChild[14])", "'object'"); check_equals(mo, "(_root.buttonChild[14].nam)", "'_level0.square1.button.instance8'"); check_equals(mo, "(_root.buttonChild[14].exe)", "2"); check_equals(mo, "(_root.buttonChild[14].uld)", "2"); /* sprite for HIT state never constructed */ check_equals(mo, "typeof(_root.buttonChild[11])", "'undefined'"); add_actions(mo, "stop();" "_root.note('-- Added shape at lower depth --');" "_root.testno++;" "_root.note(_root.testno+'. Roll over the square.');" ); SWFMovie_nextFrame(mo); /* showFrame */ } /***************************************************** * * On fifth frame, add a shape at higher depth * *****************************************************/ { SWFShape sh = make_fill_square(0, 0, 120, 120, 0, 0, 0, 0, 255, 0); SWFDisplayItem itsh = SWFMovie_add(mo, (SWFBlock)sh); SWFDisplayItem_setDepth(itsh, 3); SWFDisplayItem_setColorAdd(itsh, 0, 0, 0, -128); /* buttonChild should now have a total of 4 elements (UP,DOWN, OVER and ALL states) */ check_equals(mo, "typeof(_root.buttonChild)", "'object'"); check(mo, "_root.buttonChild instanceof Array"); check_equals(mo, "_root.buttonChild.realLength()", "4"); /* sprite for ALL states */ check_equals(mo, "typeof(_root.buttonChild[10])", "'object'"); check_equals(mo, "(_root.buttonChild[10].nam)", "'_level0.square1.button.instance5'"); check_equals(mo, "(_root.buttonChild[10].exe)", "1"); check_equals(mo, "(_root.buttonChild[10].uld)", "0"); /* sprite for UP state */ check_equals(mo, "typeof(_root.buttonChild[12])", "'object'"); check_equals(mo, "(_root.buttonChild[12].nam)", "'_level0.square1.button.instance6'"); check_equals(mo, "(_root.buttonChild[12].exe)", "5"); check_equals(mo, "(_root.buttonChild[12].uld)", "4"); /* sprite for OVER state */ check_equals(mo, "typeof(_root.buttonChild[13])", "'object'"); check_equals(mo, "(_root.buttonChild[13].nam)", "'_level0.square1.button.instance7'"); check_equals(mo, "(_root.buttonChild[13].exe)", "8"); check_equals(mo, "(_root.buttonChild[13].uld)", "8"); /* sprite for DOWN state */ check_equals(mo, "typeof(_root.buttonChild[14])", "'object'"); check_equals(mo, "(_root.buttonChild[14].nam)", "'_level0.square1.button.instance8'"); check_equals(mo, "(_root.buttonChild[14].exe)", "4"); check_equals(mo, "(_root.buttonChild[14].uld)", "4"); /* sprite for HIT state never constructed */ check_equals(mo, "typeof(_root.buttonChild[11])", "'undefined'"); add_actions(mo, "stop();" "_root.note('-- Added shape at higher depth --');" "_root.testno++;" "_root.note(_root.testno+'. Roll over the square.');" ); SWFMovie_nextFrame(mo); /* showFrame */ } /***************************************************** * * On sixth frame, disable the button * and check total tests so far * *****************************************************/ { add_actions(mo, "check_equals(square1.button.enabled, true);" "square1.button.enabled = 6;" "check_equals(square1.button.enabled, 6);" "square1.button.enabled = 'string';" "check_equals(square1.button.enabled, 'string');" "square1.button._visible = false;" "check_equals(square1.button.enabled, 'string');" "square1.button._visible = true;" "square1.button.enabled = false;" "stop();" "_root.totals(160);" "_root.note('-- Button disabled, try playing with it, nothing should happen --');" ); SWFMovie_nextFrame(mo); /* showFrame */ } /***************************************************** * * Save it... * *****************************************************/ puts("Saving " OUTPUT_FILENAME ); SWFMovie_save(mo, OUTPUT_FILENAME); return 0; }
int main(int argc, char** argv) { SWFMovie mo; const char *srcdir="."; char fdefont[256]; SWFMovieClip dejagnuclip; SWFDisplayItem it; /********************************************* * * Initialization * *********************************************/ if ( argc>1 ) srcdir=argv[1]; else { fprintf(stderr, "Usage: %s <mediadir>\n", argv[0]); return 1; } sprintf(fdefont, "%s/Bitstream-Vera-Sans.fdb", srcdir); FILE *font_file = fopen(fdefont, "r"); if ( font_file == NULL ) { perror(fdefont); exit(1); } SWFFont efont = loadSWFFontFromFile(font_file); puts("Setting things up"); Ming_init(); Ming_useSWFVersion (OUTPUT_VERSION); mo = newSWFMovie(); SWFMovie_setRate(mo, 1.0); SWFMovie_setDimension(mo, 800, 600); dejagnuclip = get_dejagnu_clip((SWFBlock)get_default_font(srcdir), 10, 0, 0, 800, 600); SWFMovie_add(mo, (SWFBlock)dejagnuclip); SWFMovie_nextFrame(mo); // 1st frame /********************************************* * * Add some textfields * *********************************************/ int y = 30; int inc = 30; it = add_text_field(mo, (SWFBlock)efont, "Normal", 1, 2, 3, SWFTEXTFIELD_ALIGN_LEFT, 10, 0, 0, 0, 255); SWFDisplayItem_moveTo(it, 50, y); SWFDisplayItem_setName(it, "tf1"); y += inc; it = add_text_field(mo, (SWFBlock)efont, "Transparent", 1, 2, 3, SWFTEXTFIELD_ALIGN_LEFT, 10, 0, 0, 0, 0); SWFDisplayItem_moveTo(it, 50, y); SWFDisplayItem_setName(it, "tf2"); y += inc; it = add_text_field(mo, (SWFBlock)efont, "X scaled by 16, no indent or " "margin", 0, 0, 0, SWFTEXTFIELD_ALIGN_LEFT, 10, 0, 0, 0, 255); SWFDisplayItem_moveTo(it, 50, y); SWFDisplayItem_scale(it, 16, 1); SWFDisplayItem_setName(it, "tf3"); y += inc; it = add_text_field(mo, (SWFBlock)efont, "X scaled by 16, indent 4", 4, 0, 0, SWFTEXTFIELD_ALIGN_LEFT, 10, 0, 0, 0, 255); SWFDisplayItem_moveTo(it, 50, y); SWFDisplayItem_scale(it, 16, 1); SWFDisplayItem_setName(it, "tf4"); y += inc; it = add_text_field(mo, (SWFBlock)efont, "X scaled by 16, left margin 4", 0, 4, 0, SWFTEXTFIELD_ALIGN_LEFT, 10, 0, 0, 0, 255); SWFDisplayItem_moveTo(it, 50, y); SWFDisplayItem_scale(it, 16, 1); SWFDisplayItem_setName(it, "tf5"); y += inc; it = add_text_field(mo, (SWFBlock)efont, "X scaled by 16, right margin 4", 0, 0, 4, SWFTEXTFIELD_ALIGN_LEFT, 10, 0, 0, 0, 255); SWFDisplayItem_moveTo(it, 50, y); SWFDisplayItem_scale(it, 16, 1); SWFDisplayItem_setName(it, "tf6"); y += inc; it = add_text_field(mo, (SWFBlock)efont, "X scaled by 16, left margin 4, " "indent 4", 4, 4, 0, SWFTEXTFIELD_ALIGN_LEFT, 10, 0, 0, 0, 255); SWFDisplayItem_moveTo(it, 50, y); SWFDisplayItem_scale(it, 16, 1); SWFDisplayItem_setName(it, "tf7"); y += inc; it = add_text_field(mo, (SWFBlock)efont, "X scaled by 8, no indent or margin", 0, 0, 0, SWFTEXTFIELD_ALIGN_LEFT, 10, 0, 0, 0, 255); SWFDisplayItem_moveTo(it, 50, y); SWFDisplayItem_scale(it, 8, 1); SWFDisplayItem_setName(it, "tf8"); y += inc; it = add_text_field(mo, (SWFBlock)efont, "X scaled by 8, indent 4", 4, 0, 0, SWFTEXTFIELD_ALIGN_LEFT, 10, 0, 0, 0, 255); SWFDisplayItem_moveTo(it, 50, y); SWFDisplayItem_scale(it, 8, 1); SWFDisplayItem_setName(it, "tf9"); y += inc; it = add_text_field(mo, (SWFBlock)efont, "X scaled by 0.2", 8, 8, 8, SWFTEXTFIELD_ALIGN_LEFT, 10, 0, 0, 0, 255); SWFDisplayItem_moveTo(it, 50, y); SWFDisplayItem_scale(it, 0.2, 1); SWFDisplayItem_setName(it, "tf10"); y += inc; it = add_text_field(mo, (SWFBlock)efont, "Y scaled by 4", 4, 4, 0, SWFTEXTFIELD_ALIGN_LEFT, 10, 0, 0, 0, 255); SWFDisplayItem_moveTo(it, 50, y); SWFDisplayItem_scale(it, 1, 4); SWFDisplayItem_setName(it, "tf11"); y += inc * 3; it = add_text_field(mo, (SWFBlock)efont, "Y scaled by 8", 4, 4, 0, SWFTEXTFIELD_ALIGN_LEFT, 10, 0, 0, 0, 255); SWFDisplayItem_moveTo(it, 50, y); SWFDisplayItem_scale(it, 1, 8); SWFDisplayItem_setName(it, "tf12"); // It's not clear how consistent the textWidth or textHeight // values are. As they are embedded, it may be possible to reproduce // exactly, in which case the test can be made more precise. check_equals(mo, "tf1._width", "84"); check_equals(mo, "tf1._height", "20"); xcheck_equals(mo, "tf1._x", "48"); xcheck_equals(mo, "tf1._y", "28"); xcheck_equals(mo, "tf1.textHeight", "23"); // Approx 46 add_actions(mo, "trace(tf1.textWidth);"); xcheck(mo, "tf1.textWidth >= 44 && tf1.textWidth <= 48"); check_equals(mo, "tf2._width", "84"); check_equals(mo, "tf2._height", "20"); xcheck_equals(mo, "tf2._x", "48"); xcheck_equals(mo, "tf2._y", "58"); xcheck_equals(mo, "tf2.textHeight", "23"); // Approx 78 add_actions(mo, "trace(tf2.textWidth);"); xcheck(mo, "tf2.textWidth >= 76 && tf2.textWidth <= 80"); check_equals(mo, "tf3._width", "1344"); check_equals(mo, "tf3._height", "20"); xcheck_equals(mo, "tf3._x", "18"); xcheck_equals(mo, "tf3._y", "88"); xcheck_equals(mo, "tf3.textHeight", "23"); // Approx 230 add_actions(mo, "trace(tf3.textWidth);"); xcheck(mo, "tf3.textWidth >= 225 && tf3.textWidth <= 235"); check_equals(mo, "tf4._width", "1344"); check_equals(mo, "tf4._height", "20"); xcheck_equals(mo, "tf4._x", "18"); xcheck_equals(mo, "tf4._y", "118"); xcheck_equals(mo, "tf4.textHeight", "23"); // Approx 156 add_actions(mo, "trace(tf4.textWidth);"); xcheck(mo, "tf4.textWidth >= 153 && tf4.textWidth <= 159"); check_equals(mo, "tf5._width", "1344"); check_equals(mo, "tf5._height", "20"); xcheck_equals(mo, "tf5._x", "18"); xcheck_equals(mo, "tf5._y", "148"); xcheck_equals(mo, "tf5.textHeight", "23"); // Approx 186 add_actions(mo, "trace(tf5.textWidth);"); xcheck(mo, "tf5.textWidth >= 183 && tf5.textWidth <= 189"); check_equals(mo, "tf6._width", "1344"); check_equals(mo, "tf6._height", "20"); xcheck_equals(mo, "tf6._x", "18"); xcheck_equals(mo, "tf6._y", "178"); xcheck_equals(mo, "tf6.textHeight", "23"); // Approx 194 add_actions(mo, "trace(tf6.textWidth);"); xcheck(mo, "tf6.textWidth >= 189 && tf6.textWidth <= 199"); check_equals(mo, "tf7._width", "1344"); check_equals(mo, "tf7._height", "20"); xcheck_equals(mo, "tf7._x", "18"); xcheck_equals(mo, "tf7._y", "208"); xcheck_equals(mo, "tf7.textHeight", "23"); // Approx 247 add_actions(mo, "trace(tf7.textWidth);"); xcheck(mo, "tf7.textWidth >= 240 && tf7.textWidth <= 254"); check_equals(mo, "tf8._width", "672"); check_equals(mo, "tf8._height", "20"); xcheck_equals(mo, "tf8._x", "34"); xcheck_equals(mo, "tf8._y", "238"); xcheck_equals(mo, "tf8.textHeight", "23"); // Approx 222 add_actions(mo, "trace(tf8.textWidth);"); xcheck(mo, "tf8.textWidth >= 217 && tf8.textWidth <= 227"); check_equals(mo, "tf9._width", "672"); check_equals(mo, "tf9._height", "20"); xcheck_equals(mo, "tf9._x", "34"); xcheck_equals(mo, "tf9._y", "268"); xcheck_equals(mo, "tf9.textHeight", "23"); // Approx 148 add_actions(mo, "trace(tf9.textWidth);"); xcheck(mo, "tf9.textWidth >= 144 && tf9.textWidth <= 152"); check_equals(mo, "tf10._width", "16.8"); check_equals(mo, "tf10._height", "20"); xcheck_equals(mo, "tf10._x", "49.6"); xcheck_equals(mo, "tf10._y", "298"); xcheck_equals(mo, "tf10.textHeight", "23"); // Approx 99 add_actions(mo, "trace(tf10.textWidth);"); xcheck(mo, "tf10.textWidth >= 95 && tf10.textWidth <= 103"); // The textHeight for the following two fields varies. check_equals(mo, "tf11._width", "84"); check_equals(mo, "tf11._height", "80"); xcheck_equals(mo, "tf11._x", "48"); xcheck_equals(mo, "tf11._y", "322"); xcheck_equals(mo, "tf11.textHeight", "23"); // Approx 86 add_actions(mo, "trace(tf11.textWidth);"); xcheck(mo, "tf11.textWidth >= 84 && tf11.textWidth <= 88"); check_equals(mo, "tf12._width", "84"); check_equals(mo, "tf12._height", "160"); xcheck_equals(mo, "tf12._x", "48"); xcheck_equals(mo, "tf12._y", "404"); xcheck_equals(mo, "tf12.textHeight", "23"); // Approx 86 add_actions(mo, "trace(tf12.textWidth);"); xcheck(mo, "tf12.textWidth >= 84 && tf12.textWidth <= 88"); add_actions(mo, "totals(); stop();"); SWFMovie_nextFrame(mo); /***************************************************** * * Output movie * *****************************************************/ puts("Saving " OUTPUT_FILENAME ); SWFMovie_save(mo, OUTPUT_FILENAME); return 0; }
int main(int argc, char** argv) { SWFMovie mo; SWFMovieClip mc1, mc2, dejagnuclip; SWFDisplayItem it1, it2; const char *srcdir="."; if ( argc>1 ) srcdir=argv[1]; else { fprintf(stderr, "Usage: %s <mediadir>\n", argv[0]); return 1; } Ming_init(); mo = newSWFMovieWithVersion(OUTPUT_VERSION); SWFMovie_setDimension(mo, 800, 600); SWFMovie_setRate (mo, 12.0); dejagnuclip = get_dejagnu_clip((SWFBlock)get_default_font(srcdir), 10, 0, 0, 800, 600); SWFMovie_add(mo, (SWFBlock)dejagnuclip); add_actions(mo, "testvar1 = 0; testvar2 = 0;"); SWFMovie_nextFrame(mo); // frame1 mc1 = newSWFMovieClip(); SWFMovieClip_nextFrame(mc1); it1 = SWFMovie_add(mo, (SWFBlock)mc1); SWFDisplayItem_setName(it1, "static_mc1"); SWFDisplayItem_addAction(it1, newSWFAction( " this.createEmptyMovieClip('dyn1', 100); " " _root.check_equals(dyn1.getDepth(), 100);" " _root.dyn1Ref = dyn1;" // shouldn't be executed. " dyn1.onUnload = function () { _root.check(false); } ;" "trace(this);" ), SWFACTION_UNLOAD); mc2 = newSWFMovieClip(); SWFMovieClip_nextFrame(mc2); it2 = SWFMovie_add(mo, (SWFBlock)mc2); SWFDisplayItem_setName(it2, "static_mc2"); SWFDisplayItem_addAction(it2, newSWFAction( " this.createEmptyMovieClip('dyn2', 200); " " _root.check_equals(dyn2.getDepth(), 200);" " dyn2.onUnload = function () {_root.dyn2testvar = 'executed'; } ;" ), SWFACTION_ONLOAD); SWFDisplayItem_addAction(it2, newSWFAction( " _root.check_equals(_level0.dyn1Ref.getDepth(), 100);" " _level0.dyn1Ref.swapDepths(101); " // Check that we can still swap the new child created in onClipUnload(mc1) // Note mc1 is already unloaded(this is in mc2.unload). " _root.check_equals(_level0.dyn1Ref.getDepth(), 101);" ), SWFACTION_UNLOAD); SWFMovie_nextFrame(mo); // frame2 SWFDisplayItem_remove(it1); SWFDisplayItem_remove(it2); SWFMovie_nextFrame(mo); // frame3 check_equals(mo, "typeof(_root.dyn1Ref)", "'movieclip'"); check_equals(mo, "_root.dyn1Ref.valueof()", "null"); // check that dyn2.onUnload was triggered check_equals(mo, "_root.dyn2testvar", "'executed'"); SWFMovie_nextFrame(mo); // frame4 add_actions(mo, " _root.totals(7); stop(); "); SWFMovie_nextFrame(mo); // frame5 //Output movie puts("Saving " OUTPUT_FILENAME ); SWFMovie_save(mo, OUTPUT_FILENAME); return 0; }
int main(int argc, char** argv) { SWFMovie mo; SWFMovieClip dejagnuclip; SWFMovieClip mc1, mc11; SWFDisplayItem it1, it11; const char *srcdir="."; if ( argc>1 ) srcdir=argv[1]; else { fprintf(stderr, "Usage: %s <mediadir>\n", argv[0]); return 1; } Ming_init(); mo = newSWFMovieWithVersion(OUTPUT_VERSION); SWFMovie_setDimension(mo, 800, 600); SWFMovie_setRate (mo, 12.0); // _root.frame1 dejagnuclip = get_dejagnu_clip((SWFBlock)get_default_font(srcdir), 10, 0, 0, 800, 600); SWFMovie_add(mo, (SWFBlock)dejagnuclip); add_actions(mo, " x1=0; x2=0; x3=0; x4=0; x5=0; x6=0; x7=0; x8=0; x9=0; x10=0; "); SWFMovie_nextFrame(mo); // // _root.frame2: define movieclips and some functions. // // Define mc11 mc11 = newSWFMovieClip(); add_clip_actions(mc11, " func1 = function () { _root.x1=1; _root.x2=this; }; " "stop();"); SWFMovieClip_nextFrame(mc11); add_clip_actions(mc11, "_root.x3 = 1; stop();"); SWFMovieClip_nextFrame(mc11); add_clip_actions(mc11, "_root.x4 = 1; stop();"); SWFMovieClip_nextFrame(mc11); // Define mc1, add mc11 to mc1 mc1 = newSWFMovieClip(); it11 = SWFMovieClip_add(mc1, (SWFBlock)mc11); SWFDisplayItem_setDepth(it11, 3); SWFDisplayItem_setName(it11, "mc11"); add_clip_actions(mc1, " func2 = function () { _root.x5=1; _root.x6=this; }; " "stop();"); SWFMovieClip_nextFrame(mc1); add_clip_actions(mc1, "_root.x7 = 1; stop();"); SWFMovieClip_nextFrame(mc1); add_clip_actions(mc1, "_root.x8 = 1; stop();"); SWFMovieClip_nextFrame(mc1); // place mc1 it1 = SWFMovie_add(mo, (SWFBlock)mc1); SWFDisplayItem_setDepth(it1, 4); SWFDisplayItem_setName(it1, "mc1"); SWFMovie_nextFrame(mo); // // _root.frame3: invoke function calls // add_actions(mo, "asm{" "push 0 " "push '_root.mc1.mc11.func1' " // valid format "callfunction " "};"); add_actions(mo, "asm{" "push 2 " "push 1 " "push '_root.mc1.mc11.gotoAndStop' " // valid format "callfunction " "};"); add_actions(mo, "asm{" "push 0 " "push '_root.mc1:func2' " // valid format "callfunction " "};"); add_actions(mo, "asm{" "push 2 " "push 1 " "push '/mc1/:gotoAndStop' " // valid format "callfunction " "};"); add_actions(mo, "asm{" "push 3 " "push 1 " "push '/_root/mc1/mc11/gotoAndStop' " // *invalid* format "callfunction " "};"); add_actions(mo, "asm{" "push 3 " "push 1 " "push '_root:mc1:gotoAndStop' " // valid format "callfunction " "};"); SWFMovie_nextFrame(mo); // // _root.frame4: check if the function call succeeded // check_equals(mo, "_root.x1", "1"); check_equals(mo, "_root.x2", "_root.mc1.mc11"); check_equals(mo, "_root.x3", "1"); check_equals(mo, "_root.x4", "0"); check_equals(mo, "_root.x5", "1"); check_equals(mo, "_root.x6", "_root.mc1"); check_equals(mo, "_root.x7", "1"); check_equals(mo, "_root.x8", "1"); add_actions(mo, " _root.totals(); stop(); "); SWFMovie_nextFrame(mo); //Output movie puts("Saving " OUTPUT_FILENAME ); SWFMovie_save(mo, OUTPUT_FILENAME); return 0; }
int main(int argc, char** argv) { SWFMovie mo; SWFMovieClip dejagnuclip; SWFDisplayItem it; SWFShape sh1,sh2; const char *srcdir="."; if ( argc>1 ) srcdir=argv[1]; else { //fprintf(stderr, "Usage: %s <mediadir>\n", argv[0]); //return 1; } Ming_init(); mo = newSWFMovie(); SWFMovie_setDimension(mo, 800, 600); //SWFMovie_setRate (mo, 1.0); dejagnuclip = get_dejagnu_clip((SWFBlock)get_default_font(srcdir), 10, 0, 0, 800, 600); SWFMovie_add(mo, (SWFBlock)dejagnuclip); SWFMovie_nextFrame(mo); sh1 = make_fill_square (100, 300, 60, 60, 255, 0, 0, 255, 0, 0); sh2 = make_fill_square (300, 300, 60, 60, 255, 0, 0, 0, 0, 0); it = SWFMovie_add(mo, (SWFBlock)sh1); SWFDisplayItem_setName(it, "sh1"); SWFDisplayItem_setDepth(it, 3); //place the sh1 DisplayObject at depth 3; it = SWFMovie_add(mo, (SWFBlock)sh2); SWFDisplayItem_setName(it, "sh2"); SWFDisplayItem_setDepth(it, 4); //place the sh2 DisplayObject at depth 4; check(mo, "sh1 != undefined"); check(mo, "sh2 != undefined"); // Do these checks mean that shapes are movieclips? // seems not. check_equals(mo, "typeof(sh1)", "'movieclip'"); check_equals(mo, "typeof(sh2)", "'movieclip'"); check_equals(mo, "typeof(_root)", "'movieclip'"); add_actions(mo, "sh1.var1 = 10;" "sh2.var2 = 20;" ); // Do these checks mean that we can add variables to shapes? // seems not, variable are added to the _root, interesting. check_equals(mo, "sh1.var1", "10"); check_equals(mo, "sh2.var2", "20"); check_equals(mo, "_root.var1", "10"); check_equals(mo, "_root.var2", "20"); check_equals(mo, "sh1._x", "0"); check_equals(mo, "sh2._x", "0"); add_actions(mo, "sh1._x = 0;" "sh2._x = 400;" ); check_equals(mo, "sh1._x", "400"); check_equals(mo, "sh2._x", "400"); check_equals(mo, "_root._x", "400"); add_actions(mo, "_root._x = 0;" ); /* cleanup */ // Do these checks mean that shapes are *not* movieclips? check_equals(mo, "typeof(sh1.getDepth())", "'undefined'"); check_equals(mo, "typeof(sh2.getDepth())", "'undefined'"); // Do these checks mean that shapes are *not* movieclips? check_equals(mo, "typeof(getInstanceAtDepth(-16381))", "'undefined'"); check_equals(mo, "typeof(getInstanceAtDepth(-16380))", "'undefined'"); SWFMovie_nextFrame(mo); /* * UdoG's drawing * * See DrawingApiTest.as (inv8) * */ { /* using left fill, non-closed paths */ SWFDisplayItem it1, it2; SWFShape sh = newSWFShape(); SWFMovieClip mc = newSWFMovieClip(); SWFShape_setLineStyle(sh, 1, 0, 0, 0, 255); SWFShape_setLeftFillStyle(sh, SWFShape_addSolidFillStyle(sh, 0, 255, 0, 255)); SWFShape_movePenTo(sh, 20, 10); /* 0 */ SWFShape_drawLineTo(sh, 40, 10); /* 1 */ SWFShape_drawLineTo(sh, 40, 40); /* 2 */ SWFShape_drawLineTo(sh, 20, 40); /* 3 */ SWFShape_drawLineTo(sh, 20, 10); /* 4 */ SWFShape_drawLineTo(sh, 10, 10); /* 5 */ SWFShape_drawLineTo(sh, 10, 20); /* 6 */ SWFShape_drawLineTo(sh, 30, 20); /* 7 */ SWFShape_drawLineTo(sh, 30, 30); /* 8 */ SWFShape_drawLineTo(sh, 20, 30); /* 9 */ it1 = SWFMovieClip_add(mc, (SWFBlock)sh); // Test that clip events are not invoked for shapes #if 0 // current Ming HEAD chokes if we add an onClipConstruct event... SWFDisplayItem_addAction(it1, newSWFAction( "_root.check(false && 'clip event for shape should not be executed');" SWFACTION_CONSTRUCT); #endif SWFDisplayItem_addAction(it1, newSWFAction( "_root.check(false && 'clip event for shape should not be executed');" ), SWFACTION_ENTERFRAME); SWFDisplayItem_addAction(it1, newSWFAction( "_root.check(false && 'clip event for shape should not be executed');" ), SWFACTION_ONLOAD); SWFDisplayItem_addAction(it1, newSWFAction( "_root.check(false && 'clip event for shape should not be executed');" ), SWFACTION_UNLOAD); SWFDisplayItem_addAction(it1, newSWFAction( "_root.check(false && 'clip event for shape should not be executed');" ), SWFACTION_MOUSEMOVE); SWFDisplayItem_addAction(it1, newSWFAction( "_root.check(false && 'clip event for shape should not be executed');" ), SWFACTION_MOUSEDOWN); // None of these should be executed SWFDisplayItem_addAction(it1, newSWFAction( "_root.check(false && 'clip event for shape should not be executed');" ), SWFACTION_ONLOAD); SWFDisplayItem_moveTo(it1, 80, 120); SWFDisplayItem_scale(it1, 2, 2); SWFMovieClip_nextFrame(mc); it2 = SWFMovie_add(mo, (SWFBlock)mc); } { /* using right fill, non-closed paths */ SWFDisplayItem it; SWFShape sh = newSWFShape(); SWFMovieClip mc = newSWFMovieClip(); SWFShape_setLineStyle(sh, 1, 0, 0, 0, 255); SWFShape_setLeftFillStyle(sh, SWFShape_addSolidFillStyle(sh, 0, 255, 0, 255)); SWFShape_movePenTo(sh, 20, 10); /* 0 */ SWFShape_drawLineTo(sh, 40, 10); /* 1 */ SWFShape_drawLineTo(sh, 40, 40); /* 2 */ SWFShape_drawLineTo(sh, 20, 40); /* 3 */ SWFShape_drawLineTo(sh, 20, 10); /* 4 */ SWFShape_drawLineTo(sh, 10, 10); /* 5 */ SWFShape_drawLineTo(sh, 10, 20); /* 6 */ SWFShape_drawLineTo(sh, 30, 20); /* 7 */ SWFShape_drawLineTo(sh, 30, 30); /* 8 */ SWFShape_drawLineTo(sh, 20, 30); /* 9 */ it = SWFMovieClip_add(mc, (SWFBlock)sh); SWFDisplayItem_moveTo(it, 200, 120); SWFDisplayItem_scale(it, 2, 2); SWFMovieClip_nextFrame(mc); it = SWFMovie_add(mo, (SWFBlock)mc); } { /* using left fill, closed paths */ SWFDisplayItem it; SWFShape sh = newSWFShape(); SWFMovieClip mc = newSWFMovieClip(); SWFShape_setLineStyle(sh, 1, 0, 0, 0, 255); SWFShape_setLeftFillStyle(sh, SWFShape_addSolidFillStyle(sh, 255, 0, 0, 255)); SWFShape_movePenTo(sh, 20, 10); /* 0 */ SWFShape_drawLineTo(sh, 40, 10); /* 1 */ SWFShape_drawLineTo(sh, 40, 40); /* 2 */ SWFShape_drawLineTo(sh, 20, 40); /* 3 */ SWFShape_drawLineTo(sh, 20, 10); /* 4 */ SWFShape_drawLineTo(sh, 10, 10); /* 5 */ SWFShape_drawLineTo(sh, 10, 20); /* 6 */ SWFShape_drawLineTo(sh, 30, 20); /* 7 */ SWFShape_drawLineTo(sh, 30, 30); /* 8 */ SWFShape_drawLineTo(sh, 20, 30); /* 9 */ SWFShape_drawLineTo(sh, 20, 10); /* 0 */ it = SWFMovieClip_add(mc, (SWFBlock)sh); SWFDisplayItem_moveTo(it, 80, 200); SWFDisplayItem_scale(it, 2, 2); SWFMovieClip_nextFrame(mc); it = SWFMovie_add(mo, (SWFBlock)mc); } { /* using right fill, closed paths */ SWFDisplayItem it; SWFShape sh = newSWFShape(); SWFMovieClip mc = newSWFMovieClip(); SWFShape_setLineStyle(sh, 1, 0, 0, 0, 255); SWFShape_setRightFillStyle(sh, SWFShape_addSolidFillStyle(sh, 255, 0, 0, 255)); SWFShape_movePenTo(sh, 20, 10); /* 0 */ SWFShape_drawLineTo(sh, 40, 10); /* 1 */ SWFShape_drawLineTo(sh, 40, 40); /* 2 */ SWFShape_drawLineTo(sh, 20, 40); /* 3 */ SWFShape_drawLineTo(sh, 20, 10); /* 4 */ SWFShape_drawLineTo(sh, 10, 10); /* 5 */ SWFShape_drawLineTo(sh, 10, 20); /* 6 */ SWFShape_drawLineTo(sh, 30, 20); /* 7 */ SWFShape_drawLineTo(sh, 30, 30); /* 8 */ SWFShape_drawLineTo(sh, 20, 30); /* 9 */ SWFShape_drawLineTo(sh, 20, 10); /* 0 */ it = SWFMovieClip_add(mc, (SWFBlock)sh); SWFDisplayItem_moveTo(it, 200, 200); SWFDisplayItem_scale(it, 2, 2); SWFMovieClip_nextFrame(mc); it = SWFMovie_add(mo, (SWFBlock)mc); } add_actions(mo, "_root.totals(); stop();"); SWFMovie_nextFrame(mo); //Output movie puts("Saving " OUTPUT_FILENAME ); SWFMovie_save(mo, OUTPUT_FILENAME); return 0; }
int main(int argc, char** argv) { SWFMovie mo; SWFMovieClip mc1, mc2, dejagnuclip; SWFShape sh1, sh2; SWFDisplayItem it1, it2; const char *srcdir="."; if ( argc>1 ) srcdir=argv[1]; else { fprintf(stderr, "Usage: %s <mediadir>\n", argv[0]); return 1; } Ming_init(); mo = newSWFMovieWithVersion(OUTPUT_VERSION); SWFMovie_setDimension(mo, 800, 600); SWFMovie_setRate (mo, 12.0); dejagnuclip = get_dejagnu_clip((SWFBlock)get_default_font(srcdir), 10, 0, 0, 800, 600); SWFMovie_add(mo, (SWFBlock)dejagnuclip); add_actions(mo, "testvar1 = 0; testvar2 = 0;"); SWFMovie_nextFrame(mo); // frame1 // // Define movieClips // mc1 = newSWFMovieClip(); sh1 = make_fill_square (100, 100, 60, 60, 255, 0, 0, 255, 0, 0); SWFMovieClip_add(mc1, (SWFBlock)sh1); SWFMovieClip_nextFrame(mc1); mc2 = newSWFMovieClip(); sh2 = make_fill_square (300, 100, 60, 60, 255, 0, 0, 0, 255, 0); SWFMovieClip_add(mc2, (SWFBlock)sh2); SWFMovieClip_nextFrame(mc2); SWFMovie_nextFrame(mo); // frame2 // // Place mc1 at depth 3, place mc1 at depth3 again with a different name; // Observed behaviour: later place does not create a new DisplayObject // it1 = SWFMovie_add(mo, (SWFBlock)mc1); SWFDisplayItem_setDepth(it1, 3); SWFDisplayItem_setName(it1, "static_mc1"); SWFDisplayItem_addAction(it1, newSWFAction(" _root.testvar1++; trace(this); trace(_root.testvar1); "), SWFACTION_INIT | SWFACTION_CONSTRUCT | SWFACTION_ONLOAD); it2 = SWFMovie_add(mo, (SWFBlock)mc2); SWFDisplayItem_setDepth(it2, 3); SWFDisplayItem_setName(it2, "static_mc2"); SWFDisplayItem_addAction(it2, newSWFAction(" _root.testvar2++; trace(this); trace(_root.testvar2); "), SWFACTION_INIT | SWFACTION_CONSTRUCT | SWFACTION_ONLOAD); check_equals(mo, "typeof(static_mc1)", "'movieclip'"); if(OUTPUT_VERSION > 5) { // check that "static_mc2" doesn't get placed check_equals(mo, "typeof(static_mc2)", "'undefined'"); } else { // check that "static_mc2" does get placed check_equals(mo, "typeof(static_mc2)", "'movieclip'"); } SWFMovie_nextFrame(mo); // frame3 if(OUTPUT_VERSION > 5) { check_equals(mo, "testvar1", "3"); check_equals(mo, "testvar2", "0"); } else { // swf5 does not support CONSTRUCT event check_equals(mo, "testvar1", "2"); check_equals(mo, "testvar2", "2"); } // // Place mc2 at depth 3 again. // Observed behaviour: no new DisplayObject gets created // it2 = SWFMovie_add(mo, (SWFBlock)mc2); SWFDisplayItem_setDepth(it2, 3); SWFDisplayItem_setName(it2, "static_mc3"); check_equals(mo, "typeof(static_mc1)", "'movieclip'"); if(OUTPUT_VERSION > 5) { // check that "static_mc3" doesn't get placed check_equals(mo, "typeof(static_mc3)", "'undefined'"); } else { // check that "static_mc3" does get placed check_equals(mo, "typeof(static_mc3)", "'movieclip'"); } SWFMovie_nextFrame(mo); // frame4 // // Place mc1 at depth 3 again with ratio set to 0.2 // Observed behaviour: no new DisplayObject get placed(created). // it2 = SWFMovie_add(mo, (SWFBlock)mc1); SWFDisplayItem_setDepth(it2, 3); SWFDisplayItem_setName(it2, "static_mc4"); SWFDisplayItem_setRatio(it2, 0.2); check_equals(mo, "typeof(static_mc1)", "'movieclip'"); if(OUTPUT_VERSION > 5) { // check that "static_mc4" doesn't get placed. check_equals(mo, "typeof(static_mc4)", "'undefined'"); } else { // check that "static_mc4" does get placed. check_equals(mo, "typeof(static_mc4)", "'movieclip'"); } SWFMovie_nextFrame(mo); // frame5 // // Place mc2 at depth 3 again with ratio set to 0.2 // Observed behaviour: no new DisplayObject get placed(created). // it2 = SWFMovie_add(mo, (SWFBlock)mc2); SWFDisplayItem_setDepth(it2, 3); SWFDisplayItem_setName(it2, "static_mc5"); SWFDisplayItem_setRatio(it2, 0.2); check_equals(mo, "typeof(static_mc1)", "'movieclip'"); if(OUTPUT_VERSION > 5) { // check that "static_mc5" doesn't get placed. check_equals(mo, "typeof(static_mc5)", "'undefined'"); } else { // check that "static_mc5" does get placed. check_equals(mo, "typeof(static_mc5)", "'movieclip'"); } SWFMovie_nextFrame(mo); // frame6 // // Odd, where are the movieclips now? // Note that all those movieclips are defined above but not now. // if(OUTPUT_VERSION <= 5) { add_actions(mo, "check_equals(typeof(static_m1), 'undefined');" "check_equals(typeof(static_m2), 'undefined');" "check_equals(typeof(static_m3), 'undefined');" "check_equals(typeof(static_m4), 'undefined');" "check_equals(typeof(static_m5), 'undefined');" ); } add_actions(mo, " _root.totals(); stop(); "); SWFMovie_nextFrame(mo); // frame7 //Output movie puts("Saving " OUTPUT_FILENAME ); SWFMovie_save(mo, OUTPUT_FILENAME); return 0; }
static void check_all (gl_list_t list1, gl_list_t list2, gl_list_t list3) { check_equals (list1, list2); check_equals (list1, list3); }
int main(int argc, char** argv) { SWFMovie mo; SWFDisplayItem it1, it2, it3; SWFDisplayItem it41; SWFDisplayItem it51; SWFMovieClip mc1, mc2, mc3, dejagnuclip; SWFMovieClip mc4, mc41; SWFMovieClip mc5, mc51; SWFShape sh1, sh2, sh3; const char *srcdir="."; if ( argc>1 ) srcdir=argv[1]; else { //fprintf(stderr, "Usage: %s <mediadir>\n", argv[0]); //return 1; } Ming_init(); Ming_useSWFVersion (OUTPUT_VERSION); mo = newSWFMovie(); SWFMovie_setDimension(mo, 800, 600); SWFMovie_setRate(mo, 12); dejagnuclip = get_dejagnu_clip((SWFBlock)get_default_font(srcdir), 10, 0, 0, 800, 600); SWFMovie_add(mo, (SWFBlock)dejagnuclip); add_actions(mo, " haslooped1=false; haslooped2=false; haslooped3=false;" " mc1Initialized=0; mc1Unloaded=0;" " mc2Initialized=0; mc2Unloaded=0;" " mc3Initialized=0; mc3Unloaded=0;" " asOrder='0+';"); SWFMovie_nextFrame(mo); // frame1 sh1 = make_fill_square (100, 100, 60, 60, 255, 0, 0, 255, 0, 0); mc1 = newSWFMovieClip(); SWFMovieClip_add(mc1, (SWFBlock)sh1); SWFMovieClip_nextFrame(mc1); sh2 = make_fill_square (200, 200, 60, 60, 0, 0, 0, 0, 0, 0); mc2 = newSWFMovieClip(); SWFMovieClip_add(mc2, (SWFBlock)sh2); SWFMovieClip_nextFrame(mc2); sh3 = make_fill_square (300, 300, 60, 60, 0, 0, 0, 0, 0, 0); mc3 = newSWFMovieClip(); SWFMovieClip_add(mc3, (SWFBlock)sh3); SWFMovieClip_nextFrame(mc3); it1 = SWFMovie_add(mo, (SWFBlock)mc1); SWFDisplayItem_setName(it1, "mc1"); SWFDisplayItem_setDepth(it1, 100); SWFDisplayItem_addAction(it1, newSWFAction( "_root.note(this+' initialized');" "_root.mc1Initialized++;" "_root.asOrder += '1+';" ), SWFACTION_INIT); SWFDisplayItem_addAction(it1, newSWFAction( "_root.note(this+' unloaded');" "_root.mc1Unloaded++;" "_root.asOrder += '3+';" ), SWFACTION_UNLOAD); SWFMovie_nextFrame(mo); // frame2 SWFDisplayItem_remove(it1); it2 = SWFMovie_add(mo, (SWFBlock)mc2); SWFDisplayItem_setName(it2, "mc2"); SWFDisplayItem_setRatio(it2, 0.1); SWFDisplayItem_setDepth(it2, 100); SWFDisplayItem_addAction(it2, newSWFAction( "_root.note(this+' initialized');" "_root.mc2Initialized++;" "_root.asOrder += '2+';" ), SWFACTION_INIT); SWFDisplayItem_addAction(it2, newSWFAction( "_root.note(this+' unloaded');" "_root.mc2Unloaded++;" "_root.asOrder += '5+';" ), SWFACTION_UNLOAD); SWFMovie_nextFrame(mo); // frame3 SWFDisplayItem_remove(it2); it3 = SWFMovie_add(mo, (SWFBlock)mc3); SWFDisplayItem_setName(it3, "mc3"); SWFDisplayItem_setRatio(it3, 0.2); SWFDisplayItem_setDepth(it3, 100); SWFDisplayItem_addAction(it3, newSWFAction( "_root.note(this+' initialized');" "_root.mc3Initialized++;" "_root.asOrder += '4+';" ), SWFACTION_INIT); SWFDisplayItem_addAction(it3, newSWFAction( "_root.note(this+' unloaded');" "_root.mc3Unloaded++;" ), SWFACTION_UNLOAD); SWFMovie_nextFrame(mo); // frame4 SWFMovie_nextFrame(mo); // frame 5 add_actions(mo, "if(! haslooped1) {" " gotoAndPlay(5);" " haslooped1 = true;" "}" ); SWFMovie_nextFrame(mo); // frame 6 check_equals(mo, "mc1Initialized", "2"); check_equals(mo, "mc2Initialized", "2"); check_equals(mo, "mc3Initialized", "1"); check_equals(mo, "mc1Unloaded", "2"); check_equals(mo, "mc2Unloaded", "2"); check_equals(mo, "mc3Unloaded", "0"); xcheck_equals(mo, "asOrder", "'0+1+2+3+4+5+1+2+3+5+'"); SWFMovie_nextFrame(mo); // frame 7 // // ==case 2== // mc4 = newSWFMovieClip(); mc41 = newSWFMovieClip(); SWFMovieClip_nextFrame(mc41); it41 = SWFMovieClip_add(mc4, (SWFBlock)mc41); add_clip_actions(mc4, "_root.check_equals(this._target, '/instance3');" "inst = this.getInstanceAtDepth(-16383);" "if(! haslooped2) {" " haslooped2 = true;" " _root.check_equals(inst._target, '/instance3/instance4');" "} else {" " _root.check_equals(inst._target, '/instance3/instance5');" " stop();" "}" ); SWFMovieClip_nextFrame(mc4); SWFDisplayItem_remove(it41); SWFMovieClip_nextFrame(mc4); SWFMovie_add(mo, mc4); SWFMovie_nextFrame(mo); // frame 9 SWFMovie_nextFrame(mo); // frame 10 // // ==case 3== // mc5 = newSWFMovieClip(); mc51 = newSWFMovieClip(); SWFMovieClip_nextFrame(mc51); it51 = SWFMovieClip_add(mc5, (SWFBlock)mc51); add_clip_actions(mc5, "_root.check_equals(this._target, '/instance6');" "inst = this.getInstanceAtDepth(-16383);" "if(! haslooped3) {" " haslooped3 = true;" " _root.check_equals(inst._target, '/instance6/instance7');" "} else {" " _root.check_equals(inst._target, '/instance6/instance7');" " stop();" "}" ); SWFMovieClip_nextFrame(mc5); SWFMovieClip_nextFrame(mc5); SWFMovie_add(mo, mc5); SWFMovie_nextFrame(mo); // frame 11 SWFMovie_nextFrame(mo); // frame 12 SWFMovie_nextFrame(mo); // frame 13 mc5 = newSWFMovieClip(); add_clip_actions(mc5, "_root.check_equals(this._target, '/instance9');"); SWFMovieClip_nextFrame(mc5); SWFMovie_add(mo, mc5); SWFMovie_nextFrame(mo); // frame 14 add_actions(mo, "totals(16); stop();"); SWFMovie_nextFrame(mo); // frame 15 //Output movie puts("Saving " OUTPUT_FILENAME ); SWFMovie_save(mo, OUTPUT_FILENAME); return 0; }
int main(int argc, char** argv) { SWFMovie mo; const char *srcdir="."; SWFMovieClip dejagnuclip; char loadvars[1048]; char loademptyvars[1048]; /********************************************* * * Initialization * *********************************************/ if ( argc>1 ) srcdir=argv[1]; else { fprintf(stderr, "Usage: %s\n", argv[0]); return 1; } sprintf(loadvars, "e = l.load('%s/vars2.txt');", srcdir); sprintf(loademptyvars, "e = l.load('%s/empty.txt');", srcdir); puts("Setting things up"); Ming_init(); Ming_useSWFVersion (OUTPUT_VERSION); Ming_setScale(20.0); /* let's talk pixels */ mo = newSWFMovie(); SWFMovie_setRate(mo, 12); SWFMovie_setDimension(mo, 640, 400); /********************************************* * * Body * *********************************************/ dejagnuclip = get_dejagnu_clip((SWFBlock)get_default_font(srcdir), 10, 0, 80, 800, 600); SWFMovie_add(mo, (SWFBlock)dejagnuclip); add_actions(mo, "odatB = LoadVars.prototype.onData;" "olB = LoadVars.prototype.onLoad;" "odecB = LoadVars.prototype.decode;" "loadString = '';" "decodeString = '';" "dataString = '';" "callCount = 0;"); add_actions(mo, "ourLoad = function(arg) {" "loadString += callCount + ': onLoad called with ' + " "typeof(arg) + ' argument ' + arg;" "callCount++;" "play();" "};"); add_actions(mo, "ourData = function(arg) {" "trace('onData called');" "dataString += callCount + ': onData called with ' + " "typeof(arg) + ' argument ' + arg;" "callCount++;" "play();" "};"); add_actions(mo, "decodeCalled = 0;"); add_actions(mo, "ourDecode = function(arg) {" "decodeString += 'decode called with ' + typeof(arg)" "+ ' argument ' + arg;" "decodeCalled++;" "};"); /// The decode method is overwritten to see where it gets /// called from. We don't call it ourselves. Don't forget to /// overwrite it again when the LoadVars object is constructed again. /// What happens when load fails? // /// The onLoad method is called from the default implementation of /// onData. The "loaded" property is immediately set to false on a /// call to "load". SWFMovie_nextFrame(mo); /// onData add_actions(mo, "l = new LoadVars;"); check_equals(mo, "l.loaded", "undefined"); add_actions(mo, "l.decode = ourDecode;"); add_actions(mo, "l.onData = ourData;" "dataString = '';" "e = l.load('fail');"); check_equals(mo, "e", "true"); add_actions(mo, "stop();"); /// Wait for data before proceeding to next frame. SWFMovie_nextFrame(mo); // Check result, restore state. check_equals(mo, "dataString", "'0: onData called with undefined argument undefined'"); check_equals(mo, "l.loaded", "false"); add_actions(mo, "l.onData = odatB;"); /// onLoad add_actions(mo, "l = new LoadVars;"); check_equals(mo, "l.loaded", "undefined"); add_actions(mo, "l.decode = ourDecode;"); add_actions(mo, "l.onLoad = ourLoad;" "loadString = '';" "e = l.load('fail');"); check_equals(mo, "e", "true"); add_actions(mo, "stop();"); SWFMovie_nextFrame(mo); check_equals(mo, "loadString", "'1: onLoad called with boolean argument false'"); check_equals(mo, "l.loaded", "false"); add_actions(mo, "l.onLoad = olB;"); /// Both onData and onLoad add_actions(mo, "l = new LoadVars;"); check_equals(mo, "l.loaded", "undefined"); add_actions(mo, "l.decode = ourDecode;"); add_actions(mo, "l.onLoad = ourLoad;" "l.onData = ourData;" "loadString = '';" "dataString = '';" "e = l.load('fail');"); check_equals(mo, "e", "true"); add_actions(mo, "stop();"); SWFMovie_nextFrame(mo); check_equals(mo, "loadString", "''"); check_equals(mo, "dataString", "'2: onData called with undefined argument undefined'"); check_equals(mo, "l.loaded", "false"); add_actions(mo, "l.onLoad = olB;" "l.onData = odatB;"); /// What happens when load succeeds? // /// Both methods are called separately. The "loaded" property is set /// to true only when "onData" isn't overwritten. // onData add_actions(mo, "l = new LoadVars;"); check_equals(mo, "l.loaded", "undefined"); add_actions(mo, "l.decode = ourDecode;"); add_actions(mo, "l.onData = ourData;" "dataString = '';"); add_actions(mo, loadvars); check_equals(mo, "e", "true"); add_actions(mo, "stop();"); SWFMovie_nextFrame(mo); // check_equals is too braindead to do this without escaping. check_equals(mo, "escape(dataString)", "'3%3A%20onData%20called%20with%20string%20argument%20v2%5Fvar1%3D" "val1%26v2%5Fvar2%3Dval2%26%0A'"); check_equals(mo, "l.loaded", "false"); add_actions(mo, "l.onData = odatB;"); check_equals(mo, "decodeCalled", "0"); check_equals(mo, "decodeString", "''"); // onLoad add_actions(mo, "l = new LoadVars;"); check_equals(mo, "l.loaded", "undefined"); add_actions(mo, "l.decode = ourDecode;"); add_actions(mo, "l.onLoad = ourLoad;" "loadString = '';"); add_actions(mo, loadvars); check_equals(mo, "e", "true"); add_actions(mo, "stop();"); SWFMovie_nextFrame(mo); check_equals(mo, "loadString", "'4: onLoad called with boolean argument true'"); add_actions(mo, "l.onLoad = olB;"); /// decode is called from onData (i.e. it's called when we overwrite /// onLoad, not onData). check_equals(mo, "decodeCalled", "1"); // check_equals is too braindead to do this without escaping. check_equals(mo, "escape(decodeString)", "'decode%20called%20with%20string%20argument%20v2%5Fvar1%3D" "val1%26v2%5Fvar2%3Dval2%26%0A'"); /// What happens on load of empty data? // /// Same as a load failure. // onData add_actions(mo, "l = new LoadVars;"); check_equals(mo, "l.loaded", "undefined"); add_actions(mo, "l.decode = ourDecode;"); add_actions(mo, "l.onData = ourData;" "dataString = '';"); add_actions(mo, loademptyvars); check_equals(mo, "e", "true"); add_actions(mo, "stop();"); SWFMovie_nextFrame(mo); // check_equals is too braindead to do this without escaping. check_equals(mo, "escape(dataString)", "'5%3A%20onData%20called%20with%20undefined%20" "argument%20undefined'"); check_equals(mo, "l.loaded", "false"); add_actions(mo, "l.onData = odatB;"); // No more calls to decode. check_equals(mo, "decodeCalled", "1"); /// End of tests. add_actions(mo, "totals(29);"); add_actions(mo, "stop();"); /***************************************************** * * Output movie * *****************************************************/ puts("Saving " OUTPUT_FILENAME ); SWFMovie_save(mo, OUTPUT_FILENAME); return 0; }
int main(int argc, char** argv) { SWFMovie mo; const char *srcdir="."; char fdbfont[256]; SWFMovieClip dejagnuclip; SWFDisplayItem it; /********************************************* * * Initialization * *********************************************/ if ( argc>1 ) srcdir=argv[1]; else { fprintf(stderr, "Usage: %s <mediadir>\n", argv[0]); return 1; } sprintf(fdbfont, "%s/Bitstream-Vera-Sans.fdb", srcdir); puts("Setting things up"); Ming_init(); Ming_useSWFVersion (OUTPUT_VERSION); mo = newSWFMovie(); SWFMovie_setRate(mo, 1.0); SWFMovie_setDimension(mo, 800, 600); dejagnuclip = get_dejagnu_clip((SWFBlock)get_default_font(srcdir), 10, 0, 0, 800, 600); SWFMovie_add(mo, (SWFBlock)dejagnuclip); SWFMovie_nextFrame(mo); // 1st frame /********************************************* * * Add some textfields * *********************************************/ SWFBrowserFont bfont = newSWFBrowserFont("_sans"); int y = 30; int inc = 30; it = add_text_field(mo, (SWFBlock)bfont, "Normal", 1, 2, 3, SWFTEXTFIELD_ALIGN_LEFT, 10, 0, 0, 0, 255); SWFDisplayItem_moveTo(it, 50, y); SWFDisplayItem_setName(it, "tf1"); y += inc; it = add_text_field(mo, (SWFBlock)bfont, "Transparent", 1, 2, 3, SWFTEXTFIELD_ALIGN_LEFT, 10, 0, 0, 0, 0); SWFDisplayItem_moveTo(it, 50, y); SWFDisplayItem_setName(it, "tf2"); y += inc; it = add_text_field(mo, (SWFBlock)bfont, "X scaled by 16, no indent or " "margin", 0, 0, 0, SWFTEXTFIELD_ALIGN_LEFT, 10, 0, 0, 0, 255); SWFDisplayItem_moveTo(it, 50, y); SWFDisplayItem_scale(it, 16, 1); SWFDisplayItem_setName(it, "tf3"); y += inc; it = add_text_field(mo, (SWFBlock)bfont, "X scaled by 16, indent 4", 4, 0, 0, SWFTEXTFIELD_ALIGN_LEFT, 10, 0, 0, 0, 255); SWFDisplayItem_moveTo(it, 50, y); SWFDisplayItem_scale(it, 16, 1); SWFDisplayItem_setName(it, "tf4"); y += inc; it = add_text_field(mo, (SWFBlock)bfont, "X scaled by 16, left margin 4", 0, 4, 0, SWFTEXTFIELD_ALIGN_LEFT, 10, 0, 0, 0, 255); SWFDisplayItem_moveTo(it, 50, y); SWFDisplayItem_scale(it, 16, 1); SWFDisplayItem_setName(it, "tf5"); y += inc; it = add_text_field(mo, (SWFBlock)bfont, "X scaled by 16, right margin 4", 0, 0, 4, SWFTEXTFIELD_ALIGN_LEFT, 10, 0, 0, 0, 255); SWFDisplayItem_moveTo(it, 50, y); SWFDisplayItem_scale(it, 16, 1); SWFDisplayItem_setName(it, "tf6"); y += inc; it = add_text_field(mo, (SWFBlock)bfont, "X scaled by 16, left margin 4, " "indent 4", 4, 4, 0, SWFTEXTFIELD_ALIGN_LEFT, 10, 0, 0, 0, 255); SWFDisplayItem_moveTo(it, 50, y); SWFDisplayItem_scale(it, 16, 1); SWFDisplayItem_setName(it, "tf7"); y += inc; it = add_text_field(mo, (SWFBlock)bfont, "X scaled by 8, no indent or margin", 0, 0, 0, SWFTEXTFIELD_ALIGN_LEFT, 10, 0, 0, 0, 255); SWFDisplayItem_moveTo(it, 50, y); SWFDisplayItem_scale(it, 8, 1); SWFDisplayItem_setName(it, "tf8"); y += inc; it = add_text_field(mo, (SWFBlock)bfont, "X scaled by 8, indent 4", 4, 0, 0, SWFTEXTFIELD_ALIGN_LEFT, 10, 0, 0, 0, 255); SWFDisplayItem_moveTo(it, 50, y); SWFDisplayItem_scale(it, 8, 1); SWFDisplayItem_setName(it, "tf9"); y += inc; it = add_text_field(mo, (SWFBlock)bfont, "X scaled by 0.2", 8, 8, 8, SWFTEXTFIELD_ALIGN_LEFT, 10, 0, 0, 0, 255); SWFDisplayItem_moveTo(it, 50, y); SWFDisplayItem_scale(it, 0.2, 1); SWFDisplayItem_setName(it, "tf10"); y += inc; it = add_text_field(mo, (SWFBlock)bfont, "Y scaled by 4", 4, 4, 0, SWFTEXTFIELD_ALIGN_LEFT, 10, 0, 0, 0, 255); SWFDisplayItem_moveTo(it, 50, y); SWFDisplayItem_scale(it, 1, 4); SWFDisplayItem_setName(it, "tf11"); y += inc * 3; it = add_text_field(mo, (SWFBlock)bfont, "Y scaled by 8", 4, 4, 0, SWFTEXTFIELD_ALIGN_LEFT, 10, 0, 0, 0, 255); SWFDisplayItem_moveTo(it, 50, y); SWFDisplayItem_scale(it, 1, 8); SWFDisplayItem_setName(it, "tf12"); // As these are device fonts, it's not clear how consistent the textWidth // value will be. It's not even clear that it's worth testing it. check_equals(mo, "tf1._width", "84"); check_equals(mo, "tf1._height", "20"); xcheck_equals(mo, "tf1._x", "48"); xcheck_equals(mo, "tf1._y", "28"); xcheck_equals(mo, "tf1.textHeight", "24"); // Approx 42 xcheck(mo, "tf1.textWidth >= 40 && tf1.textWidth <= 45"); check_equals(mo, "tf2._width", "84"); check_equals(mo, "tf2._height", "20"); xcheck_equals(mo, "tf2._x", "48"); xcheck_equals(mo, "tf2._y", "58"); xcheck_equals(mo, "tf2.textHeight", "24"); // Approx 69 xcheck(mo, "tf2.textWidth >= 66 && tf2.textWidth <= 72"); check_equals(mo, "tf3._width", "1344"); check_equals(mo, "tf3._height", "20"); xcheck_equals(mo, "tf3._x", "18"); xcheck_equals(mo, "tf3._y", "88"); xcheck_equals(mo, "tf3.textHeight", "24"); // Approx 13 xcheck(mo, "tf3.textWidth >= 11 && tf3.textWidth <= 15"); check_equals(mo, "tf4._width", "1344"); check_equals(mo, "tf4._height", "20"); xcheck_equals(mo, "tf4._x", "18"); xcheck_equals(mo, "tf4._y", "118"); xcheck_equals(mo, "tf4.textHeight", "24"); // Approx 9 xcheck(mo, "tf4.textWidth >= 7 && tf4.textWidth <= 11"); check_equals(mo, "tf5._width", "1344"); check_equals(mo, "tf5._height", "20"); xcheck_equals(mo, "tf5._x", "18"); xcheck_equals(mo, "tf5._y", "148"); xcheck_equals(mo, "tf5.textHeight", "24"); // Approx 10 xcheck(mo, "tf5.textWidth >= 8 && tf5.textWidth <= 12"); check_equals(mo, "tf6._width", "1344"); check_equals(mo, "tf6._height", "20"); xcheck_equals(mo, "tf6._x", "18"); xcheck_equals(mo, "tf6._y", "178"); xcheck_equals(mo, "tf6.textHeight", "24"); // Approx 11 xcheck(mo, "tf6.textWidth >= 9 && tf6.textWidth <= 13"); check_equals(mo, "tf7._width", "1344"); check_equals(mo, "tf7._height", "20"); xcheck_equals(mo, "tf7._x", "18"); xcheck_equals(mo, "tf7._y", "208"); xcheck_equals(mo, "tf7.textHeight", "24"); // Approx 14 xcheck(mo, "tf7.textWidth >= 14 && tf7.textWidth <= 16"); check_equals(mo, "tf8._width", "672"); check_equals(mo, "tf8._height", "20"); xcheck_equals(mo, "tf8._x", "34"); xcheck_equals(mo, "tf8._y", "238"); xcheck_equals(mo, "tf8.textHeight", "24"); // Approx 25 xcheck(mo, "tf8.textWidth >= 21 && tf8.textWidth <= 27"); check_equals(mo, "tf9._width", "672"); check_equals(mo, "tf9._height", "20"); xcheck_equals(mo, "tf9._x", "34"); xcheck_equals(mo, "tf9._y", "268"); xcheck_equals(mo, "tf9.textHeight", "24"); // Approx 16 xcheck(mo, "tf9.textWidth >= 14 && tf9.textWidth <= 18"); check_equals(mo, "tf10._width", "16.8"); check_equals(mo, "tf10._height", "20"); xcheck_equals(mo, "tf10._x", "49.6"); xcheck_equals(mo, "tf10._y", "298"); xcheck_equals(mo, "tf10.textHeight", "24"); // Approx 452 xcheck(mo, "tf10.textWidth >= 440 && tf10.textWidth <= 460"); // The textHeight for the following two fields varies. check_equals(mo, "tf11._width", "84"); check_equals(mo, "tf11._height", "80"); xcheck_equals(mo, "tf11._x", "48"); xcheck_equals(mo, "tf11._y", "322"); add_actions(mo, "trace(tf11.textWidth);"); xcheck(mo, "tf11.textHeight >= 23 && tf11.textHeight <= 24"); // Approx 315 xcheck(mo, "tf11.textWidth >= 305 && tf11.textWidth <= 325"); check_equals(mo, "tf12._width", "84"); check_equals(mo, "tf12._height", "160"); xcheck_equals(mo, "tf12._x", "48"); xcheck_equals(mo, "tf12._y", "404"); add_actions(mo, "trace(tf12.textWidth);"); xcheck(mo, "tf12.textHeight >= 23 && tf12.textHeight <= 24"); // Approx 640 xcheck(mo, "tf12.textWidth >= 625 && tf12.textWidth <= 655"); add_actions(mo, "totals(); stop();"); SWFMovie_nextFrame(mo); /***************************************************** * * Output movie * *****************************************************/ puts("Saving " OUTPUT_FILENAME ); SWFMovie_save(mo, OUTPUT_FILENAME); return 0; }
int main(int argc, char** argv) { SWFMovie mo; SWFMovieClip mc1, mc2, dejagnuclip; SWFDisplayItem it1, it2; SWFShape sh1,sh2; const char *srcdir="."; if ( argc>1 ) srcdir=argv[1]; else { //fprintf(stderr, "Usage: %s <mediadir>\n", argv[0]); //return 1; } Ming_init(); Ming_useSWFVersion (OUTPUT_VERSION); mo = newSWFMovie(); SWFMovie_setDimension(mo, 800, 600); SWFMovie_setRate(mo, 6); // Frame 1: Place dejagnu clip dejagnuclip = get_dejagnu_clip((SWFBlock)get_default_font(srcdir), 10, 0, 0, 800, 600); SWFMovie_add(mo, (SWFBlock)dejagnuclip); add_actions(mo, "mc1Constructed=0; mc2Constructed=0; mc3Constructed=0;"); SWFMovie_nextFrame(mo); // // Frame 2: // Place red static movieClip1 DisplayObject at depth 3 (-16381) // Place black static movieClip1 DisplayObject at depth 4 (-16380) // sh1 = make_fill_square (300, 300, 60, 60, 255, 0, 0, 255, 0, 0); mc1 = newSWFMovieClip(); SWFMovieClip_add(mc1, (SWFBlock)sh1); SWFMovieClip_nextFrame(mc1); it1 = SWFMovie_add(mo, (SWFBlock)mc1); //add movieClip1 to the _root SWFDisplayItem_setDepth(it1, 3); SWFDisplayItem_setName(it1, "movieClip1"); //name movieClip1 SWFDisplayItem_addAction(it1, newSWFAction( "_root.note(this+' constructed');" "_root.mc1Constructed++;" ), SWFACTION_CONSTRUCT); sh2 = make_fill_square (330, 270, 120, 120, 0, 0, 0, 0, 0, 0); mc2 = newSWFMovieClip(); SWFMovieClip_add(mc2, (SWFBlock)sh2); SWFMovieClip_nextFrame(mc2); it2 = SWFMovie_add(mo, (SWFBlock)mc2); //add movieClip2 to the _root SWFDisplayItem_setDepth(it2, 4); SWFDisplayItem_setName(it2, "movieClip2"); //name movieClip2 SWFDisplayItem_addAction(it2, newSWFAction( "_root.note(this+' constructed');" "_root.mc2Constructed++;"), SWFACTION_CONSTRUCT); SWFMovie_nextFrame(mo); // Frame3: nothing new SWFMovie_nextFrame(mo); // Frame4: remove "movieClip1" and "movieClip2" SWFDisplayItem_remove(it1); SWFDisplayItem_remove(it2); SWFMovie_nextFrame(mo); // // Frame5: // Place red static movieClip3 DisplayObject at depth 3 (-16381) // Place an empty dynamic movieClip4 DisplayObject at depth4 (-16380) // it1 = SWFMovie_add(mo, (SWFBlock)mc1); //add movieClip3 to the _root SWFDisplayItem_setDepth(it1, 3); SWFDisplayItem_setName(it1, "movieClip3"); //name movieClip3 SWFDisplayItem_setRatio(it1, 2.0); // It's important to set this, don't why yet. SWFDisplayItem_addAction(it1, newSWFAction( "_root.note(this+' constructed');" "_root.mc3Constructed++;" ), SWFACTION_CONSTRUCT); add_actions(mo, "_root.createEmptyMovieClip('movieClip4', -16380);"); SWFMovie_nextFrame(mo); // // Frame4: check, gotoAndStop(3), check.. // check_equals(mo, "typeof(movieClip1)", "'undefined'"); check_equals(mo, "typeof(movieClip2)", "'undefined'"); check_equals(mo, "typeof(movieClip3)", "'movieclip'"); check_equals(mo, "typeof(movieClip4)", "'movieclip'"); check_equals(mo, "_root.mc1Constructed", "1"); check_equals(mo, "_root.mc2Constructed", "1"); check_equals(mo, "_root.mc3Constructed", "1"); SWFMovie_add(mo, (SWFBlock)newSWFAction( "gotoAndStop(3);")); check_equals(mo, "typeof(movieClip1)", "'movieclip'"); check_equals(mo, "typeof(movieClip2)", "'movieclip'"); check_equals(mo, "typeof(movieClip3)", "'undefined'"); check_equals(mo, "typeof(movieClip4)", "'undefined'"); check_equals(mo, "_root.mc1Constructed", "2"); check_equals(mo, "_root.mc2Constructed", "2"); check_equals(mo, "_root.mc3Constructed", "1"); SWFMovie_add(mo, (SWFBlock)newSWFAction( "totals(); stop();" )); SWFMovie_nextFrame(mo); //Output movie puts("Saving " OUTPUT_FILENAME ); SWFMovie_save(mo, OUTPUT_FILENAME); return 0; }
int main(int argc, char** argv) { SWFMovie mo; SWFMovieClip mc1, mc11, mc2, dejagnuclip; SWFDisplayItem it1, it11, it2; const char *srcdir="."; if ( argc>1 ) srcdir=argv[1]; else { fprintf(stderr, "Usage: %s <mediadir>\n", argv[0]); return 1; } Ming_init(); mo = newSWFMovieWithVersion(OUTPUT_VERSION); SWFMovie_setDimension(mo, 800, 600); SWFMovie_setRate (mo, 12.0); dejagnuclip = get_dejagnu_clip((SWFBlock)get_default_font(srcdir), 10, 0, 0, 800, 600); SWFMovie_add(mo, (SWFBlock)dejagnuclip); SWFMovie_nextFrame(mo); // 1st frame /* add mc1, mc2 to the main movie */ mc1 = newSWFMovieClip(); mc11 = newSWFMovieClip(); SWFMovieClip_nextFrame(mc11); it11 = SWFMovieClip_add(mc1, (SWFBlock)mc11); SWFDisplayItem_setDepth(it11, 10); SWFDisplayItem_setName(it11, "mc11"); SWFMovieClip_nextFrame(mc1); add_clip_actions(mc1, "duplicateMovieClip('mc11', 'dup_ch1', 1);" "_root.check_equals(typeof(dup_ch1), 'movieclip');" "duplicateMovieClip('/_root/mc1/mc11', 'dup_ch2', 2);" "_root.check_equals(typeof(dup_ch2), 'movieclip');" "duplicateMovieClip('/:_root/:mc1/:mc11', 'dup_ch3', 3);" "_root.check_equals(typeof(dup_ch3), 'movieclip');" "duplicateMovieClip('mc2', 'dup_ch4', 4);" // can not duplicate a movie clip in a different time "_root.check_equals(typeof(dup_ch4), 'undefined');" "duplicateMovieClip('/:mc2', 'dup_ch5', 5);" // can not duplicate a movie clip in a different time "_root.check_equals(typeof(dup_ch5), 'undefined');" // Don't do this, duplicate a self-clip will crash the proprietary player" // "duplicateMovieClip('/:mc1', 'dup_ch6', 6);" "stop();" ); SWFMovieClip_nextFrame(mc1); mc2 = newSWFMovieClip(); SWFMovieClip_nextFrame(mc2); it1 = SWFMovie_add(mo, (SWFBlock)mc1); it2 = SWFMovie_add(mo, (SWFBlock)mc2); SWFDisplayItem_setDepth(it1, 10); SWFDisplayItem_setName(it1, "mc1"); SWFDisplayItem_setDepth(it2, 20); SWFDisplayItem_setName(it2, "mc2"); SWFMovie_nextFrame(mo); // 2nd frame add_actions(mo, "duplicateMovieClip('mc1', 'dup1', 1);"); check_equals(mo, "typeof(dup1)", "'movieclip'"); add_actions(mo, "removeMovieClip(dup1);"); check_equals(mo, "typeof(dup1)", "'undefined'"); add_actions(mo, "duplicateMovieClip('/:mc1', 'dup2', 2);"); check_equals(mo, "typeof(dup2)", "'movieclip'"); add_actions(mo, "removeMovieClip(dup2);"); check_equals(mo, "typeof(dup2)", "'undefined'"); add_actions(mo, "duplicateMovieClip('/:mc1/', 'dup3', 3);"); check_equals(mo, "typeof(dup3)", "'movieclip'"); add_actions(mo, "removeMovieClip(dup3);"); check_equals(mo, "typeof(dup3)", "'undefined'"); add_actions(mo, "duplicateMovieClip('/_root/mc1/', 'dup4', 4);"); check_equals(mo, "typeof(dup4)", "'movieclip'"); add_actions(mo, "removeMovieClip(dup4);"); check_equals(mo, "typeof(dup4)", "'undefined'"); add_actions(mo, "duplicateMovieClip('_root.mc1', 'dup5', 5);"); check_equals(mo, "typeof(dup5)", "'movieclip'"); add_actions(mo, "removeMovieClip(dup5);"); check_equals(mo, "typeof(dup5)", "'undefined'"); add_actions(mo, "duplicateMovieClip('_root.mc1.mc11', 'dup6', 6);"); // can not duplicate a movieclip in a different timeline check_equals(mo, "typeof(dup6)", "'undefined'"); add_actions(mo, "duplicateMovieClip('/_root/mc1/:mc11', 'dup7', 7);"); // can not duplicate a movieclip in a different timeline check_equals(mo, "typeof(dup7)", "'undefined'"); add_actions(mo, "duplicateMovieClip('/_root/mc1/mc11', 'dup8', 8);"); // can not duplicate a movieclip in a different timeline check_equals(mo, "typeof(dup8)", "'undefined'"); SWFMovie_nextFrame(mo); // 3rd frame add_actions(mo, " _root.totals(); stop(); "); SWFMovie_nextFrame(mo); // 4th frame //Output movie puts("Saving " OUTPUT_FILENAME ); SWFMovie_save(mo, OUTPUT_FILENAME); return 0; }
int main(int argc, char** argv) { SWFMovie mo; SWFMovieClip dejagnuclip; SWFShape static1, static2; SWFDisplayItem it1; const char *srcdir="."; if ( argc>1 ) srcdir=argv[1]; else { //fprintf(stderr, "Usage: %s <mediadir>\n", argv[0]); //return 1; } Ming_init(); mo = newSWFMovieWithVersion(OUTPUT_VERSION); SWFMovie_setDimension(mo, 800, 600); SWFMovie_setRate (mo, 2); static1 = get_shape(60, 60, 255, 0, 0); static2 = get_shape(60, 60, 0, 255, 0); dejagnuclip = get_dejagnu_clip((SWFBlock)get_default_font(srcdir), 10, 0, 0, 800, 600); SWFMovie_add(mo, (SWFBlock)dejagnuclip); SWFMovie_nextFrame(mo); // Frame 2: place DisplayObject at depth 3 (-16381) it1 = SWFMovie_add(mo, (SWFBlock)static1); SWFDisplayItem_setDepth(it1, 3); SWFDisplayItem_moveTo(it1, 100, 300); SWFDisplayItem_setName(it1, "static1"); SWFDisplayItem_addAction(it1, newSWFAction( "_root.note(this+' onClipConstruct');" " _root.check_equals(typeof(_root), 'movieclip');" " if ( isNaN(_root.depth3Constructed) ) {" " _root.depth3Constructed=1; " " } else {" " _root.depth3Constructed++;" " }" " _root.note('_root.depth3Constructed set to '+_root.depth3Constructed);" ), SWFACTION_CONSTRUCT); add_actions(mo, "static1.name='static1';"); check_equals(mo, "typeof(static1)", "'movieclip'"); check_equals(mo, "static1", "_root"); check_equals(mo, "static1.name", "'static1'"); check_equals(mo, "_root.name", "'static1'"); // Gnash allows custom members to shape DisplayObjects... // this is important to verify, see next check for it after REPLACE check_equals(mo, "static1.name", "'static1'"); check_equals(mo, "static1._target", "'/'"); SWFMovie_nextFrame(mo); // Frame 3: replace instance at depth -16381 with DisplayObject 2 if ( SWFMovie_replace(mo, it1, (SWFBlock)static2) ) { abort(); // grace and beauty... } SWFDisplayItem_moveTo(it1, 130, 330); SWFDisplayItem_setName(it1, "static2"); SWFDisplayItem_addAction(it1, newSWFAction( "_root.note(this+' onClipConstruct');" " _root.check_equals(typeof(_root), 'movieclip');" " if ( isNaN(_root.depth3Constructed) ) {" " _root.depth3Constructed=1; " " } else {" " _root.depth3Constructed++;" " }" " _root.note('_root.depth3Constructed set to '+_root.depth3Constructed);" ), SWFACTION_CONSTRUCT); // Can still reference the old DisplayObject and it's variables, after replace xcheck_equals(mo, "typeof(static1)", "'movieclip'"); xcheck_equals(mo, "static1", "_root"); xcheck_equals(mo, "static1.name", "'static1'"); check_equals(mo, "_root.name", "'static1'"); // While the new name results undefined... xcheck_equals(mo, "typeof(static2)", "'undefined'"); // the name wasn't changed // Everything suggests that a new instance is NOT created on replace !!! // Gnash here fails because it creates a NEW instance // We can't check the color or the _x in a self-contained testcase unfortunately, // we'll need a MovieTester-based runner for this. // It is expected the color of the current instane is GREEN, and the boundaries // are from 130 to 190 for X and 330 to 390 for Y. // TODO: implement a MovieTester based runner !! SWFMovie_nextFrame(mo); // Frame 4: jump to frame 2, stop and check add_actions(mo, "gotoAndStop(2); " // Shapes don't get their onConstruct event invoked ! "check_equals(typeof(_root.depth3Constructed), 'undefined');" // Original DisplayObject name is still referenceable "check_equals(typeof(static1), 'movieclip');" // And it still has it's user-provided property "check_equals(static1.name, 'static1');" // We can't check the color or the _x in a self-contained testcase unfortunately, // we'll need a MovieTester-based runner for this. // It is expected the color of the current instance is RED, and the boundaries // are from 100 to 120 for both X and Y. // TODO: implement a MovieTester based runner !! "totals();" ); SWFMovie_nextFrame(mo); //Output movie puts("Saving " OUTPUT_FILENAME ); SWFMovie_save(mo, OUTPUT_FILENAME); return 0; }
static void check_all (gl_oset_t set1, gl_oset_t set2) { gl_rbtree_oset_check_invariants (set2); check_equals (set1, set2); }
int main(int argc, char** argv) { SWFMovie mo; const char *srcdir="."; char fdbfont[256]; SWFMovieClip dejagnuclip; /********************************************* * * Initialization * *********************************************/ if ( argc>1 ) srcdir=argv[1]; else { fprintf(stderr, "Usage: %s <mediadir>\n", argv[0]); return 1; } sprintf(fdbfont, "%s/Bitstream-Vera-Sans.fdb", srcdir); puts("Setting things up"); Ming_init(); Ming_useSWFVersion (OUTPUT_VERSION); //Ming_setScale(20.0); /* so we talk twips */ mo = newSWFMovie(); SWFMovie_setRate(mo, 1.0); SWFMovie_setDimension(mo, 800, 600); dejagnuclip = get_dejagnu_clip((SWFBlock)get_default_font(srcdir), 10, 0, 0, 800, 600); SWFMovie_add(mo, (SWFBlock)dejagnuclip); SWFMovie_nextFrame(mo); // 1st frame /********************************************* * * Add some textfields * *********************************************/ { SWFDisplayItem it; FILE *font_file = fopen(fdbfont, "r"); if ( font_file == NULL ) { perror(fdbfont); exit(1); } SWFFont efont = loadSWFFontFromFile(font_file); it = add_text_field(mo, efont, "First text"); SWFDisplayItem_setName(it, "dtext1"); SWFDisplayItem_moveTo(it, 0, 200); it = add_text_field(mo, efont, "Zweites Textfeld"); SWFDisplayItem_setName(it, "etext1"); SWFDisplayItem_moveTo(it, 0, 300); it = add_text_field(mo, efont, "Some more static text here... abcdefgh"); SWFDisplayItem_setName(it, "dtext2"); SWFDisplayItem_moveTo(it, 0, 400); } SWFMovie_nextFrame(mo); add_actions(mo, "createTextField('dynamictext1', 99, 10, 10, 10, 10);" "this.dynamictext1.text = 'Dynamic Text';"); add_actions(mo, "ts = this.getTextSnapshot();"); check(mo, "ts instanceof TextSnapshot"); check_equals(mo, "ts.getCount()", "64"); check_equals(mo, "ts.getText(0, 1)", "'F'"); check_equals(mo, "ts.getText(3, 3)", "'s'"); check_equals(mo, "ts.getText(-5, 5)", "'First'"); check_equals(mo, "ts.getText(10, 6)", "'Z'"); check_equals(mo, "ts.getText(0, 100)", "'First textZweites TextfeldSome more " "static text here... abcdefgh'"); add_actions(mo, "ss = ts.getText(100, 110);"); check_equals(mo, "typeof(ss)", "'string'"); check_equals(mo, "ss", "'h'"); check_equals(mo, "ss.length", "1"); check_equals(mo, "ts.getText(0, 100, true)", "'First text\nZweites Textfeld\nSome more " "static text here... abcdefgh'"); check_equals(mo, "ts.getText(0, 14, true)", "'First text\nZwei'"); check_equals(mo, "ts.findText(0, '', false)", "-1"); check_equals(mo, "ts.findText(0, 'f', false)", "0"); check_equals(mo, "ts.findText(0, 'f', true)", "22"); check_equals(mo, "ts.findText(1, 'Rst', false)", "2"); check_equals(mo, "ts.findText(3, 'RSt', false)", "-1"); check_equals(mo, "ts.findText(100, 'h', false)", "-1"); check_equals(mo, "ts.findText(64, 'h', false)", "-1"); check_equals(mo, "ts.findText(-5, 'Zwei', true)", "-1"); check_equals(mo, "ts.findText(-5, 'gh', true)", "-1"); add_actions(mo, "ts.setSelected(5, 30, true);"); check_equals(mo, "ts.getSelectedText()", "' textZweites TextfeldSome'"); check_equals(mo, "ts.getSelectedText(true)", "' text\nZweites " "Textfeld\nSome'"); check_equals(mo, "ts.getSelectedText(false)", "' textZweites TextfeldSome'"); check_equals(mo, "ts.getSelected(0, 4)", "false"); check_equals(mo, "ts.getSelected(1, 9)", "true"); check_equals(mo, "ts.getSelected(-4, 10)", "true"); check_equals(mo, "ts.getSelected(-4, 6)", "true"); check_equals(mo, "ts.getSelected(28, 23)", "true"); check_equals(mo, "ts.getSelected(20, 20)", "true"); check_equals(mo, "ts.getSelected(20, 27)", "true"); check_equals(mo, "ts.getSelected(-3, -1)", "false"); check_equals(mo, "ts.getSelected(30, 31)", "false"); check_equals(mo, "ts.getSelected(0, 5)", "false"); check_equals(mo, "ts.getSelected(40, 45)", "false"); check_equals(mo, "ts.getSelected(31, 34)", "false"); check_equals(mo, "ts.getSelected(0)", "undefined"); check_equals(mo, "ts.getSelected(1)", "undefined"); check_equals(mo, "ts.getSelected(-4)", "undefined"); check_equals(mo, "ts.getSelected(-4)", "undefined"); check_equals(mo, "ts.getSelected(28)", "undefined"); check_equals(mo, "ts.getSelected(20)", "undefined"); // Selected text is stored in the textfield and reset when a new // snapshot is taken. add_actions(mo, "ts2 = new TextSnapshot(this);"); check_equals(mo, "ts.getSelectedText(false)", "''"); check_equals(mo, "ts2.getCount()", "64"); check_equals(mo, "ts2.getSelectedText()", "''"); add_actions(mo, "ts2 = this.getTextSnapshot();"); check_equals(mo, "ts2.getCount()", "64"); check_equals(mo, "ts2.getSelectedText()", "''"); add_actions(mo, "ts2.setSelected(3, 10, true);"); check_equals(mo, "ts2.getSelectedText(false).length", "7"); check_equals(mo, "ts.getSelectedText(false).length", "7"); add_actions(mo, "ts.setSelectedColor(0xffff00);"); add_actions(mo, "ts2.setSelectedColor(0x0000ff);"); check_equals(mo, "ts.getSelectedText(false)", "'st text'"); add_actions(mo, "ri = ts.getTextRunInfo(4, 10);"); check_equals(mo, "typeof(ri)", "'object'"); check(mo, "ri instanceof Array"); check_equals(mo, "ri.length", "7"); add_actions(mo, "el = ri[1];"); check_equals(mo, "typeof(el)", "'object'"); check(mo, "!el.hasOwnProperty('indexInRun')"); check_equals(mo, "el.indexInRun", "5"); check_equals(mo, "el.selected", "true"); check_equals(mo, "el.font", "'Bitstream Vera Sans'"); check_equals(mo, "el.color", "0"); check_equals(mo, "el.height", "12"); check_equals(mo, "el.matrix_a", "1"); check_equals(mo, "el.matrix_b", "0"); check_equals(mo, "el.matrix_c", "0"); check_equals(mo, "el.matrix_d", "1"); check_equals(mo, "el.matrix_tx", "25.95"); check_equals(mo, "el.matrix_ty", "200"); xcheck_equals(mo, "el.corner0x", "25.95"); xcheck_equals(mo, "el.corner0y", "202.8"); xcheck_equals(mo, "el.corner1x", "29.75"); xcheck_equals(mo, "el.corner1y", "202.8"); xcheck_equals(mo, "el.corner2x", "29.75"); xcheck_equals(mo, "el.corner2y", "188.85"); xcheck_equals(mo, "el.corner3x", "25.95"); xcheck_equals(mo, "el.corner3y", "188.85"); // Check properties individually check_equals(mo, "ri[2].height", "12"); check_equals(mo, "ri[3].height", "12"); check_equals(mo, "ri[4].height", "12"); check_equals(mo, "ri[5].height", "12"); check_equals(mo, "ri[6].height", "12"); check_equals(mo, "ri[2].selected", "true"); check_equals(mo, "ri[3].selected", "true"); check_equals(mo, "ri[4].selected", "true"); check_equals(mo, "ri[5].selected", "true"); check_equals(mo, "ri[6].selected", "false"); check_equals(mo, "ri[2].matrix_tx", "29.75"); check_equals(mo, "ri[2].matrix_ty", "200"); check_equals(mo, "ri[3].matrix_tx", "34.4"); check_equals(mo, "ri[3].matrix_ty", "200"); check_equals(mo, "ri[4].matrix_tx", "41.75"); check_equals(mo, "ri[4].matrix_ty", "200"); xcheck_equals(mo, "ri[2].corner0x", "29.75"); xcheck_equals(mo, "ri[2].corner0y", "202.8"); xcheck_equals(mo, "ri[3].corner0x", "34.4"); xcheck_equals(mo, "ri[3].corner0y", "202.8"); xcheck_equals(mo, "ri[4].corner0x", "41.75"); xcheck_equals(mo, "ri[4].corner0y", "202.8"); xcheck_equals(mo, "ri[2].corner2y", "188.85"); xcheck_equals(mo, "ri[3].corner2y", "188.85"); xcheck_equals(mo, "ri[4].corner2y", "188.85"); add_actions(mo, "ts.setSelected(0, 10, true);"); add_actions(mo, "ts.setSelected(15, 20, false);"); check_equals(mo, "ts2.getSelectedText().length", "10"); add_actions(mo, "ri2 = ts.getTextRunInfo(0, 100);"); check_equals(mo, "ri2[0].selected", "true"); check_equals(mo, "ri2[1].selected", "true"); check_equals(mo, "ri2[2].selected", "true"); check_equals(mo, "ri2[3].selected", "true"); check_equals(mo, "ri2[4].selected", "true"); check_equals(mo, "ri2[5].selected", "true"); check_equals(mo, "ri2[6].selected", "true"); check_equals(mo, "ri2[15].selected", "false"); check_equals(mo, "ri2[16].selected", "false"); check_equals(mo, "ri2[17].selected", "false"); check_equals(mo, "ri2[18].selected", "false"); xcheck_equals(mo, "ri2[50].corner2y", "388.85"); xcheck_equals(mo, "ri2[50].corner2x", "156.6"); xcheck_equals(mo, "ri2[51].corner2y", "388.85"); xcheck_equals(mo, "ri2[51].corner2x", "163.95"); check_equals(mo, "ri2[50].matrix_tx", "151.65"); check_equals(mo, "ri2[51].matrix_tx", "156.55"); add_actions(mo, "ts = this.getTextSnapshot();"); check_equals(mo, "typeof(ts)", "'object'"); add_actions(mo, "backup = TextSnapshot;"); add_actions(mo, "TextSnapshot = undefined;"); add_actions(mo, "t = new TextSnapshot();"); check_equals(mo, "typeof(t)", "'undefined'"); check_equals(mo, "typeof(TextSnapshot)", "'undefined'"); add_actions(mo, "ts = this.getTextSnapshot();"); xcheck_equals(mo, "typeof(ts)", "'undefined'"); add_actions(mo, "TextSnapshot = backup;"); add_actions(mo, "ts = this.getTextSnapshot();"); check_equals(mo, "typeof(ts)", "'object'"); add_actions(mo, "backup = TextSnapshot.prototype;"); add_actions(mo, "TextSnapshot.prototype = undefined;"); add_actions(mo, "ts = this.getTextSnapshot();"); check_equals(mo, "typeof(ts)", "'object'"); add_actions(mo, "TextSnapshot.prototype = backup;"); add_actions(mo, "ts = this.getTextSnapshot();"); check_equals(mo, "typeof(ts)", "'object'"); add_actions(mo, "totals(); stop();"); SWFMovie_nextFrame(mo); /***************************************************** * * Output movie * *****************************************************/ puts("Saving " OUTPUT_FILENAME ); SWFMovie_save(mo, OUTPUT_FILENAME); return 0; }
int main(int argc, char** argv) { SWFMovie mo; SWFMovieClip mc1, mc2, dejagnuclip; SWFShape sh1, sh2; const char *srcdir="."; if ( argc>1 ) srcdir=argv[1]; else { fprintf(stderr, "Usage: %s <mediadir>\n", argv[0]); return 1; } Ming_init(); mo = newSWFMovieWithVersion(OUTPUT_VERSION); SWFMovie_setDimension(mo, 800, 600); SWFMovie_setRate (mo, 12.0); dejagnuclip = get_dejagnu_clip((SWFBlock)get_default_font(srcdir), 10, 0, 0, 800, 600); SWFMovie_add(mo, (SWFBlock)dejagnuclip); add_actions(mo, " _root.x = '0+'; "); SWFMovie_nextFrame(mo); /* 1st frame */ mc1 = newSWFMovieClip(); sh1 = make_fill_square (300, 300, 60, 60, 255, 0, 0, 255, 0, 0); SWFMovieClip_add(mc1, (SWFBlock)sh1); /* add init actions */ add_clip_init_actions(mc1, " _root.note('mc1.init_actions'); " " _root.x += '1+'; " " y = 'var_of_root'; " ); /* add actions */ add_clip_actions(mc1, " _root.note('mc1.actions'); _root.x += '9+'; "); SWFMovieClip_nextFrame(mc1);//1st frame mc2 = newSWFMovieClip(); sh2 = make_fill_square (600, 600, 60, 60, 255, 0, 0, 255, 0, 0); SWFMovieClip_add(mc2, (SWFBlock)sh2); /* add init actions */ add_clip_init_actions(mc2, " _root.note('mc2.init_actions'); _root.x += '3+'; "); /* add actions */ add_clip_actions(mc2, " _root.note('mc2.actions'); _root.x += '11+'; "); SWFMovieClip_nextFrame(mc2);//1st frame /* add mc1 to _root */ SWFDisplayItem it1; it1 = SWFMovie_add(mo, (SWFBlock)mc1); SWFDisplayItem_setDepth(it1, 10); SWFDisplayItem_setName(it1, "mc1"); SWFDisplayItem_addAction(it1, newSWFAction(" _root.note('mc1.onClipInitialize'); _root.x += '2+'; " "_root.check_equals(this.__proto__, MovieClip.prototype);" ), SWFACTION_INIT); SWFDisplayItem_addAction(it1, newSWFAction(" _root.note('mc1.onClipConstruct'); _root.x += '5+'; "), SWFACTION_CONSTRUCT); SWFDisplayItem_addAction(it1, newSWFAction(" _root.note('mc1.onClipLoad'); _root.x += '8+'; "), SWFACTION_ONLOAD); /* add mc2 to _root */ SWFDisplayItem it2; it2 = SWFMovie_add(mo, (SWFBlock)mc2); SWFDisplayItem_setDepth(it2, 11); SWFDisplayItem_setName(it2, "mc2"); SWFDisplayItem_addAction(it2, newSWFAction(" _root.note('mc2.onClipInitialize'); _root.x += '4+'; "), SWFACTION_INIT); SWFDisplayItem_addAction(it2, newSWFAction(" _root.note('mc2.onClipConstruct'); _root.x += '6+'; "), SWFACTION_CONSTRUCT); SWFDisplayItem_addAction(it2, newSWFAction(" _root.note('mc2.onClipLoad'); _root.x += '10+'; "), SWFACTION_ONLOAD); /* add main timeline actions */ add_actions(mo, "_root.note('_root.actions'); _root.x += '7+'; "); SWFMovie_nextFrame(mo); /* 2nd frame */ /* The check below used to succeeds, and started failing when * executing init actions "after" DLIST tags. * Should be fixed if we postpone the call to ::construct * to "after" init actions are executed, which would require * some book keeping in sprite_instance class */ check_equals(mo, "_root.x", "'0+1+2+3+4+5+6+7+8+9+10+11+'"); check_equals(mo, "_root.y", "'var_of_root'"); add_actions(mo, " _root.totals(); stop(); "); SWFMovie_nextFrame(mo); /* 3rd frame */ //Output movie puts("Saving " OUTPUT_FILENAME ); SWFMovie_save(mo, OUTPUT_FILENAME); return 0; }
int main(int argc, char** argv) { SWFMovie mo; SWFMovieClip mc_red, dejagnuclip; SWFShape sh_red; const char *srcdir="."; if ( argc>1 ) srcdir=argv[1]; else { fprintf(stderr, "Usage: %s <mediadir>\n", argv[0]); return 1; } Ming_init(); mo = newSWFMovieWithVersion(OUTPUT_VERSION); SWFMovie_setDimension(mo, 800, 600); SWFMovie_setRate (mo, 1.0); dejagnuclip = get_dejagnu_clip((SWFBlock)get_default_font(srcdir), 10, 0, 0, 800, 600); SWFMovie_add(mo, (SWFBlock)dejagnuclip); SWFMovie_nextFrame(mo); /* 1st frame - so we can use _root.note */ mc_red = newSWFMovieClip(); sh_red = make_fill_square (0, 300, 60, 60, 255, 0, 0, 255, 0, 0); SWFMovieClip_add(mc_red, (SWFBlock)sh_red); add_clip_actions(mc_red, " _root.note('frm1 of mc_red - gotoAndStop(2)'); " "x = 'as_in_frm1_of_mc_red'; " "gotoAndStop(2); "); SWFMovieClip_nextFrame(mc_red); /* 1st frame */ add_clip_actions(mc_red, " _root.note('frm2 of mc_red - gotoAndStop(3)'); " "x = 'as_in_frm2_of_mc_red'; " "gotoAndStop(3); "); SWFMovieClip_nextFrame(mc_red); /* 2nd frame */ add_clip_actions(mc_red, " _root.note('frm3 of mc_red - gotoAndStop(4)'); " "x = 'as_in_frm3_of_mc_red'; " "gotoAndStop(4); "); SWFMovieClip_nextFrame(mc_red); /* 3rd frame */ SWFMovieClip_nextFrame(mc_red); /* 4th frame */ SWFDisplayItem it_red; it_red = SWFMovie_add(mo, (SWFBlock)mc_red); SWFDisplayItem_setDepth(it_red, 3); SWFDisplayItem_setName(it_red, "mc_red"); add_actions(mo, " _root.note('frm2 of root - gotoAndStop(3)'); " "mc_red.x = 'as_in_frm2_of_root'; " "gotoAndStop(3); "); SWFMovie_nextFrame(mo); /* 2nd frame */ /* mc_red.x has been set after playing the 1st frame, check it here */ add_actions(mo, " check_equals(mc_red.x, 'as_in_frm1_of_mc_red'); " " _root.note('frm3 of root - gotoAndStop(4)');" "mc_red.x = 'as_in_frm3_of_root'; " "gotoAndStop(4); "); SWFMovie_nextFrame(mo); /* 3rd frame */ /* mc_red.x has been set again after playing the 2nd frame, check it again */ add_actions(mo, " check_equals(mc_red.x, 'as_in_frm2_of_mc_red'); " " _root.note('frm4 of root - gotoAndStop(5)');" " mc_red.x = \"as_in_frm4_of_root\"; " " gotoAndStop(5); "); SWFMovie_nextFrame(mo); /* 4th frame */ /* mc_red.x has been set again after playing the 3rd frame, check it again */ check_equals(mo, "mc_red.x", "'as_in_frm3_of_mc_red'"); add_actions(mo, " _root.totals(); stop(); "); SWFMovie_nextFrame(mo); /* 5th frame */ /* Output movie */ puts("Saving " OUTPUT_FILENAME ); SWFMovie_save(mo, OUTPUT_FILENAME); return 0; }
int main (int argc, char *argv[]) { gl_list_t list1, list2; set_program_name (argv[0]); /* Allow the user to provide a non-default random seed on the command line. */ if (argc > 1) srand (atoi (argv[1])); { size_t initial_size = RANDOM (50); const void **contents = (const void **) malloc (initial_size * sizeof (const void *)); size_t i; unsigned int repeat; for (i = 0; i < initial_size; i++) contents[i] = RANDOM_OBJECT (); /* Create list1. */ list1 = gl_list_nx_create (GL_ARRAY_LIST, NULL, NULL, NULL, true, initial_size, contents); ASSERT (list1 != NULL); /* Create list2. */ list2 = gl_list_nx_create_empty (GL_ARRAY_LIST, NULL, NULL, NULL, true); ASSERT (list2 != NULL); for (i = 0; i < initial_size; i++) ASSERT (gl_list_nx_add_last (list2, contents[i]) != NULL); check_equals (list1, list2); for (repeat = 0; repeat < 10000; repeat++) { unsigned int operation = RANDOM (16); switch (operation) { case 0: if (gl_list_size (list1) > 0) { size_t index = RANDOM (gl_list_size (list1)); const char *obj = RANDOM_OBJECT (); gl_list_node_t node1, node2; node1 = gl_list_nx_set_at (list1, index, obj); ASSERT (node1 != NULL); ASSERT (gl_list_get_at (list1, index) == obj); ASSERT (gl_list_node_value (list1, node1) == obj); node2 = gl_list_nx_set_at (list2, index, obj); ASSERT (node2 != NULL); ASSERT (gl_list_get_at (list2, index) == obj); ASSERT (gl_list_node_value (list2, node2) == obj); if (index > 0) { ASSERT (gl_list_node_value (list1, gl_list_previous_node (list1, node1)) == gl_list_get_at (list1, index - 1)); } if (index + 1 < gl_list_size (list1)) { ASSERT (gl_list_node_value (list1, gl_list_next_node (list1, node1)) == gl_list_get_at (list1, index + 1)); } } break; case 1: { const char *obj = RANDOM_OBJECT (); gl_list_node_t node1, node2; node1 = gl_list_search (list1, obj); node2 = gl_list_search (list2, obj); if (node1 == NULL) { ASSERT (node2 == NULL); } else { ASSERT (node2 != NULL); ASSERT (gl_list_node_value (list1, node1) == obj); ASSERT (gl_list_node_value (list2, node2) == obj); } } break; case 2: { const char *obj = RANDOM_OBJECT (); size_t index1, index2; index1 = gl_list_indexof (list1, obj); index2 = gl_list_indexof (list2, obj); if (index1 == (size_t)(-1)) { ASSERT (index2 == (size_t)(-1)); } else { ASSERT (index2 != (size_t)(-1)); ASSERT (gl_list_get_at (list1, index1) == obj); ASSERT (gl_list_get_at (list2, index2) == obj); ASSERT (index2 == index1); } } break; case 3: /* add 1 element */ { const char *obj = RANDOM_OBJECT (); gl_list_node_t node1, node2; node1 = gl_list_nx_add_first (list1, obj); ASSERT (node1 != NULL); node2 = gl_list_nx_add_first (list2, obj); ASSERT (node2 != NULL); ASSERT (gl_list_node_value (list1, node1) == obj); ASSERT (gl_list_node_value (list2, node2) == obj); ASSERT (gl_list_get_at (list1, 0) == obj); ASSERT (gl_list_get_at (list2, 0) == obj); } break; case 4: /* add 1 element */ { const char *obj = RANDOM_OBJECT (); gl_list_node_t node1, node2; node1 = gl_list_nx_add_last (list1, obj); ASSERT (node1 != NULL); node2 = gl_list_nx_add_last (list2, obj); ASSERT (node2 != NULL); ASSERT (gl_list_node_value (list1, node1) == obj); ASSERT (gl_list_node_value (list2, node2) == obj); ASSERT (gl_list_get_at (list1, gl_list_size (list1) - 1) == obj); ASSERT (gl_list_get_at (list2, gl_list_size (list2) - 1) == obj); } break; case 5: /* add 3 elements */ { const char *obj0 = RANDOM_OBJECT (); const char *obj1 = RANDOM_OBJECT (); const char *obj2 = RANDOM_OBJECT (); gl_list_node_t node1, node2; node1 = gl_list_nx_add_first (list1, obj2); ASSERT (node1 != NULL); node1 = gl_list_nx_add_before (list1, node1, obj0); ASSERT (node1 != NULL); node1 = gl_list_nx_add_after (list1, node1, obj1); ASSERT (node1 != NULL); node2 = gl_list_nx_add_first (list2, obj2); ASSERT (node2 != NULL); node2 = gl_list_nx_add_before (list2, node2, obj0); ASSERT (node2 != NULL); node2 = gl_list_nx_add_after (list2, node2, obj1); ASSERT (node2 != NULL); ASSERT (gl_list_node_value (list1, node1) == obj1); ASSERT (gl_list_node_value (list2, node2) == obj1); ASSERT (gl_list_get_at (list1, 0) == obj0); ASSERT (gl_list_get_at (list1, 1) == obj1); ASSERT (gl_list_get_at (list1, 2) == obj2); ASSERT (gl_list_get_at (list2, 0) == obj0); ASSERT (gl_list_get_at (list2, 1) == obj1); ASSERT (gl_list_get_at (list2, 2) == obj2); } break; case 6: /* add 1 element */ { size_t index = RANDOM (gl_list_size (list1) + 1); const char *obj = RANDOM_OBJECT (); gl_list_node_t node1, node2; node1 = gl_list_nx_add_at (list1, index, obj); ASSERT (node1 != NULL); node2 = gl_list_nx_add_at (list2, index, obj); ASSERT (node2 != NULL); ASSERT (gl_list_get_at (list1, index) == obj); ASSERT (gl_list_node_value (list1, node1) == obj); ASSERT (gl_list_get_at (list2, index) == obj); ASSERT (gl_list_node_value (list2, node2) == obj); if (index > 0) { ASSERT (gl_list_node_value (list1, gl_list_previous_node (list1, node1)) == gl_list_get_at (list1, index - 1)); } if (index + 1 < gl_list_size (list1)) { ASSERT (gl_list_node_value (list1, gl_list_next_node (list1, node1)) == gl_list_get_at (list1, index + 1)); } } break; case 7: case 8: /* remove 1 element */ if (gl_list_size (list1) > 0) { size_t n = gl_list_size (list1); const char *obj = gl_list_get_at (list1, RANDOM (n)); gl_list_node_t node1, node2; node1 = gl_list_search (list1, obj); node2 = gl_list_search (list2, obj); ASSERT (node1 != NULL); ASSERT (node2 != NULL); ASSERT (gl_list_remove_node (list1, node1)); ASSERT (gl_list_remove_node (list2, node2)); ASSERT (gl_list_size (list1) == n - 1); } break; case 9: case 10: /* remove 1 element */ if (gl_list_size (list1) > 0) { size_t n = gl_list_size (list1); size_t index = RANDOM (n); ASSERT (gl_list_remove_at (list1, index)); ASSERT (gl_list_remove_at (list2, index)); ASSERT (gl_list_size (list1) == n - 1); } break; case 11: case 12: /* remove 1 element */ if (gl_list_size (list1) > 0) { size_t n = gl_list_size (list1); const char *obj = gl_list_get_at (list1, RANDOM (n)); ASSERT (gl_list_remove (list1, obj)); ASSERT (gl_list_remove (list2, obj)); ASSERT (gl_list_size (list1) == n - 1); } break; case 13: if (gl_list_size (list1) > 0) { size_t n = gl_list_size (list1); const char *obj = "xyzzy"; ASSERT (!gl_list_remove (list1, obj)); ASSERT (!gl_list_remove (list2, obj)); ASSERT (gl_list_size (list1) == n); } break; case 14: { size_t n = gl_list_size (list1); gl_list_iterator_t iter1, iter2; const void *elt; iter1 = gl_list_iterator (list1); iter2 = gl_list_iterator (list2); for (i = 0; i < n; i++) { ASSERT (gl_list_iterator_next (&iter1, &elt, NULL)); ASSERT (gl_list_get_at (list1, i) == elt); ASSERT (gl_list_iterator_next (&iter2, &elt, NULL)); ASSERT (gl_list_get_at (list2, i) == elt); } ASSERT (!gl_list_iterator_next (&iter1, &elt, NULL)); ASSERT (!gl_list_iterator_next (&iter2, &elt, NULL)); gl_list_iterator_free (&iter1); gl_list_iterator_free (&iter2); } break; case 15: { size_t end = RANDOM (gl_list_size (list1) + 1); size_t start = RANDOM (end + 1); gl_list_iterator_t iter1, iter2; const void *elt; iter1 = gl_list_iterator_from_to (list1, start, end); iter2 = gl_list_iterator_from_to (list2, start, end); for (i = start; i < end; i++) { ASSERT (gl_list_iterator_next (&iter1, &elt, NULL)); ASSERT (gl_list_get_at (list1, i) == elt); ASSERT (gl_list_iterator_next (&iter2, &elt, NULL)); ASSERT (gl_list_get_at (list2, i) == elt); } ASSERT (!gl_list_iterator_next (&iter1, &elt, NULL)); ASSERT (!gl_list_iterator_next (&iter2, &elt, NULL)); gl_list_iterator_free (&iter1); gl_list_iterator_free (&iter2); } break; } check_equals (list1, list2); } gl_list_free (list1); gl_list_free (list2); free (contents); } return 0; }