Gradle Test Run :test

OutputEmitterTest

summary

53

tests

0

failures

0

skipped

0.041s

duration

100%

successful

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%