Repository navigation
Reject duplicate headers in dictionary views - #147
Open
rupayon123 wants to merge 1 commit into
Open
rupayon123 wants to merge 1 commit into
rupayon123 wants to merge 1 commit into
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary\n- Reject duplicate header names in dictionary-backed views and enumeration with a specific parse error instead of silently overwriting earlier columns.\n- Keep the enumerated view available for CSVs with repeated headers, where columns remain positionally distinct.\n- Add regression coverage for the reported translation CSV shape.\n\nCloses #134\n\n## Validation\n- Test Suite 'All tests' started at 2026-10-03 01:04:00.280.
Test Suite 'SwiftCSVPackageTests.xctest' started at 2026-10-03 01:04:00.286.
Test Suite 'CSVDelimiterGuessingTests' started at 2026-10-03 01:04:00.286.
Test Case '-[SwiftCSVTests.CSVDelimiterGuessingTests testGuessDelimiter_Comma]' started.
Test Case '-[SwiftCSVTests.CSVDelimiterGuessingTests testGuessDelimiter_Comma]' passed (0.002 seconds).
Test Case '-[SwiftCSVTests.CSVDelimiterGuessingTests testGuessDelimiter_IgnoresEmptyLeadingLines]' started.
Test Case '-[SwiftCSVTests.CSVDelimiterGuessingTests testGuessDelimiter_IgnoresEmptyLeadingLines]' passed (0.000 seconds).
Test Case '-[SwiftCSVTests.CSVDelimiterGuessingTests testGuessDelimiter_InvalidInput_FallbackToComma]' started.
Test Case '-[SwiftCSVTests.CSVDelimiterGuessingTests testGuessDelimiter_InvalidInput_FallbackToComma]' passed (0.000 seconds).
Test Case '-[SwiftCSVTests.CSVDelimiterGuessingTests testGuessDelimiter_Semicolon]' started.
Test Case '-[SwiftCSVTests.CSVDelimiterGuessingTests testGuessDelimiter_Semicolon]' passed (0.000 seconds).
Test Case '-[SwiftCSVTests.CSVDelimiterGuessingTests testGuessDelimiter_Tab]' started.
Test Case '-[SwiftCSVTests.CSVDelimiterGuessingTests testGuessDelimiter_Tab]' passed (0.000 seconds).
Test Case '-[SwiftCSVTests.CSVDelimiterGuessingTests testInitWithGuessedDelimiter]' started.
Test Case '-[SwiftCSVTests.CSVDelimiterGuessingTests testInitWithGuessedDelimiter]' passed (0.000 seconds).
Test Suite 'CSVDelimiterGuessingTests' passed at 2026-10-03 01:04:00.289.
Executed 6 tests, with 0 failures (0 unexpected) in 0.003 (0.003) seconds
Test Suite 'CSVDelimiterTests' started at 2026-10-03 01:04:00.289.
Test Case '-[SwiftCSVTests.CSVDelimiterTests testLiteralInitializer]' started.
Test Case '-[SwiftCSVTests.CSVDelimiterTests testLiteralInitializer]' passed (0.000 seconds).
Test Case '-[SwiftCSVTests.CSVDelimiterTests testRawValue]' started.
Test Case '-[SwiftCSVTests.CSVDelimiterTests testRawValue]' passed (0.000 seconds).
Test Suite 'CSVDelimiterTests' passed at 2026-10-03 01:04:00.290.
Executed 2 tests, with 0 failures (0 unexpected) in 0.000 (0.000) seconds
Test Suite 'DuplicateHeaderTests' started at 2026-10-03 01:04:00.290.
Test Case '-[SwiftCSVTests.DuplicateHeaderTests testDictionaryEnumerationRejectsDuplicateHeaders]' started.
Test Case '-[SwiftCSVTests.DuplicateHeaderTests testDictionaryEnumerationRejectsDuplicateHeaders]' passed (0.000 seconds).
Test Case '-[SwiftCSVTests.DuplicateHeaderTests testEnumeratedViewPreservesDuplicateHeaderColumns]' started.
Test Case '-[SwiftCSVTests.DuplicateHeaderTests testEnumeratedViewPreservesDuplicateHeaderColumns]' passed (0.000 seconds).
Test Case '-[SwiftCSVTests.DuplicateHeaderTests testNamedViewRejectsDuplicateHeaders]' started.
Test Case '-[SwiftCSVTests.DuplicateHeaderTests testNamedViewRejectsDuplicateHeaders]' passed (0.000 seconds).
Test Suite 'DuplicateHeaderTests' passed at 2026-10-03 01:04:00.291.
Executed 3 tests, with 0 failures (0 unexpected) in 0.001 (0.001) seconds
Test Suite 'EnumeratedViewTests' started at 2026-10-03 01:04:00.291.
Test Case '-[SwiftCSVTests.EnumeratedViewTests testColumns]' started.
Test Case '-[SwiftCSVTests.EnumeratedViewTests testColumns]' passed (0.000 seconds).
Test Case '-[SwiftCSVTests.EnumeratedViewTests testColumns_WithLimit]' started.
Test Case '-[SwiftCSVTests.EnumeratedViewTests testColumns_WithLimit]' passed (0.000 seconds).
Test Case '-[SwiftCSVTests.EnumeratedViewTests testFillsIncompleteRows]' started.
Test Case '-[SwiftCSVTests.EnumeratedViewTests testFillsIncompleteRows]' passed (0.000 seconds).
Test Case '-[SwiftCSVTests.EnumeratedViewTests testRows]' started.
Test Case '-[SwiftCSVTests.EnumeratedViewTests testRows]' passed (0.000 seconds).
Test Case '-[SwiftCSVTests.EnumeratedViewTests testRows_WithLimit]' started.
Test Case '-[SwiftCSVTests.EnumeratedViewTests testRows_WithLimit]' passed (0.000 seconds).
Test Case '-[SwiftCSVTests.EnumeratedViewTests testSerialization]' started.
Test Case '-[SwiftCSVTests.EnumeratedViewTests testSerialization]' passed (0.000 seconds).
Test Suite 'EnumeratedViewTests' passed at 2026-10-03 01:04:00.292.
Executed 6 tests, with 0 failures (0 unexpected) in 0.001 (0.001) seconds
Test Suite 'NamedViewTests' started at 2026-10-03 01:04:00.292.
Test Case '-[SwiftCSVTests.NamedViewTests testColumns]' started.
Test Case '-[SwiftCSVTests.NamedViewTests testColumns]' passed (0.000 seconds).
Test Case '-[SwiftCSVTests.NamedViewTests testColumns_WithLimit]' started.
Test Case '-[SwiftCSVTests.NamedViewTests testColumns_WithLimit]' passed (0.000 seconds).
Test Case '-[SwiftCSVTests.NamedViewTests testEnumerate]' started.
Test Case '-[SwiftCSVTests.NamedViewTests testEnumerate]' passed (0.000 seconds).
Test Case '-[SwiftCSVTests.NamedViewTests testFillsIncompleteRows]' started.
Test Case '-[SwiftCSVTests.NamedViewTests testFillsIncompleteRows]' passed (0.000 seconds).
Test Case '-[SwiftCSVTests.NamedViewTests testHeader]' started.
Test Case '-[SwiftCSVTests.NamedViewTests testHeader]' passed (0.000 seconds).
Test Case '-[SwiftCSVTests.NamedViewTests testIgnoreColumns]' started.
Test Case '-[SwiftCSVTests.NamedViewTests testIgnoreColumns]' passed (0.000 seconds).
Test Case '-[SwiftCSVTests.NamedViewTests testInit_ParseCommaSeparatedFileWithQuotesAndWhitespaces]' started.
Test Case '-[SwiftCSVTests.NamedViewTests testInit_ParseCommaSeparatedFileWithQuotesAndWhitespaces]' passed (0.000 seconds).
Test Case '-[SwiftCSVTests.NamedViewTests testRows]' started.
Test Case '-[SwiftCSVTests.NamedViewTests testRows]' passed (0.000 seconds).
Test Case '-[SwiftCSVTests.NamedViewTests testRows_WithLimit]' started.
Test Case '-[SwiftCSVTests.NamedViewTests testRows_WithLimit]' passed (0.000 seconds).
Test Case '-[SwiftCSVTests.NamedViewTests testSerialization]' started.
Test Case '-[SwiftCSVTests.NamedViewTests testSerialization]' passed (0.000 seconds).
Test Case '-[SwiftCSVTests.NamedViewTests testSerializationWithDoubleQuotes]' started.
Test Case '-[SwiftCSVTests.NamedViewTests testSerializationWithDoubleQuotes]' passed (0.000 seconds).
Test Suite 'NamedViewTests' passed at 2026-10-03 01:04:00.294.
Executed 11 tests, with 0 failures (0 unexpected) in 0.001 (0.002) seconds
Test Suite 'NewlineTests' started at 2026-10-03 01:04:00.294.
Test Case '-[SwiftCSVTests.NewlineTests testInit_whenThereIsExtraCarriageReturnAtTheEnd]' started.
Test Case '-[SwiftCSVTests.NewlineTests testInit_whenThereIsExtraCarriageReturnAtTheEnd]' passed (0.000 seconds).
Test Case '-[SwiftCSVTests.NewlineTests testInit_withCR]' started.
Test Case '-[SwiftCSVTests.NewlineTests testInit_withCR]' passed (0.000 seconds).
Test Case '-[SwiftCSVTests.NewlineTests testInit_withCRLF]' started.
Test Case '-[SwiftCSVTests.NewlineTests testInit_withCRLF]' passed (0.000 seconds).
Test Case '-[SwiftCSVTests.NewlineTests testInit_withLF]' started.
Test Case '-[SwiftCSVTests.NewlineTests testInit_withLF]' passed (0.000 seconds).
Test Suite 'NewlineTests' passed at 2026-10-03 01:04:00.295.
Executed 4 tests, with 0 failures (0 unexpected) in 0.000 (0.001) seconds
Test Suite 'ParserTests' started at 2026-10-03 01:04:00.295.
Test Case '-[SwiftCSVTests.ParserTests testParseArray_RowLimitAndOffset]' started.
Test Case '-[SwiftCSVTests.ParserTests testParseArray_RowLimitAndOffset]' passed (0.000 seconds).
Test Suite 'ParserTests' passed at 2026-10-03 01:04:00.295.
Executed 1 test, with 0 failures (0 unexpected) in 0.000 (0.000) seconds
Test Suite 'PerformanceTest' started at 2026-10-03 01:04:00.295.
Test Case '-[SwiftCSVTests.PerformanceTest testParsePerformance]' started.
/Users/rh_mac/Documents/Codex/2026-09-09/creat/work/swiftcsv-duplicate-headers-20261003/SwiftCSVTests/PerformanceTest.swift:27: Test Case '-[SwiftCSVTests.PerformanceTest testParsePerformance]' measured [Time, seconds] average: 0.000, relative standard deviation: 106.906%, values: [0.000032, 0.000011, 0.000005, 0.000004, 0.000003, 0.000012, 0.000004, 0.000003, 0.000003, 0.000003], performanceMetricID:com.apple.XCTPerformanceMetric_WallClockTime, baselineName: "", baselineAverage: , polarity: prefers smaller, maxPercentRegression: 10.000%, maxPercentRelativeStandardDeviation: 10.000%, maxRegression: 0.100, maxStandardDeviation: 0.100
Test Case '-[SwiftCSVTests.PerformanceTest testParsePerformance]' passed (0.393 seconds).
Test Suite 'PerformanceTest' passed at 2026-10-03 01:04:00.688.
Executed 1 test, with 0 failures (0 unexpected) in 0.393 (0.394) seconds
Test Suite 'QuotedTests' started at 2026-10-03 01:04:00.688.
Test Case '-[SwiftCSVTests.QuotedTests testEmbeddedQuotes]' started.
Test Case '-[SwiftCSVTests.QuotedTests testEmbeddedQuotes]' passed (0.000 seconds).
Test Case '-[SwiftCSVTests.QuotedTests testQuotedContent]' started.
Test Case '-[SwiftCSVTests.QuotedTests testQuotedContent]' passed (0.000 seconds).
Test Case '-[SwiftCSVTests.QuotedTests testQuotedHeader]' started.
Test Case '-[SwiftCSVTests.QuotedTests testQuotedHeader]' passed (0.000 seconds).
Test Suite 'QuotedTests' passed at 2026-10-03 01:04:00.689.
Executed 3 tests, with 0 failures (0 unexpected) in 0.001 (0.001) seconds
Test Suite 'TSVTests' started at 2026-10-03 01:04:00.689.
Test Case '-[SwiftCSVTests.TSVTests testInit_makesColumns]' started.
Test Case '-[SwiftCSVTests.TSVTests testInit_makesColumns]' passed (0.000 seconds).
Test Case '-[SwiftCSVTests.TSVTests testInit_makesHeader]' started.
Test Case '-[SwiftCSVTests.TSVTests testInit_makesHeader]' passed (0.000 seconds).
Test Case '-[SwiftCSVTests.TSVTests testInit_makesRows]' started.
Test Case '-[SwiftCSVTests.TSVTests testInit_makesRows]' passed (0.000 seconds).
Test Suite 'TSVTests' passed at 2026-10-03 01:04:00.690.
Executed 3 tests, with 0 failures (0 unexpected) in 0.000 (0.000) seconds
Test Suite 'URLTests' started at 2026-10-03 01:04:00.690.
Test Case '-[SwiftCSVTests.URLTests testBOMInHeadersWhenInitialisingFromString]' started.
Test Case '-[SwiftCSVTests.URLTests testBOMInHeadersWhenInitialisingFromString]' passed (0.000 seconds).
Test Case '-[SwiftCSVTests.URLTests testEmptyFields]' started.
Test Case '-[SwiftCSVTests.URLTests testEmptyFields]' passed (0.000 seconds).
Test Case '-[SwiftCSVTests.URLTests testQuotes]' started.
Test Case '-[SwiftCSVTests.URLTests testQuotes]' passed (0.000 seconds).
Test Case '-[SwiftCSVTests.URLTests testUTF8]' started.
Test Case '-[SwiftCSVTests.URLTests testUTF8]' passed (0.000 seconds).
Test Case '-[SwiftCSVTests.URLTests testUTF8Delimited]' started.
Test Case '-[SwiftCSVTests.URLTests testUTF8Delimited]' passed (0.000 seconds).
Test Suite 'URLTests' passed at 2026-10-03 01:04:00.691.
Executed 5 tests, with 0 failures (0 unexpected) in 0.001 (0.001) seconds
Test Suite 'SwiftCSVPackageTests.xctest' passed at 2026-10-03 01:04:00.691.
Executed 45 tests, with 0 failures (0 unexpected) in 0.402 (0.405) seconds
Test Suite 'All tests' passed at 2026-10-03 01:04:00.691.
Executed 45 tests, with 0 failures (0 unexpected) in 0.402 (0.411) seconds
◇ Test run started.
↳ Testing Library Version: 1902
↳ Target Platform: arm64e-apple-macos14.0
✔ Test run with 0 tests in 0 suites passed after 0.001 seconds.: 45 tests passed.\n- Swift 4.2 language-mode test run: passed.\n- : passed.\n- SwiftLint was not available in this environment.\n\nThis contribution was prepared with AI assistance under my direction.