package tests { import com.display.MediaImage; import flash.events.TimerEvent; import flash.system.System; import flash.utils.Timer; import flexunit.framework.TestCase; import flexunit.framework.TestSuite; public class MediaImageTest extends TestCase { private var m:MediaImage ; private var mem_second:uint; private var mem_first:uint; private var firstTime:Boolean = true; private var refs:Array; public function MediaImageTest(method:String) { super(method); } public static function suite():TestSuite { var ts:TestSuite = new TestSuite(); ts.addTest(new MediaImageTest("testMediaImage")); return ts; } public function testMediaImage():void { allocate(); delayAndCleanUp(); } private function allocate():void { if (! refs) { refs = new Array(); } for (var i:int = 0; i < 25; i++) { m = new MediaImage("resources/example.png"); refs.push(m); } } private function delayAndCleanUp():void { // delay cleanning or else the memory will be cleaned right after var t:Timer = new Timer(5000, 1); t.addEventListener(TimerEvent.TIMER_COMPLETE, addAsync(cleanAndAllocateMore, 5000)); t.start(); } private function cleanAndAllocateMore(e:TimerEvent):void { doCleanUp(); // save totalMemory at this state mem_first = System.totalMemory; var t:Timer = new Timer(5000, 1); t.addEventListener(TimerEvent.TIMER_COMPLETE, addAsync(allocateMore, 5000)); t.start(); } private function allocateMore(e:TimerEvent):void { trace("allocate more"); allocate(); // delay cleanning or else the memory will be cleaned right after var t:Timer = new Timer(5000, 1); t.addEventListener(TimerEvent.TIMER_COMPLETE, addAsync(cleanAndCheckMemory, 5000)); t.start(); } private function cleanAndCheckMemory(e:TimerEvent):void { doCleanUp(); mem_second = System.totalMemory; // check if we return to the same amount of memory assertEquals((mem_first - mem_second), 0); } private function doCleanUp():void { trace("cleanUp"); while (refs.length > 0) { var image:MediaImage = refs.pop(); image.dispose(); } refs = null; m = null; System.gc(); } } }