课程内容 - 重写全部 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>
66 lines
1.8 KiB
Dart
66 lines
1.8 KiB
Dart
import 'package:flutter_test/flutter_test.dart';
|
||
import 'package:kouyu_english/core/writing_feedback.dart';
|
||
|
||
void main() {
|
||
test('accepts a variable name in the first lesson', () {
|
||
final result = WritingFeedback.check('a0-01', 'Hello. I am Alex.');
|
||
expect(result.complete, isTrue);
|
||
});
|
||
|
||
test(
|
||
'requests the missing sentence frame without rejecting a valid place',
|
||
() {
|
||
expect(WritingFeedback.check('a0-06', 'Hong Kong.').complete, isFalse);
|
||
expect(
|
||
WritingFeedback.check('a0-06', "I'm from Shanghai.").complete,
|
||
isTrue,
|
||
);
|
||
},
|
||
);
|
||
|
||
test('requires the three independent parts in lesson ten', () {
|
||
expect(
|
||
WritingFeedback.check('a0-10', "I'm Alex. I'm from Beijing.").complete,
|
||
isFalse,
|
||
);
|
||
expect(
|
||
WritingFeedback.check(
|
||
'a0-10',
|
||
"I'm Alex. I'm from Beijing. I like tea.",
|
||
).complete,
|
||
isFalse,
|
||
);
|
||
expect(
|
||
WritingFeedback.check(
|
||
'a0-10',
|
||
"I'm Alex. I'm from Beijing. I like water.",
|
||
).complete,
|
||
isTrue,
|
||
);
|
||
});
|
||
|
||
test('ignores multiple spaces, mixed casing and curly apostrophes', () {
|
||
// a0-01 greeting and name with multiple spaces and uppercase
|
||
expect(
|
||
WritingFeedback.check('a0-01', ' HELLO I AM ALEX ').complete,
|
||
isTrue,
|
||
);
|
||
// a0-01 with curly quote and multiple spaces
|
||
expect(WritingFeedback.check('a0-01', 'HI I’M MIA').complete, isTrue);
|
||
// a0-07 with multiple spaces in phrase
|
||
expect(
|
||
WritingFeedback.check('a0-07', 'THIS IS MY MOTHER').complete,
|
||
isTrue,
|
||
);
|
||
// a0-08-c with multiple spaces and curly apostrophe
|
||
expect(
|
||
WritingFeedback.check(
|
||
'a0-08-c',
|
||
'IT’S THREE O’CLOCK',
|
||
segmentId: 'a0-08-c',
|
||
).complete,
|
||
isTrue,
|
||
);
|
||
});
|
||
}
|