Your Search Results

    Abc Assembler Tests

    It is possible to write tests using the abc assembler.  The assembler code can be found in /utils/abcasm.  Tests can be found in /test/acceptance/abcasm and end with the .abs extension.  The tests are run using the same runtests.py script that is used for the actionscript tests.  

    When run, the assembler tests include the abcasm/abs_helper.as file which defines the following functions:

    START(Summary:String):void - Start a new test section described by Summary
    END():void - Test section finished
    COMPARE_STRICTEQ(name:String, expected:*, actual:*):void - Compare the results of a testcase where name is the testcase name
    COMPARE_TYPEERROR(name:String, expected:*, actual:*):void - Special function for comparing TypeErrors (RuntimeErrors) - Will only compare the 
        first 22 chars of expected and actual so that test can be run in Release and ReleaseDebugger configurations.
    COMPARE_NUMBEREQ(name:String, expected:*, actual:*, fractionDigits:int=-1):void - Compare 2 Numbers up to FractionDigits
          This is to be used for high precision numbers that may vary slightly due to platform differences.
    
    

    Sample abcasm test

    /* ***** BEGIN LICENSE BLOCK *****
     * Version: MPL 1.1/GPL 2.0/LGPL 2.1
     *
     * The contents of this file are subject to the Mozilla Public License Version
     * 1.1 (the "License"); you may not use this file except in compliance with
     * the License. You may obtain a copy of the License at
     * http://www.mozilla.org/MPL/
     *
     * Software distributed under the License is distributed on an "AS IS" basis,
     * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
     * for the specific language governing rights and limitations under the
     * License.
     *
     * The Original Code is [Open Source Virtual Machine.].
     *
     * The Initial Developer of the Original Code is
     * Adobe System Incorporated.
     * Portions created by the Initial Developer are Copyright (C) 2009
     * the Initial Developer. All Rights Reserved.
     *
     * Contributor(s):
     *   Adobe AS3 Team
     *
     * Alternatively, the contents of this file may be used under the terms of
     * either the GNU General Public License Version 2 or later (the "GPL"), or
     * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
     * in which case the provisions of the GPL or the LGPL are applicable instead
     * of those above. If you wish to allow use of your version of this file only
     * under the terms of either the GPL or the LGPL, and not to allow others to
     * use your version of this file under the terms of the MPL, indicate your
     * decision by deleting the provisions above and replace them with the notice
     * and other provisions required by the GPL or the LGPL. If you do not delete
     * the provisions above, a recipient may use your version of this file under
     * the terms of any one of the MPL, the GPL or the LGPL.
     *
     * ***** END LICENSE BLOCK ***** */
    
    function main() {
        getlocal0
        pushscope
        findproperty START 
        pushstring "instructions that start with the letter L" 
        callpropvoid START 1
        newfunction .function_id(runTest)
        getlocal0
        call 0
        findproperty END
        callpropvoid END 0
        returnvoid
    }
    
    function runTest()
    {
        // test null <= null == True
        findproperty COMPARE_STRICTEQ
        pushstring "null lessequals null" // testname
        pushtrue // expected
        pushnull
        pushnull
        lessequals // actual
        callpropvoid COMPARE_STRICTEQ 3
    
        // Use .try / .catch to catch TypeError
        // convert_o null
        .try {
            pushnull
            convert_o
            pop
            
            findproperty FAIL
            pushstring "convert_o null"
            pushstring "exception should have been thrown: TypeError: Error #1009: Cannot access a property or method of a null object reference."
            getlocal1
            callpropvoid FAIL 3
            
            jump finished_convert_o_null
        }
        .catch {
            getlocal0
            pushscope
            setlocal2   // save typeError
            findproperty COMPARE_TYPEERROR
            pushstring "convert_o null" // test name
            pushstring "TypeError: Error #1009" // expected
            getlocal2  // actual
            callpropvoid COMPARE_TYPEERROR 3
        }
        
        finished_convert_o_null:
    }
    
    

    Document Tags and Contributors

    Contributors to this page: Sheppy
    Last updated by: Sheppy,