{
  "suite_id": "working2-abb120-spec",
  "robot_id": "abb_irb120_3_58",
  "spec_source": "work/doc/通用机器人编程语法规范.md",
  "program_root": "kdl-wasm/web/tests/fixtures/abb120/spec-programs",
  "runtime_commands": [
    "loadProgram",
    "start",
    "stepInto",
    "hold",
    "resume",
    "stepMotion",
    "stop",
    "resetFault"
  ],
  "programs": [
    {
      "program_id": "W2_00_MinimalModule",
      "file": "runtime/W2_00_MinimalModule.grl",
      "coverage_level": "Runtime",
      "spec_sections": [
        4,
        5,
        6,
        9,
        10,
        23
      ],
      "expected_status": "pass",
      "expected_diagnostics": []
    },
    {
      "program_id": "W2_10_DataTargetToolFrame",
      "file": "runtime/W2_10_DataTargetToolFrame.grl",
      "coverage_level": "Runtime",
      "spec_sections": [
        6,
        8,
        9
      ],
      "expected_status": "pass",
      "expected_diagnostics": []
    },
    {
      "program_id": "W2_20_ExpressionMath",
      "file": "runtime/W2_20_ExpressionMath.grl",
      "coverage_level": "Runtime",
      "spec_sections": [
        7,
        9,
        13
      ],
      "expected_status": "pass",
      "expected_diagnostics": []
    },
    {
      "program_id": "W2_30_MotionAllTypes",
      "file": "runtime/W2_30_MotionAllTypes.grl",
      "coverage_level": "Runtime",
      "spec_sections": [
        8,
        9,
        10
      ],
      "expected_status": "pass",
      "expected_diagnostics": []
    },
    {
      "program_id": "W2_40_PathEvents",
      "file": "runtime/W2_40_PathEvents.grl",
      "coverage_level": "Runtime",
      "spec_sections": [
        11,
        13,
        19
      ],
      "expected_status": "pass",
      "expected_diagnostics": []
    },
    {
      "program_id": "W2_50_OperationProcess",
      "file": "runtime/W2_50_OperationProcess.grl",
      "coverage_level": "Runtime",
      "spec_sections": [
        12,
        13
      ],
      "expected_status": "pass",
      "expected_diagnostics": []
    },
    {
      "program_id": "W2_60_IOWaitPulse",
      "file": "runtime/W2_60_IOWaitPulse.grl",
      "coverage_level": "Runtime",
      "spec_sections": [
        13
      ],
      "expected_status": "pass",
      "expected_diagnostics": []
    },
    {
      "program_id": "W2_70_ControlFlow",
      "file": "runtime/W2_70_ControlFlow.grl",
      "coverage_level": "Runtime",
      "spec_sections": [
        14
      ],
      "expected_status": "pass",
      "expected_diagnostics": []
    },
    {
      "program_id": "W2_80_ProcFuncCall",
      "file": "runtime/W2_80_ProcFuncCall.grl",
      "coverage_level": "Runtime",
      "spec_sections": [
        15
      ],
      "expected_status": "pass",
      "expected_diagnostics": []
    },
    {
      "program_id": "W2_90_ExceptionAlarm",
      "file": "runtime/W2_90_ExceptionAlarm.grl",
      "coverage_level": "Runtime",
      "spec_sections": [
        16,
        17
      ],
      "expected_status": "pass",
      "expected_diagnostics": [
        "GRL_P1_UNIMPLEMENTED"
      ]
    },
    {
      "program_id": "W2_E10_ExpressionDiagnostics",
      "file": "static/W2_E10_ExpressionDiagnostics.grl",
      "coverage_level": "Static",
      "spec_sections": [
        7,
        22
      ],
      "expected_status": "diagnostic",
      "expected_diagnostics": [
        "GRL_EXPR_UNKNOWN_SYMBOL",
        "GRL_EXPR_UNKNOWN_FUNCTION",
        "GRL_EXPR_ARITY",
        "GRL_EXPR_DOMAIN",
        "GRL_EXPR_DIV_ZERO",
        "GRL_EXPR_UNIT_MISMATCH"
      ]
    },
    {
      "program_id": "W2_E20_SemanticDiagnostics",
      "file": "static/W2_E20_SemanticDiagnostics.grl",
      "coverage_level": "Static",
      "spec_sections": [
        6,
        15,
        22
      ],
      "expected_status": "diagnostic",
      "expected_diagnostics": [
        "GRL_SYMBOL_DUPLICATE",
        "GRL_ARGUMENT_NOT_LVALUE",
        "GRL_CALL_TARGET_NOT_FOUND",
        "GRL_FUNC_SIDE_EFFECT",
        "GRL_TARGET_NOT_FOUND"
      ]
    },
    {
      "program_id": "W2_E30_MotionDiagnostics",
      "file": "error/W2_E30_MotionDiagnostics.grl",
      "coverage_level": "Static",
      "spec_sections": [
        8,
        9,
        10,
        11,
        22
      ],
      "expected_status": "diagnostic",
      "expected_diagnostics": [
        "KDL_JOINT_LIMIT",
        "KDL_TARGET_UNREACHABLE",
        "GRL_PATH_EMPTY"
      ]
    },
    {
      "program_id": "W2_E40_ControlFlowDiagnostics",
      "file": "static/W2_E40_ControlFlowDiagnostics.grl",
      "coverage_level": "Static",
      "spec_sections": [
        14,
        22
      ],
      "expected_status": "diagnostic",
      "expected_diagnostics": [
        "GRL_BREAK_OUTSIDE_FLOW",
        "GRL_CONTINUE_OUTSIDE_LOOP",
        "GRL_JUMP_INTO_BLOCK",
        "GRL_SWITCH_CASE_DUPLICATE",
        "GRL_SWITCH_CASE_NOT_CONSTANT",
        "GRL_LABEL_NOT_FOUND"
      ]
    },
    {
      "program_id": "W2_E50_RuntimeTimeout",
      "file": "error/W2_E50_RuntimeTimeout.grl",
      "coverage_level": "Runtime",
      "spec_sections": [
        13,
        16
      ],
      "expected_status": "diagnostic",
      "expected_diagnostics": [
        "VC_WAIT_TIMEOUT"
      ]
    },
    {
      "program_id": "W2_P10_BrandHints",
      "file": "post/W2_P10_BrandHints.grl",
      "coverage_level": "Post",
      "spec_sections": [
        18,
        20
      ],
      "expected_status": "pass",
      "expected_diagnostics": [
        "GRL_POST_HINT_IGNORED"
      ]
    },
    {
      "program_id": "W2_P20_CrossBrandMotion",
      "file": "post/W2_P20_CrossBrandMotion.grl",
      "coverage_level": "Post",
      "spec_sections": [
        20
      ],
      "expected_status": "pass",
      "expected_diagnostics": []
    },
    {
      "program_id": "W2_P30_Roundtrip",
      "file": "post/W2_P30_Roundtrip.grl",
      "coverage_level": "Post",
      "spec_sections": [
        19,
        20,
        21
      ],
      "expected_status": "pass",
      "expected_diagnostics": []
    }
  ],
  "coverage_matrix": [
    {
      "spec_section": 4,
      "coverage_level": "Runtime/Static",
      "program_ids": [
        "W2_00_MinimalModule"
      ]
    },
    {
      "spec_section": 5,
      "coverage_level": "Runtime",
      "program_ids": [
        "W2_00_MinimalModule"
      ]
    },
    {
      "spec_section": 6,
      "coverage_level": "Runtime/Static",
      "program_ids": [
        "W2_10_DataTargetToolFrame",
        "W2_E20_SemanticDiagnostics"
      ]
    },
    {
      "spec_section": 7,
      "coverage_level": "Runtime/Static/Post",
      "program_ids": [
        "W2_20_ExpressionMath",
        "W2_E10_ExpressionDiagnostics",
        "W2_P20_CrossBrandMotion"
      ]
    },
    {
      "spec_section": 8,
      "coverage_level": "Runtime/Static",
      "program_ids": [
        "W2_10_DataTargetToolFrame",
        "W2_E30_MotionDiagnostics"
      ]
    },
    {
      "spec_section": 9,
      "coverage_level": "Runtime/Post",
      "program_ids": [
        "W2_20_ExpressionMath",
        "W2_30_MotionAllTypes",
        "W2_P20_CrossBrandMotion"
      ]
    },
    {
      "spec_section": 10,
      "coverage_level": "Runtime/Static/Post",
      "program_ids": [
        "W2_30_MotionAllTypes",
        "W2_E30_MotionDiagnostics",
        "W2_P20_CrossBrandMotion"
      ]
    },
    {
      "spec_section": 11,
      "coverage_level": "Runtime/Static",
      "program_ids": [
        "W2_40_PathEvents",
        "W2_E30_MotionDiagnostics"
      ]
    },
    {
      "spec_section": 12,
      "coverage_level": "Runtime/Post",
      "program_ids": [
        "W2_50_OperationProcess",
        "W2_P30_Roundtrip"
      ]
    },
    {
      "spec_section": 13,
      "coverage_level": "Runtime",
      "program_ids": [
        "W2_60_IOWaitPulse",
        "W2_E50_RuntimeTimeout"
      ]
    },
    {
      "spec_section": 14,
      "coverage_level": "Runtime/Static",
      "program_ids": [
        "W2_70_ControlFlow",
        "W2_E40_ControlFlowDiagnostics"
      ]
    },
    {
      "spec_section": 15,
      "coverage_level": "Runtime/Static",
      "program_ids": [
        "W2_80_ProcFuncCall",
        "W2_E20_SemanticDiagnostics"
      ]
    },
    {
      "spec_section": 16,
      "coverage_level": "Runtime/Static",
      "program_ids": [
        "W2_90_ExceptionAlarm",
        "W2_E50_RuntimeTimeout"
      ]
    },
    {
      "spec_section": 17,
      "coverage_level": "Static",
      "program_ids": [
        "W2_90_ExceptionAlarm"
      ]
    },
    {
      "spec_section": 18,
      "coverage_level": "Post",
      "program_ids": [
        "W2_P10_BrandHints"
      ]
    },
    {
      "spec_section": 19,
      "coverage_level": "Post",
      "program_ids": [
        "W2_P30_Roundtrip"
      ]
    },
    {
      "spec_section": 20,
      "coverage_level": "Post",
      "program_ids": [
        "W2_P20_CrossBrandMotion"
      ]
    },
    {
      "spec_section": 21,
      "coverage_level": "Runtime/Static",
      "program_ids": [
        "W2_00_MinimalModule",
        "W2_E10_ExpressionDiagnostics"
      ]
    },
    {
      "spec_section": 22,
      "coverage_level": "Static",
      "program_ids": [
        "W2_E10_ExpressionDiagnostics",
        "W2_E20_SemanticDiagnostics",
        "W2_E30_MotionDiagnostics",
        "W2_E40_ControlFlowDiagnostics",
        "W2_E50_RuntimeTimeout"
      ]
    },
    {
      "spec_section": 23,
      "coverage_level": "Static",
      "program_ids": [
        "W2_00_MinimalModule"
      ]
    },
    {
      "spec_section": 24,
      "coverage_level": "Runtime",
      "program_ids": [
        "W2_P30_Roundtrip"
      ]
    },
    {
      "spec_section": 25,
      "coverage_level": "Runtime/Static/Post",
      "program_ids": [
        "W2_00_MinimalModule",
        "W2_10_DataTargetToolFrame",
        "W2_20_ExpressionMath",
        "W2_30_MotionAllTypes",
        "W2_40_PathEvents",
        "W2_50_OperationProcess",
        "W2_60_IOWaitPulse",
        "W2_70_ControlFlow",
        "W2_80_ProcFuncCall",
        "W2_90_ExceptionAlarm",
        "W2_P20_CrossBrandMotion"
      ]
    }
  ]
}
