• Is it possible to pass incoming params to a codeblock using reflect

    From Jafar@21:1/5 to All on Wed Jan 6 06:29:20 2021
    Ok, I already got something working.
    Apparently visual objects just discards non existing params so while using the reflection functions SendClass & Eval, so I created some dummy arguments.

    METHOD ValidateTimeString(stringToValidate AS STRING) AS ValidationResultModel CLASS FakeTimeValidator
    RETURN GetFakedOrDefaultValue(SELF, GetCurrentMethodName(), stringToValidate) FUNCTION GetFakedOrDefaultValue(;
    fakedObject AS OBJECT, methodToFake AS SYMBOL,;
    param1 := NIL, param2 := NIL, param3 := NIL, param4 := NIL, param5 := NIL,;
    param6 := NIL, param7 := NIL, param8 := NIL, param9 := NIL, param10 := NIL;
    ) AS USUAL STRICT
    ...
    IF !Empty(fakedFunctionBlock)
    RETURN Eval(;
    fakedFunctionBlock,;
    param1, param2, param3, param4, param5,;
    param6, param7, param8, param9, param10;
    )
    ENDIF
    ....
    realValue := SendClass(;
    fakedObject, methodToFake, parentClassOfFakedObject,;
    param1, param2, param3, param4, param5,;
    param6, param7, param8, param9, param10;
    )
    RETURN realValue

    Op woensdag 6 januari 2021 om 13:53:46 UTC+1 schreef Jafar:
    I am trying to create some fakes inside Visual Objects in order to rule out some dependencies while unit testing. Here is some example method that uses CodeBlocks to achieve that:

    METHOD ValidateTimeString(stringToValidate AS STRING) AS ValidationResultModel CLASS FakeTimeValidator
    IF !Empty(FakeValidateTimeStringFunction)
    RETURN Eval(FakeValidateTimeStringFunction, stringToValidate)
    ENDIF
    RETURN SUPER:ValidateTimeString(stringToValidate)

    I would like to make this more generic however, so that incoming arguments are passed automatically to subsequent CodeBlocks. Is there some method or code sample I can use to pass incoming params to a codeblock. I woud like to have something like a
    GetFakeOutput function, but just don't know how to do this:

    METHOD ValidateTimeString(stringToValidate AS STRING) AS ValidationResultModel CLASS FakeTimeValidator
    RETURN GetFakeOutput(SELF, GetCurrentMethodName(), GetCurrentMethodValues())

    FUNCTION GetCurrentMethodName() AS SYMBOL STRICT
    // I already know how to do this!
    RETURN AsSymbol(SplitString(ProcName(1), ":", FALSE)[2])

    FUNCTION GetCurrentMethodValues() AS ARRAY
    // I have no clue what to put here:
    LOCAL values := ??? AS ARRAY
    RETURN values

    FUNCTION GetFakeOutput(instance AS OBJECT, methodToFake AS SYMBOL, inputParams AS ARRAY) AS CODEBLOCK
    // I have no clue what to put here:
    LOCAL fakeCodeBlock := ??? AS CODEBLOCK
    RETURN fakedCodeBlock

    Thanks in advance.

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)