ROUTINE-LEVEL ON ERROR UNDO, THROW.
/*------------------------------------------------------------------------
  File: unittests/TestDateFormatAdjustmentDisplay.cls
  Description: Displays date format adjustments for variable declarations in OpenEdge ABL
               across 72 format permutations for all 6 SESSION:DATE-FORMAT settings.
------------------------------------------------------------------------*/

USING OpenEdge.Core.Assert FROM PROPATH.

CLASS unittests.DateFormatAdjustmentDisplay:

    /* Master test method to redirect output and call the method for each SESSION:DATE-FORMAT */
    @Test.
    METHOD PUBLIC VOID testDisplayAllFormatAdjustments():
        /* Redirect output to a file */
        OUTPUT TO "date_format_adjustment_display.txt".

        /* Set SESSION:DATE-FORMAT and call the display method for each value */
        SESSION:DATE-FORMAT = "mdy".
        displayFormatAdjustment().
        SESSION:DATE-FORMAT = "dmy".
        displayFormatAdjustment().
        SESSION:DATE-FORMAT = "ymd".
        displayFormatAdjustment().
        SESSION:DATE-FORMAT = "myd".
        displayFormatAdjustment().
        SESSION:DATE-FORMAT = "dym".
        displayFormatAdjustment().
        SESSION:DATE-FORMAT = "ydm".
        displayFormatAdjustment().

        /* Close the output file */
        OUTPUT CLOSE.
    END METHOD.

    /* Method to display format adjustments based on the current SESSION:DATE-FORMAT */
    METHOD PRIVATE VOID displayFormatAdjustment():
        DEFINE VARIABLE d01 AS DATE NO-UNDO FORMAT "99.99.99".
        DEFINE VARIABLE d02 AS DATE NO-UNDO FORMAT "99.99/99".
        DEFINE VARIABLE d03 AS DATE NO-UNDO FORMAT "99.99-99".
        DEFINE VARIABLE d04 AS DATE NO-UNDO FORMAT "99/99.99".
        DEFINE VARIABLE d05 AS DATE NO-UNDO FORMAT "99/99/99".
        DEFINE VARIABLE d06 AS DATE NO-UNDO FORMAT "99/99-99".
        DEFINE VARIABLE d07 AS DATE NO-UNDO FORMAT "99-99.99".
        DEFINE VARIABLE d08 AS DATE NO-UNDO FORMAT "99-99/99".
        DEFINE VARIABLE d09 AS DATE NO-UNDO FORMAT "99-99-99".
        DEFINE VARIABLE d10 AS DATE NO-UNDO FORMAT "99.99.9999".
        DEFINE VARIABLE d11 AS DATE NO-UNDO FORMAT "99.99/9999".
        DEFINE VARIABLE d12 AS DATE NO-UNDO FORMAT "99.99-9999".
        DEFINE VARIABLE d13 AS DATE NO-UNDO FORMAT "99/99.9999".
        DEFINE VARIABLE d14 AS DATE NO-UNDO FORMAT "99/99/9999".
        DEFINE VARIABLE d15 AS DATE NO-UNDO FORMAT "99/99-9999".
        DEFINE VARIABLE d16 AS DATE NO-UNDO FORMAT "99-99.9999".
        DEFINE VARIABLE d17 AS DATE NO-UNDO FORMAT "99-99/9999".
        DEFINE VARIABLE d18 AS DATE NO-UNDO FORMAT "99-99-9999".
        DEFINE VARIABLE d19 AS DATE NO-UNDO FORMAT "99.9999.99".
        DEFINE VARIABLE d20 AS DATE NO-UNDO FORMAT "99.9999/99".
        DEFINE VARIABLE d21 AS DATE NO-UNDO FORMAT "99.9999-99".
        DEFINE VARIABLE d22 AS DATE NO-UNDO FORMAT "99/9999.99".
        DEFINE VARIABLE d23 AS DATE NO-UNDO FORMAT "99/9999/99".
        DEFINE VARIABLE d24 AS DATE NO-UNDO FORMAT "99/9999-99".
        DEFINE VARIABLE d25 AS DATE NO-UNDO FORMAT "99-9999.99".
        DEFINE VARIABLE d26 AS DATE NO-UNDO FORMAT "99-9999/99".
        DEFINE VARIABLE d27 AS DATE NO-UNDO FORMAT "99-9999-99".
        DEFINE VARIABLE d28 AS DATE NO-UNDO FORMAT "99.9999.9999".
        DEFINE VARIABLE d29 AS DATE NO-UNDO FORMAT "99.9999/9999".
        DEFINE VARIABLE d30 AS DATE NO-UNDO FORMAT "99.9999-9999".
        DEFINE VARIABLE d31 AS DATE NO-UNDO FORMAT "99/9999.9999".
        DEFINE VARIABLE d32 AS DATE NO-UNDO FORMAT "99/9999/9999".
        DEFINE VARIABLE d33 AS DATE NO-UNDO FORMAT "99/9999-9999".
        DEFINE VARIABLE d34 AS DATE NO-UNDO FORMAT "99-9999.9999".
        DEFINE VARIABLE d35 AS DATE NO-UNDO FORMAT "99-9999/9999".
        DEFINE VARIABLE d36 AS DATE NO-UNDO FORMAT "99-9999-9999".
        DEFINE VARIABLE d37 AS DATE NO-UNDO FORMAT "9999.99.99".
        DEFINE VARIABLE d38 AS DATE NO-UNDO FORMAT "9999.99/99".
        DEFINE VARIABLE d39 AS DATE NO-UNDO FORMAT "9999.99-99".
        DEFINE VARIABLE d40 AS DATE NO-UNDO FORMAT "9999/99.99".
        DEFINE VARIABLE d41 AS DATE NO-UNDO FORMAT "9999/99/99".
        DEFINE VARIABLE d42 AS DATE NO-UNDO FORMAT "9999/99-99".
        DEFINE VARIABLE d43 AS DATE NO-UNDO FORMAT "9999-99.99".
        DEFINE VARIABLE d44 AS DATE NO-UNDO FORMAT "9999-99/99".
        DEFINE VARIABLE d45 AS DATE NO-UNDO FORMAT "9999-99-99".
        DEFINE VARIABLE d46 AS DATE NO-UNDO FORMAT "9999.99.9999".
        DEFINE VARIABLE d47 AS DATE NO-UNDO FORMAT "9999.99/9999".
        DEFINE VARIABLE d48 AS DATE NO-UNDO FORMAT "9999.99-9999".
        DEFINE VARIABLE d49 AS DATE NO-UNDO FORMAT "9999/99.9999".
        DEFINE VARIABLE d50 AS DATE NO-UNDO FORMAT "9999/99/9999".
        DEFINE VARIABLE d51 AS DATE NO-UNDO FORMAT "9999/99-9999".
        DEFINE VARIABLE d52 AS DATE NO-UNDO FORMAT "9999-99.9999".
        DEFINE VARIABLE d53 AS DATE NO-UNDO FORMAT "9999-99/9999".
        DEFINE VARIABLE d54 AS DATE NO-UNDO FORMAT "9999-99-9999".
        DEFINE VARIABLE d55 AS DATE NO-UNDO FORMAT "9999.9999.99".
        DEFINE VARIABLE d56 AS DATE NO-UNDO FORMAT "9999.9999/99".
        DEFINE VARIABLE d57 AS DATE NO-UNDO FORMAT "9999.9999-99".
        DEFINE VARIABLE d58 AS DATE NO-UNDO FORMAT "9999/9999.99".
        DEFINE VARIABLE d59 AS DATE NO-UNDO FORMAT "9999/9999/99".
        DEFINE VARIABLE d60 AS DATE NO-UNDO FORMAT "9999/9999-99".
        DEFINE VARIABLE d61 AS DATE NO-UNDO FORMAT "9999-9999.99".
        DEFINE VARIABLE d62 AS DATE NO-UNDO FORMAT "9999-9999/99".
        DEFINE VARIABLE d63 AS DATE NO-UNDO FORMAT "9999-9999-99".
        DEFINE VARIABLE d64 AS DATE NO-UNDO FORMAT "9999.9999.9999".
        DEFINE VARIABLE d65 AS DATE NO-UNDO FORMAT "9999.9999/9999".
        DEFINE VARIABLE d66 AS DATE NO-UNDO FORMAT "9999.9999-9999".
        DEFINE VARIABLE d67 AS DATE NO-UNDO FORMAT "9999/9999.9999".
        DEFINE VARIABLE d68 AS DATE NO-UNDO FORMAT "9999/9999/9999".
        DEFINE VARIABLE d69 AS DATE NO-UNDO FORMAT "9999/9999-9999".
        DEFINE VARIABLE d70 AS DATE NO-UNDO FORMAT "9999-9999.9999".
        DEFINE VARIABLE d71 AS DATE NO-UNDO FORMAT "9999-9999/9999".
        DEFINE VARIABLE d72 AS DATE NO-UNDO FORMAT "9999-9999-9999".

        DEFINE FRAME myFrame
            d01 d02 d03 d04 d05 d06 d07 d08 d09 d10
            d11 d12 d13 d14 d15 d16 d17 d18 d19 d20
            d21 d22 d23 d24 d25 d26 d27 d28 d29 d30
            d31 d32 d33 d34 d35 d36 d37 d38 d39 d40
            d41 d42 d43 d44 d45 d46 d47 d48 d49 d50
            d51 d52 d53 d54 d55 d56 d57 d58 d59 d60
            d61 d62 d63 d64 d65 d66 d67 d68 d69 d70
            d71 d72
            WITH NO-LABELS NO-BOX DOWN SIZE 100 BY 10.

        /* Display session format header */
        DISPLAY "SESSION:DATE-FORMAT = " + SESSION:DATE-FORMAT FORMAT "x(30)".

        /* Display formats for each variable */
        displayFormat("99.99.99", d01:FORMAT).
        displayFormat("99.99/99", d02:FORMAT).
        displayFormat("99.99-99", d03:FORMAT).
        displayFormat("99/99.99", d04:FORMAT).
        displayFormat("99/99/99", d05:FORMAT).
        displayFormat("99/99-99", d06:FORMAT).
        displayFormat("99-99.99", d07:FORMAT).
        displayFormat("99-99/99", d08:FORMAT).
        displayFormat("99-99-99", d09:FORMAT).
        displayFormat("99.99.9999", d10:FORMAT).
        displayFormat("99.99/9999", d11:FORMAT).
        displayFormat("99.99-9999", d12:FORMAT).
        displayFormat("99/99.9999", d13:FORMAT).
        displayFormat("99/99/9999", d14:FORMAT).
        displayFormat("99/99-9999", d15:FORMAT).
        displayFormat("99-99.9999", d16:FORMAT).
        displayFormat("99-99/9999", d17:FORMAT).
        displayFormat("99-99-9999", d18:FORMAT).
        displayFormat("99.9999.99", d19:FORMAT).
        displayFormat("99.9999/99", d20:FORMAT).
        displayFormat("99.9999-99", d21:FORMAT).
        displayFormat("99/9999.99", d22:FORMAT).
        displayFormat("99/9999/99", d23:FORMAT).
        displayFormat("99/9999-99", d24:FORMAT).
        displayFormat("99-9999.99", d25:FORMAT).
        displayFormat("99-9999/99", d26:FORMAT).
        displayFormat("99-9999-99", d27:FORMAT).
        displayFormat("99.9999.9999", d28:FORMAT).
        displayFormat("99.9999/9999", d29:FORMAT).
        displayFormat("99.9999-9999", d30:FORMAT).
        displayFormat("99/9999.9999", d31:FORMAT).
        displayFormat("99/9999/9999", d32:FORMAT).
        displayFormat("99/9999-9999", d33:FORMAT).
        displayFormat("99-9999.9999", d34:FORMAT).
        displayFormat("99-9999/9999", d35:FORMAT).
        displayFormat("99-9999-9999", d36:FORMAT).
        displayFormat("9999.99.99", d37:FORMAT).
        displayFormat("9999.99/99", d38:FORMAT).
        displayFormat("9999.99-99", d39:FORMAT).
        displayFormat("9999/99.99", d40:FORMAT).
        displayFormat("9999/99/99", d41:FORMAT).
        displayFormat("9999/99-99", d42:FORMAT).
        displayFormat("9999-99.99", d43:FORMAT).
        displayFormat("9999-99/99", d44:FORMAT).
        displayFormat("9999-99-99", d45:FORMAT).
        displayFormat("9999.99.9999", d46:FORMAT).
        displayFormat("9999.99/9999", d47:FORMAT).
        displayFormat("9999.99-9999", d48:FORMAT).
        displayFormat("9999/99.9999", d49:FORMAT).
        displayFormat("9999/99/9999", d50:FORMAT).
        displayFormat("9999/99-9999", d51:FORMAT).
        displayFormat("9999-99.9999", d52:FORMAT).
        displayFormat("9999-99/9999", d53:FORMAT).
        displayFormat("9999-99-9999", d54:FORMAT).
        displayFormat("9999.9999.99", d55:FORMAT).
        displayFormat("9999.9999/99", d56:FORMAT).
        displayFormat("9999.9999-99", d57:FORMAT).
        displayFormat("9999/9999.99", d58:FORMAT).
        displayFormat("9999/9999/99", d59:FORMAT).
        displayFormat("9999/9999-99", d60:FORMAT).
        displayFormat("9999-9999.99", d61:FORMAT).
        displayFormat("9999-9999/99", d62:FORMAT).
        displayFormat("9999-9999-99", d63:FORMAT).
        displayFormat("9999.9999.9999", d64:FORMAT).
        displayFormat("9999.9999/9999", d65:FORMAT).
        displayFormat("9999.9999-9999", d66:FORMAT).
        displayFormat("9999/9999.9999", d67:FORMAT).
        displayFormat("9999/9999/9999", d68:FORMAT).
        displayFormat("9999/9999-9999", d69:FORMAT).
        displayFormat("9999-9999.9999", d70:FORMAT).
        displayFormat("9999-9999/9999", d71:FORMAT).
        displayFormat("9999-9999-9999", d72:FORMAT).

    END METHOD.

    /* Helper method to display declared and actual formats if they differ */
    METHOD PRIVATE VOID displayFormat(INPUT pDeclaredFormat AS CHARACTER, INPUT pActualFormat AS CHARACTER):
        IF pDeclaredFormat = pActualFormat THEN
            DISPLAY pDeclaredFormat FORMAT "x(30)" WITH NO-LABELS.
        ELSE
            DISPLAY pDeclaredFormat FORMAT "x(30)" pActualFormat FORMAT "x(30)" WITH NO-LABELS.
    END METHOD.

END CLASS.