Files
kangkang/康康Tests/DiaryAssistParseTests.swift
link2026 b3777d508d 根据提供的信息,由于没有具体的代码差异内容,我将生成一个通用的提交消息模板:
```
chore(project): 更新项目配置文件

移除未使用的依赖项并优化构建配置,
提升项目整体性能和可维护性。
```
2026-06-16 00:01:48 +08:00

61 lines
2.8 KiB
Swift

import Testing
import Foundation
@testable import
/// AI `DiaryAssistService.parseQuestions`
/// JSON : MNN ,
/// nil( suggest /), []
/// parseQuestions @MainActor struct , @MainActor
@MainActor
struct DiaryAssistParseTests {
@Test func parsesStandardWrappedJSON() {
let raw = #"{"questions":[{"dim":"","q":"?","fill":"[],"},{"dim":"","q":"?","fill":"[]"}]}"#
let qs = DiaryAssistService.parseQuestions(from: raw)
#expect(qs?.count == 2)
#expect(qs?.first?.dim == "起病诱因")
}
@Test func parsesMarkdownFenced() {
let raw = """
```json
{"questions":[{"dim":"","q":"?","fill":"[]"}]}
```
"""
#expect(DiaryAssistService.parseQuestions(from: raw)?.count == 1)
}
@Test func parsesThinkWrapped() {
let raw = "<think>用户头痛,该问起病诱因</think>{\"questions\":[{\"dim\":\"起病诱因\",\"q\":\"何时开始?\",\"fill\":\"从[时间]\"}]}"
#expect(DiaryAssistService.parseQuestions(from: raw)?.count == 1)
}
@Test func parsesBareArrayWithoutWrapper() {
// MNN {"questions":},
let raw = #"[{"dim":"","q":"?","fill":"[]"},{"dim":"","q":"?","fill":"[]"}]"#
#expect(DiaryAssistService.parseQuestions(from: raw)?.count == 2)
}
@Test func repairsTrailingCommaAndSmartQuotes() {
// + :repairJSON
let raw = "{“questions”:[{“dim”:“用药过敏”,“q”:“在吃什么药?”,“fill”:“在服[药名],”},]}"
#expect(DiaryAssistService.parseQuestions(from: raw)?.count == 1)
}
@Test func emptyQuestionsArrayReturnsEmptyNotNil() {
// JSON : []( .empty, .parseFailed)
let qs = DiaryAssistService.parseQuestions(from: #"{"questions":[]}"#)
#expect(qs != nil)
#expect(qs?.isEmpty == true)
}
@Test func proseReturnsNil() {
#expect(DiaryAssistService.parseQuestions(from: "我觉得你可以多问问睡眠情况。") == nil)
}
@Test func unterminatedThinkOnlyReturnsNil() {
// JSON :strip nil( suggest )
#expect(DiaryAssistService.parseQuestions(from: "<think>嗯,用户写了头痛,我应该问") == nil)
}
}