tap_test_results_detail

Column Type
uniform_resource_id VARCHAR
tap_file_name
test_number
test_status
test_case_id
test_description
original_tap_line

SQL DDL

CREATE VIEW tap_test_results_detail AS
WITH RECURSIVE tap_lines AS (
    -- Split TAP content into individual lines using recursive CTE
    -- Access full content directly from uniform_resource table
    SELECT
        ttr.uniform_resource_id,
        ttr.name AS tap_file_name,
        1 AS line_number,
        CASE
            WHEN INSTR(CAST(ur.content AS TEXT), CHAR(10)) > 0
            THEN TRIM(SUBSTR(CAST(ur.content AS TEXT), 1, INSTR(CAST(ur.content AS TEXT), CHAR(10)) - 1))
            ELSE TRIM(CAST(ur.content AS TEXT))
        END AS tap_line,
        CASE
            WHEN INSTR(CAST(ur.content AS TEXT), CHAR(10)) > 0
            THEN SUBSTR(CAST(ur.content AS TEXT), INSTR(CAST(ur.content AS TEXT), CHAR(10)) + 1)
            ELSE ''
        END AS remaining_content
    FROM tap_test_results ttr
    JOIN uniform_resource ur ON ttr.uniform_resource_id = ur.uniform_resource_id
    WHERE ur.content IS NOT NULL

    UNION ALL

    SELECT
        uniform_resource_id,
        tap_file_name,
        line_number + 1,
        CASE
            WHEN INSTR(remaining_content, CHAR(10)) > 0
            THEN TRIM(SUBSTR(remaining_content, 1, INSTR(remaining_content, CHAR(10)) - 1))
            ELSE TRIM(remaining_content)
        END AS tap_line,
        CASE
            WHEN INSTR(remaining_content, CHAR(10)) > 0
            THEN SUBSTR(remaining_content, INSTR(remaining_content, CHAR(10)) + 1)
            ELSE ''
        END AS remaining_content
    FROM tap_lines
    WHERE remaining_content != ''
),
parsed_test_lines AS (
    -- Parse TAP test lines to extract test components
    SELECT
        uniform_resource_id,
        tap_file_name,
        line_number,
        tap_line,
        -- Extract test number from "ok N" or "not ok N" patterns
        CASE
            WHEN tap_line LIKE 'ok %' AND NOT tap_line LIKE 'not ok %' THEN
                CAST(TRIM(SUBSTR(SUBSTR(tap_line, 4), 1,
                    CASE WHEN INSTR(SUBSTR(tap_line, 4), ' ') > 0
                         THEN INSTR(SUBSTR(tap_line, 4), ' ') - 1
                         ELSE LENGTH(SUBSTR(tap_line, 4)) END)) AS INTEGER)
            WHEN tap_line LIKE 'not ok %' THEN
                CAST(TRIM(SUBSTR(SUBSTR(tap_line, 8), 1,
                    CASE WHEN INSTR(SUBSTR(tap_line, 8), ' ') > 0
                         THEN INSTR(SUBSTR(tap_line, 8), ' ') - 1
                         ELSE LENGTH(SUBSTR(tap_line, 8)) END)) AS INTEGER)
            ELSE NULL
        END AS test_number,
        -- Determine test status
        CASE
            WHEN tap_line LIKE 'ok %' AND NOT tap_line LIKE 'not ok %' THEN 'passed'
            WHEN tap_line LIKE 'not ok %' THEN 'failed'
            ELSE NULL
        END AS test_status,
        -- Extract test case ID pattern [TC-XXX-NNNN] or similar
        CASE
            WHEN INSTR(tap_line, '[') > 0 AND INSTR(tap_line, ']') > INSTR(tap_line, '[') THEN
                SUBSTR(tap_line, INSTR(tap_line, '['), INSTR(tap_line, ']') - INSTR(tap_line, '[') + 1)
            ELSE NULL
        END AS test_case_id,
        -- Extract test description (text after test case ID or after status)
        CASE
            WHEN INSTR(tap_line, ']') > 0 THEN
                TRIM(SUBSTR(tap_line, INSTR(tap_line, ']') + 1))
            WHEN tap_line LIKE 'ok %' AND NOT tap_line LIKE 'not ok %' THEN
                TRIM(SUBSTR(tap_line, 4 + LENGTH(TRIM(SUBSTR(SUBSTR(tap_line, 4), 1,
                    CASE WHEN INSTR(SUBSTR(tap_line, 4), ' ') > 0
                         THEN INSTR(SUBSTR(tap_line, 4), ' ') - 1
                         ELSE LENGTH(SUBSTR(tap_line, 4)) END))) + 1))
            WHEN tap_line LIKE 'not ok %' THEN
                TRIM(SUBSTR(tap_line, 8 + LENGTH(TRIM(SUBSTR(SUBSTR(tap_line, 8), 1,
                    CASE WHEN INSTR(SUBSTR(tap_line, 8), ' ') > 0
                         THEN INSTR(SUBSTR(tap_line, 8), ' ') - 1
                         ELSE LENGTH(SUBSTR(tap_line, 8)) END))) + 1))
            ELSE NULL
        END AS test_description
    FROM tap_lines
    WHERE tap_line LIKE 'ok %' OR tap_line LIKE 'not ok %'
)
SELECT
    uniform_resource_id,
    tap_file_name,
    test_number,
    test_status,
    test_case_id,
    -- Clean up test description by removing common prefixes
    CASE
        WHEN test_description LIKE '- %' THEN TRIM(SUBSTR(test_description, 3))
        WHEN test_description LIKE '● › %' THEN TRIM(SUBSTR(test_description, 5))
        WHEN test_description LIKE '● %' THEN TRIM(SUBSTR(test_description, 3))
        WHEN test_description LIKE '› %' THEN TRIM(SUBSTR(test_description, 3))
        ELSE TRIM(test_description)
    END AS test_description,
    tap_line AS original_tap_line
FROM parsed_test_lines
WHERE test_number IS NOT NULL
ORDER BY uniform_resource_id, test_number
;