Table 130401 CAL Test Line

App
Base Application
Namespace
System.TestTools.TestRunner
Versions
17-28

Fields, 13Keys, 2Procedures, 8

Versions171819202122232425262728

Source29

Source in 29

src/Layers/W1/BaseApp/System/DevTools/CALTest/CALTestLine.Table.al345 lines, Copyright (c) Microsoft Corporation. MIT

namespace System.TestTools.TestRunner;

using System.Reflection;

table 130401 "CAL Test Line"
{
    Caption = 'CAL Test Line';
    ReplicateData = false;
    DataClassification = CustomerContent;

    fields
    {
        field(1; "Test Suite"; Code[10])
        {
            Caption = 'Test Suite';
            TableRelation = "CAL Test Suite".Name;
        }
        field(2; "Line No."; Integer)
        {
            AutoIncrement = true;
            Caption = 'Line No.';
        }
        field(3; "Line Type"; Option)
        {
            Caption = 'Line Type';
            Editable = false;
            InitValue = "Codeunit";
            OptionCaption = 'Group,Codeunit,Function';
            OptionMembers = Group,"Codeunit","Function";

            trigger OnValidate()
            begin
                case "Line Type" of
                    "Line Type"::Group:
                        TestField("Test Codeunit", 0);
                    "Line Type"::Codeunit:
                        begin
                            TestField("Function", '');
                            Name := '';
                        end;
                end;

                UpdateLevelNo();
            end;
        }
        field(4; "Test Codeunit"; Integer)
        {
            Caption = 'Test Codeunit';
            Editable = false;
            TableRelation = if ("Line Type" = const(Codeunit)) AllObjWithCaption."Object ID" where("Object Type" = const(Codeunit),
                                                                                                  "Object Subtype" = const('Test'));

            trigger OnValidate()
            var
                AllObjWithCaption: Record AllObjWithCaption;
            begin
                if "Test Codeunit" = 0 then
                    exit;
                TestField("Function", '');
                if "Line Type" = "Line Type"::Group then
                    TestField("Test Codeunit", 0);
                if AllObjWithCaption.Get(AllObjWithCaption."Object Type"::Codeunit, "Test Codeunit") then
                    Name := AllObjWithCaption."Object Name";
                UpdateLevelNo();
            end;
        }
        field(5; Name; Text[128])
        {
            Caption = 'Name';
            Editable = false;

            trigger OnValidate()
            var
                TestUnitNo: Integer;
            begin
                case "Line Type" of
                    "Line Type"::Group:
                        ;
                    "Line Type"::"Function":
                        TestField(Name, "Function");
                    "Line Type"::Codeunit:
                        begin
                            TestField(Name);
                            Evaluate(TestUnitNo, Name);
                            Validate("Test Codeunit", TestUnitNo);
                        end;
                end;
            end;
        }
        field(6; "Function"; Text[128])
        {
            Caption = 'Function';
            Editable = false;

            trigger OnValidate()
            begin
                if "Line Type" <> "Line Type"::"Function" then begin
                    TestField("Function", '');
                    exit;
                end;
                UpdateLevelNo();
                Name := "Function";
            end;
        }
        field(7; Run; Boolean)
        {
            Caption = 'Run';

            trigger OnValidate()
            begin
                if "Function" = 'OnRun' then
                    Error(CannotChangeValueErr);
                CALTestLine.Copy(Rec);
                UpdateGroup(CALTestLine);
                UpdateChildren(CALTestLine);
            end;
        }
        field(8; Result; Option)
        {
            Caption = 'Result';
            Editable = false;
            OptionCaption = ' ,Failure,Success,Skipped';
            OptionMembers = " ",Failure,Success,Skipped;

            trigger OnValidate()
            begin
                "First Error" := '';
            end;
        }
        field(9; "First Error"; Text[250])
        {
            Caption = 'First Error';
            Editable = false;
        }
        field(10; "Start Time"; DateTime)
        {
            Caption = 'Start Time';
            Editable = false;
        }
        field(11; "Finish Time"; DateTime)
        {
            Caption = 'Finish Time';
            Editable = false;
        }
        field(12; Level; Integer)
        {
            Caption = 'Level';
            Editable = false;
        }
        field(13; "Hit Objects"; Integer)
        {
            CalcFormula = count("CAL Test Coverage Map" where("Test Codeunit ID" = field("Test Codeunit")));
            Caption = 'Hit Objects';
            Editable = false;
            FieldClass = FlowField;
        }
    }

    keys
    {
        key(Key1; "Test Suite", "Line No.")
        {
            Clustered = true;
        }
        key(Key2; "Test Suite", Result, "Line Type", Run)
        {
        }
    }

    fieldgroups
    {
    }

    trigger OnDelete()
    begin
        DeleteChildren();
    end;

    trigger OnInsert()
    begin
        if "Line Type" = "Line Type"::Codeunit then
            CALTestMgt.RunSuite(Rec, false);
    end;

    trigger OnModify()
    begin
        if ("Line Type" = "Line Type"::Codeunit) and
           ("Test Codeunit" <> xRec."Test Codeunit")
        then
            CALTestMgt.RunSuite(Rec, false);
    end;

    var
        CALTestLine: Record "CAL Test Line";
        CALTestMgt: Codeunit "CAL Test Management";
        CannotChangeValueErr: Label 'You cannot change the value of the OnRun.', Locked = true;

    procedure UpdateGroup(var CALTestLine: Record "CAL Test Line")
    var
        CopyOfCALTestLine: Record "CAL Test Line";
        OutOfGroup: Boolean;
    begin
        if not CALTestLine.Run then
            exit;
        if not ("Line Type" = "Line Type"::"Function") then
            exit;

        CopyOfCALTestLine.Copy(CALTestLine);
        CALTestLine.Reset();
        CALTestLine.SetRange("Test Suite", CALTestLine."Test Suite");
        repeat
            OutOfGroup :=
              (CALTestLine.Next(-1) = 0) or
              (CALTestLine."Test Codeunit" <> CopyOfCALTestLine."Test Codeunit");

            if ((CALTestLine."Line Type" in [CALTestLine."Line Type"::Group, CALTestLine."Line Type"::Codeunit]) or (CALTestLine."Function" = 'OnRun')) and
               not CALTestLine.Run
            then begin
                CALTestLine.Run := true;
                CALTestLine.Modify();
            end;
        until OutOfGroup;
        CALTestLine.Copy(CopyOfCALTestLine);
    end;

    procedure UpdateChildren(var CALTestLine: Record "CAL Test Line")
    var
        CopyOfCALTestLine: Record "CAL Test Line";
    begin
        if CALTestLine."Line Type" = "Line Type"::"Function" then
            exit;

        CopyOfCALTestLine.Copy(CALTestLine);
        CALTestLine.Reset();
        CALTestLine.SetRange("Test Suite", CALTestLine."Test Suite");
        while (CALTestLine.Next() <> 0) and not (CALTestLine."Line Type" in [CALTestLine."Line Type"::Group, CopyOfCALTestLine."Line Type"]) do begin
            CALTestLine.Run := CopyOfCALTestLine.Run;
            CALTestLine.Modify();
        end;
        CALTestLine.Copy(CopyOfCALTestLine);
    end;

    procedure GetMinCodeunitLineNo() MinLineNo: Integer
    var
        CALTestLine: Record "CAL Test Line";
    begin
        CALTestLine.Copy(Rec);
        CALTestLine.Reset();
        CALTestLine.SetRange("Test Suite", CALTestLine."Test Suite");

        MinLineNo := CALTestLine."Line No.";
        repeat
            MinLineNo := CALTestLine."Line No.";
        until (CALTestLine.Level < 2) or (CALTestLine.Next(-1) = 0);
    end;

    procedure GetMaxGroupLineNo() MaxLineNo: Integer
    var
        CALTestLine: Record "CAL Test Line";
    begin
        CALTestLine.Copy(Rec);
        CALTestLine.Reset();
        CALTestLine.SetRange("Test Suite", CALTestLine."Test Suite");

        MaxLineNo := CALTestLine."Line No.";
        while (CALTestLine.Next() <> 0) and (CALTestLine.Level >= Rec.Level) do
            MaxLineNo := CALTestLine."Line No.";
    end;

    procedure GetMaxCodeunitLineNo(var NoOfFunctions: Integer) MaxLineNo: Integer
    var
        CALTestLine: Record "CAL Test Line";
    begin
        TestField("Test Codeunit");
        NoOfFunctions := 0;

        CALTestLine.Copy(Rec);
        CALTestLine.Reset();
        CALTestLine.SetRange("Test Suite", CALTestLine."Test Suite");
        MaxLineNo := CALTestLine."Line No.";
        while (CALTestLine.Next() <> 0) and (CALTestLine."Line Type" = CALTestLine."Line Type"::"Function") do begin
            MaxLineNo := CALTestLine."Line No.";
            if CALTestLine.Run then
                NoOfFunctions += 1;
        end;
    end;

    procedure DeleteChildren()
    var
        CopyOfCALTestLine: Record "CAL Test Line";
    begin
        CopyOfCALTestLine.Copy(Rec);
        Reset();
        SetRange("Test Suite", "Test Suite");
        while (Next() <> 0) and (Level > CopyOfCALTestLine.Level) do
            Delete(true);
        Copy(CopyOfCALTestLine);
    end;

    procedure CalcTestResults(var Success: Integer; var Fail: Integer; var Skipped: Integer; var NotExecuted: Integer)
    var
        CALTestLine: Record "CAL Test Line";
    begin
        CALTestLine.SetRange("Test Suite", "Test Suite");
        CALTestLine.SetFilter("Function", '<>%1', 'OnRun');
        CALTestLine.SetRange("Line Type", "Line Type"::"Function");

        CALTestLine.SetRange(Result, Result::Success);
        Success := CALTestLine.Count();

        CALTestLine.SetRange(Result, Result::Failure);
        Fail := CALTestLine.Count();

        CALTestLine.SetRange(Result, Result::Skipped);
        Skipped := CALTestLine.Count();

        CALTestLine.SetRange(Result, Result::" ");
        NotExecuted := CALTestLine.Count();
    end;

    local procedure UpdateLevelNo()
    begin
        case "Line Type" of
            "Line Type"::Group:
                Level := 0;
            "Line Type"::Codeunit:
                Level := 1;
            else
                Level := 2;
        end;
    end;

    procedure ShowTestResults()
    var
        CALTestResult: Record "CAL Test Result";
    begin
        CALTestResult.SetRange("Codeunit ID", "Test Codeunit");
        if "Function" <> '' then
            CALTestResult.SetRange("Function Name", "Function");
        if CALTestResult.FindLast() then;
        PAGE.Run(PAGE::"CAL Test Results", CALTestResult);
    end;
}