| Child |
Name |
Tests |
Failures |
Skipped |
Duration |
Success rate |
| csvEscape returns empty string for empty input |
csvEscape_emptyString_returnsEmptyString() |
1 |
0 |
0 |
0s |
100% |
| csvEscape: value with only special-prefix char (just '=') is wrapped in double quotes |
csvEscape_formulaPrefixOnly_wrapsEmptyBodyInQuotes() |
1 |
0 |
0 |
0s |
100% |
| csvEscape returns plain value unchanged when no special characters in multi-word string |
csvEscape_noSpecialChars_returnsUnchanged() |
1 |
0 |
0 |
0s |
100% |
| csvEscape returns empty string for null input |
csvEscape_null_returnsEmptyString() |
1 |
0 |
0 |
0s |
100% |
| csvEscape returns plain value unchanged when no special characters |
csvEscape_plainValue_returnsUnchanged() |
1 |
0 |
0 |
0s |
100% |
| csvEscape: single double-quote character is escaped as four double-quote chars |
csvEscape_singleQuoteOnly_escapedAndWrapped() |
1 |
0 |
0 |
0s |
100% |
| csvEscape wraps value starting with '@' in double quotes to prevent formula injection |
csvEscape_withAtPrefix_wrapsInQuotes() |
1 |
0 |
0 |
0.001s |
100% |
| csvEscape wraps value containing carriage return in double quotes |
csvEscape_withCarriageReturn_wrapsInQuotes() |
1 |
0 |
0 |
0s |
100% |
| csvEscape wraps value containing comma in double quotes |
csvEscape_withComma_wrapsInQuotes() |
1 |
0 |
0 |
0.001s |
100% |
| csvEscape handles value with both comma and embedded quote correctly |
csvEscape_withCommaAndQuote_handledCorrectly() |
1 |
0 |
0 |
0.001s |
100% |
| csvEscape wraps value starting with '=' in double quotes to prevent formula injection |
csvEscape_withEqualsPrefix_wrapsInQuotes() |
1 |
0 |
0 |
0s |
100% |
| csvEscape wraps value starting with '-' in double quotes to prevent formula injection |
csvEscape_withMinusPrefix_wrapsInQuotes() |
1 |
0 |
0 |
0.001s |
100% |
| csvEscape wraps value containing newline in double quotes |
csvEscape_withNewline_wrapsInQuotes() |
1 |
0 |
0 |
0.001s |
100% |
| csvEscape wraps value starting with '+' in double quotes to prevent formula injection |
csvEscape_withPlusPrefix_wrapsInQuotes() |
1 |
0 |
0 |
0s |
100% |
| csvEscape wraps value containing double quote in double quotes and doubles the embedded quote |
csvEscape_withQuote_wrapsAndDoublesQuote() |
1 |
0 |
0 |
0s |
100% |
| emit CSV mode, AI suggestion present, no confidence → ai columns filled with suggestion values |
emit_csvMode_aiSuggestionNoConfidence_aiColumnsFilled() |
1 |
0 |
0 |
0s |
100% |
| emit CSV mode, AI suggestion present, with confidence → confidence appended as formatted decimal |
emit_csvMode_aiSuggestionWithConfidence_confidenceAppended() |
1 |
0 |
0 |
0s |
100% |
| emit CSV with drift-detect: 'ai-only' when AI says security-relevant but no source tag |
emit_csvMode_driftAiOnly_whenAiSecurityButNoSourceTag() |
1 |
0 |
0 |
0.001s |
100% |
| emit CSV with drift-detect: empty drift cell when suggestion is null |
emit_csvMode_driftEmpty_whenSuggestionNull() |
1 |
0 |
0 |
0.001s |
100% |
| emit CSV with drift-detect: 'none' when source tag and AI both agree security-relevant |
emit_csvMode_driftNone_whenBothAgreeSecurityRelevant() |
1 |
0 |
0 |
0s |
100% |
| emit CSV with drift-detect: 'tag-only' when source tag present but AI disagrees |
emit_csvMode_driftTagOnly_whenSourceTagButAiDisagrees() |
1 |
0 |
0 |
0s |
100% |
| emit CSV mode: null reason in AI suggestion produces empty ai_reason field |
emit_csvMode_nullReason_reasonFieldEmpty() |
1 |
0 |
0 |
0.001s |
100% |
| emit CSV mode: null sourceRoot with emitSourceRoot=true produces empty field |
emit_csvMode_nullSourceRoot_withEmitSourceRoot_emptyField() |
1 |
0 |
0 |
0.001s |
100% |
| emit CSV mode, null suggestion with AI enabled → all AI columns are empty strings |
emit_csvMode_nullSuggestionAiEnabled_allAiColumnsEmpty() |
1 |
0 |
0 |
0.001s |
100% |
| emit CSV mode, null suggestion, no AI, no hash, empty tags → basic CSV line with empty tags field |
emit_csvMode_nullSuggestionNoAiNoHashEmptyTags_correctLine() |
1 |
0 |
0 |
0.001s |
100% |
| emit CSV mode, with contentHash → hash column present after tags |
emit_csvMode_withContentHash_hashColumnPresent() |
1 |
0 |
0 |
0s |
100% |
| emit CSV with emitSourceRoot: source_root value appears in data row |
emit_csvMode_withEmitSourceRoot_sourceRootValuePresent() |
1 |
0 |
0 |
0.001s |
100% |
| emit CSV without emitSourceRoot: source_root column absent from row even when sourceRoot non-null |
emit_csvMode_withoutEmitSourceRoot_sourceRootAbsent() |
1 |
0 |
0 |
0.001s |
100% |
| emit CSV mode, null suggestion, no AI, no hash, with tags → tags joined by semicolons |
emit_csvMode_withTags_tagsJoinedBySemicolon() |
1 |
0 |
0 |
0.001s |
100% |
| emit PLAIN mode: blank-whitespace reason shows '-' for AI_REASON |
emit_plainMode_blankReason_reasonShowsDash() |
1 |
0 |
0 |
0.001s |
100% |
| emit PLAIN with drift-detect: TAG_AI_DRIFT=ai-only when AI security but no source tag |
emit_plainMode_driftAiOnly_tokenPresent() |
1 |
0 |
0 |
0.001s |
100% |
| emit PLAIN with drift-detect: TAG_AI_DRIFT=none when both sources agree |
emit_plainMode_driftNone_tokenPresent() |
1 |
0 |
0 |
0.001s |
100% |
| emit PLAIN with drift-detect: TAG_AI_DRIFT=tag-only when source tag but AI disagrees |
emit_plainMode_driftTagOnly_tokenPresent() |
1 |
0 |
0 |
0.001s |
100% |
| emit PLAIN without drift-detect: TAG_AI_DRIFT token absent |
emit_plainMode_noDriftDetect_tokenAbsent() |
1 |
0 |
0 |
0.001s |
100% |
| emit PLAIN mode: null sourceRoot with emitSourceRoot=true shows '-' |
emit_plainMode_nullSourceRoot_withEmitSourceRoot_showsDash() |
1 |
0 |
0 |
0s |
100% |
| emit PLAIN mode, null suggestion, no AI, empty tags → correct plain line with '-' for tags |
emit_plainMode_nullSuggestionNoAiEmptyTags_tagsAsDash() |
1 |
0 |
0 |
0s |
100% |
| emit PLAIN mode, null suggestion, with contentHash, AI disabled → HASH field present |
emit_plainMode_nullSuggestionWithContentHash_hashFieldPresent() |
1 |
0 |
0 |
0.001s |
100% |
| emit PLAIN with emitSourceRoot: SRCROOT token appears in output line |
emit_plainMode_withEmitSourceRoot_srcRootTokenPresent() |
1 |
0 |
0 |
0s |
100% |
| emit PLAIN with emitSourceRoot and empty sourceRoot: SRCROOT shows '-' |
emit_plainMode_withEmitSourceRootEmptyPath_srcRootShowsDash() |
1 |
0 |
0 |
0s |
100% |
| emit PLAIN mode with tags, AI suggestion, with confidence → all fields present in output |
emit_plainMode_withTagsAiSuggestionAndConfidence_allFieldsPresent() |
1 |
0 |
0 |
0s |
100% |
| emitCsvHeader in CSV mode with AI and confidence includes ai_confidence column |
emitCsvHeader_csvMode_aiAndConfidence_includesConfidenceColumn() |
1 |
0 |
0 |
0.001s |
100% |
| emitCsvHeader in CSV mode with AI enabled (no confidence) includes ai columns |
emitCsvHeader_csvMode_aiEnabledNoConfidence_includesAiColumns() |
1 |
0 |
0 |
0s |
100% |
| emitCsvHeader in CSV mode with drift and confidence: confidence before tag_ai_drift |
emitCsvHeader_csvMode_driftAndConfidence_confidenceBeforeDrift() |
1 |
0 |
0 |
0.001s |
100% |
| emitCsvHeader in CSV mode with no AI and no hash emits minimal header |
emitCsvHeader_csvMode_noAiNoHash_emitsMinimalHeader() |
1 |
0 |
0 |
0.001s |
100% |
| emitCsvHeader in CSV mode with contentHash includes content_hash column after tags |
emitCsvHeader_csvMode_withContentHash_includesContentHashColumn() |
1 |
0 |
0 |
0s |
100% |
| emitCsvHeader in CSV mode with drift-detect appends tag_ai_drift as last column |
emitCsvHeader_csvMode_withDriftDetect_appendsTagAiDriftColumn() |
1 |
0 |
0 |
0s |
100% |
| emitCsvHeader in CSV mode without drift-detect: tag_ai_drift column absent |
emitCsvHeader_csvMode_withoutDriftDetect_tagAiDriftAbsent() |
1 |
0 |
0 |
0.001s |
100% |
| emitCsvHeader in PLAIN mode emits nothing |
emitCsvHeader_plainMode_emitsNothing() |
1 |
0 |
0 |
0s |
100% |
| emitCsvHeader in SARIF mode emits nothing |
emitCsvHeader_sarifMode_emitsNothing() |
1 |
0 |
0 |
0.001s |
100% |
| emitCsvHeader with emitSourceRoot includes source_root column after display_name |
emitCsvHeader_withEmitSourceRoot_includesSourceRootColumn() |
1 |
0 |
0 |
0s |
100% |
| emitCsvHeader with emitSourceRoot: source_root appears before content_hash when both enabled |
emitCsvHeader_withEmitSourceRootAndContentHash_sourceRootBeforeContentHash() |
1 |
0 |
0 |
0.001s |
100% |
| emitCsvHeader without emitSourceRoot: source_root column absent |
emitCsvHeader_withoutEmitSourceRoot_sourceRootAbsent() |
1 |
0 |
0 |
0.001s |
100% |
| emitMetadata emits exactly three lines in '# key: value' format |
emitMetadata_emitsThreeLinesInKeyValueFormat() |
1 |
0 |
0 |
0s |
100% |