课程内容 - 重写全部 21 个 A1 单元的听读材料,把本单元理解词织进听/读文本, 单元内理解词复现率从约 20% 提升到约 77%(各单元 56–96%)。 - 修正 U01 房间号与机场大巴同为 thirty 的撞车(改为 17/30/40)。 - 校验器容差按级别读取(A1 为 8%),materials 覆盖率、字数、 选项子串等校验全部通过;course_content_test 通过。 黑夜模式 - app_theme 拆分明/暗两套调色板,AppColors 随亮度切换; main 用 theme/darkTheme/themeMode + builder 镜像已解析亮度; 主题偏好持久化到快照;进度页新增“外观主题”切换。 文档 - COURSE-PACK-JSON.md 更新 A1 词池覆盖(840/933)与材料复现约定。 Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
41 lines
1.2 KiB
Dart
41 lines
1.2 KiB
Dart
import 'dart:io';
|
|
|
|
import 'package:flutter_test/flutter_test.dart';
|
|
import 'package:kouyu_english/core/a0_core.dart';
|
|
|
|
import '../tool/courses/course_validator.dart';
|
|
|
|
void main() {
|
|
test('tokenize expands contractions and skips digits', () {
|
|
expect(tokenize("I'm Tom. Can't pay 15 dollars at 7 a.m.; let's go"), [
|
|
'i', 'am', 'tom', 'can', 'not', 'pay', 'dollars', 'at', 'am', 'let',
|
|
'us', 'go',
|
|
]);
|
|
});
|
|
|
|
test('match groups use AND across groups and OR inside a group', () {
|
|
expect(satisfiesMatch("Sorry, I don't understand.", [
|
|
['do not understand'],
|
|
]), isTrue);
|
|
expect(satisfiesMatch('twelvee', [
|
|
['twelve'],
|
|
]), isFalse);
|
|
expect(satisfiesMatch('What is this word?', [
|
|
['what does', 'what is'],
|
|
['mean'],
|
|
]), isFalse);
|
|
});
|
|
|
|
test('course packs pass validation', () {
|
|
final report = CourseValidator(
|
|
projectRoot: Directory.current,
|
|
a0Texts: [
|
|
for (final item in a0CoreItems.values)
|
|
item.replaceAll(RegExp(r'\[[^\]]*\]'), ''),
|
|
for (final sentence in a0DictationSentences.values) sentence.sentence,
|
|
],
|
|
).validate();
|
|
expect(report.errors.map((issue) => '$issue'), isEmpty);
|
|
});
|
|
}
|