Files
steipete--codexbar/Tests/CodexBarTests/ProviderPlanLineParsingTests.swift
2026-07-13 12:22:33 +08:00

73 lines
2.3 KiB
Swift

import Testing
@testable import CodexBarCore
struct ProviderPlanLineParsingTests {
@Test
func `Claude plan matching does not bridge usage lines`() {
let usageText = """
Skills, subagents, plugins, and MCP servers
Noattributiondatayet·accumulatesasyouuseClaude
dtoday·wtoweek
Usagecredits
Usagecreditsareoff·/usage-creditstoturnthemon
"""
let identity = ClaudeStatusProbe.parseIdentity(usageText: usageText, statusText: nil)
#expect(identity.loginMethod == nil)
}
@Test
func `Claude plan matching keeps single line phrases`() {
let identity = ClaudeStatusProbe.parseIdentity(
usageText: nil,
statusText: "Sonnet 4.6 · Claude Max · you@example.com")
#expect(identity.loginMethod == "Max")
}
@Test
func `Kiro legacy plan matching does not bridge lines`() throws {
let output = """
|
KIRO FREE
████████████████████████████████████████████████████ 25%
(12.50 of 50 covered in plan), resets on 01/15
"""
let snapshot = try KiroStatusProbe().parse(output: output)
#expect(snapshot.planName == "Kiro")
}
@Test
func `Kiro estimated usage plan matching does not bridge lines`() throws {
let output = """
Estimated Usage | resets on 2026-06-01 |
KIRO FREE
████████████████████████████████████████████████████ 25%
(12.50 of 50 covered in plan), resets on 01/15
"""
let snapshot = try KiroStatusProbe().parse(output: output)
#expect(snapshot.planName == "Kiro")
}
@Test
func `Kiro labeled plan matching does not bridge lines`() throws {
let output = """
Plan:
Q Developer Pro
████████████████████████████████████████████████████ 25%
(12.50 of 50 covered in plan), resets on 01/15
"""
let snapshot = try KiroStatusProbe().parse(output: output)
#expect(snapshot.planName == "Kiro")
}
}