Complete the Sentence quiz type: engine, UI, tests
Add a new Complete the Sentence quiz type that renders a Spanish example sentence from the card with the target word blanked out and asks the student to pick the missing word from 4 choices (other cards' fronts from the same week's pool). Core logic lives in SharedModels/SentenceQuizEngine as pure functions over VocabCard, covered by 18 Swift Testing tests. CourseQuizView calls the engine, pre-filters the card pool to cards that can produce a resolvable blank, and reuses the existing MC rendering via a new correctAnswer(for:) helper. VocabCard gains examplesBlanks (parallel array to examplesES) so content can explicitly tag the blanked substring; DataLoader reads an optional "blank" key on each example. Additive schema change, CloudKit-safe default. Also adds ContentCoverageTests that parse the repo's course_data.json and assert every card has >=3 examples and yields a resolvable question. These tests currently fail: 1,117 cards still need sentences. They are the oracle for the gap-fill pass that follows. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -3,11 +3,15 @@ import PackageDescription
|
||||
|
||||
let package = Package(
|
||||
name: "SharedModels",
|
||||
platforms: [.iOS(.v18)],
|
||||
platforms: [.iOS(.v18), .macOS(.v14)],
|
||||
products: [
|
||||
.library(name: "SharedModels", targets: ["SharedModels"]),
|
||||
],
|
||||
targets: [
|
||||
.target(name: "SharedModels"),
|
||||
.testTarget(
|
||||
name: "SharedModelsTests",
|
||||
dependencies: ["SharedModels"]
|
||||
),
|
||||
]
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user