Update Saqel Platform: 2026-09-13 16:31:17
This commit is contained in:
@@ -5,6 +5,8 @@ import 'package:student_app/presentation/screens/virtual_labs/lab_identity.dart'
|
||||
import 'package:student_app/presentation/screens/virtual_labs/labs_gallery_screen.dart';
|
||||
import 'package:student_app/presentation/screens/virtual_labs/labs_registry.dart';
|
||||
import 'package:student_app/presentation/screens/virtual_labs/subject_virtual_labs_view.dart';
|
||||
import 'package:student_app/presentation/screens/curriculum/arabic_interactive_lab_view.dart';
|
||||
import 'package:student_app/presentation/screens/curriculum/english_interactive_lab_view.dart';
|
||||
|
||||
void main() {
|
||||
test('registry covers all Grade-10 labs (48 entries, 13 subjects)', () {
|
||||
@@ -103,7 +105,7 @@ void main() {
|
||||
|
||||
// History lesson 2 must NEVER return physics vector lab
|
||||
final historyLab = Grade10LabsRegistry.findForLesson(
|
||||
subjectTitle: 'تاريخ الأردن (Jordan History 10)',
|
||||
subjectTitle: 'التاريخ (History 10)',
|
||||
lessonTitle: 'الدرس الثاني: الإمبراطورية الساسانية',
|
||||
lessonId: 'lesson_02',
|
||||
);
|
||||
@@ -119,7 +121,7 @@ void main() {
|
||||
|
||||
// History lesson 1 MUST return Persian Empire lab, NOT physics!
|
||||
final historyUnit1Lab = Grade10LabsRegistry.findForLesson(
|
||||
subjectTitle: 'تاريخ الأردن (Jordan History 10)',
|
||||
subjectTitle: 'التاريخ (History 10)',
|
||||
lessonTitle: 'الدرس الأول: الإمبراطورية الفارسية: النشأة والتطور',
|
||||
lessonId: 'lesson_01',
|
||||
curriculumLessonId: 'history_10_semester_1_unit_01_lesson_01',
|
||||
@@ -824,6 +826,89 @@ void main() {
|
||||
await t.pump();
|
||||
expect(checkpointTriggered, isTrue);
|
||||
});
|
||||
|
||||
testWidgets('arabic interactive lab view renders and supports tab navigation',
|
||||
(t) async {
|
||||
await t.binding.setSurfaceSize(const Size(1200, 2400));
|
||||
addTearDown(() => t.binding.setSurfaceSize(null));
|
||||
|
||||
await t.pumpWidget(const MaterialApp(
|
||||
home: Scaffold(
|
||||
body: ArabicInteractiveLabView(),
|
||||
),
|
||||
));
|
||||
await t.pump();
|
||||
|
||||
// Default tab: الصرف والاشتقاق
|
||||
expect(find.textContaining('مختبر الضاد اللغوي الذكي'), findsWidgets);
|
||||
expect(find.text('ميزان الصرف والاشتقاق ⚖️'), findsWidgets);
|
||||
expect(find.text('معمل البلاغة والبيان 💎'), findsWidgets);
|
||||
expect(find.text('استوديو الإعراب والتراكيب 📜'), findsWidgets);
|
||||
expect(find.text('العروض وموسيقى الشعر 🎵'), findsWidgets);
|
||||
|
||||
// Verify root selector
|
||||
expect(find.text('ك - ت - ب'), findsWidgets);
|
||||
expect(find.text('ع - ل - م'), findsWidgets);
|
||||
await t.tap(find.text('ع - ل - م').first);
|
||||
await t.pump();
|
||||
|
||||
// Switch to Rhetoric tab
|
||||
await t.tap(find.text('معمل البلاغة والبيان 💎').first);
|
||||
await t.pumpAndSettle();
|
||||
expect(find.textContaining('الطباق'), findsWidgets);
|
||||
|
||||
// Switch to Syntax tab
|
||||
await t.tap(find.text('استوديو الإعراب والتراكيب 📜').first);
|
||||
await t.pumpAndSettle();
|
||||
expect(find.textContaining('اختر الجملة لتحليل بنيتها الإعرابية'), findsWidgets);
|
||||
|
||||
// Switch to Prosody tab
|
||||
await t.tap(find.text('العروض وموسيقى الشعر 🎵').first);
|
||||
await t.pumpAndSettle();
|
||||
expect(find.textContaining('بحر الكامل'), findsWidgets);
|
||||
});
|
||||
|
||||
testWidgets('english interactive lab view renders and supports tab navigation',
|
||||
(t) async {
|
||||
await t.binding.setSurfaceSize(const Size(1200, 2400));
|
||||
addTearDown(() => t.binding.setSurfaceSize(null));
|
||||
|
||||
await t.pumpWidget(const MaterialApp(
|
||||
home: Scaffold(
|
||||
body: EnglishInteractiveLabView(),
|
||||
),
|
||||
));
|
||||
await t.pump();
|
||||
|
||||
// Default tab: Grammar Matrix
|
||||
expect(find.textContaining('Action Pack 10'), findsWidgets);
|
||||
expect(find.text('مصفوفة القواعد (Grammar) 📐'), findsWidgets);
|
||||
expect(find.text('الصوتيات والنبر (Phonetics) 🎙️'), findsWidgets);
|
||||
expect(find.text('المفردات والمتلازمات 📚'), findsWidgets);
|
||||
expect(find.text('تحدي الاستماع (Listening) ⚡'), findsWidgets);
|
||||
|
||||
// Check grammar tense chips
|
||||
expect(find.text('Present Simple'), findsWidgets);
|
||||
expect(find.text('Present Perfect'), findsWidgets);
|
||||
await t.tap(find.text('Present Perfect').first);
|
||||
await t.pumpAndSettle();
|
||||
|
||||
// Switch to Phonetics tab
|
||||
await t.tap(find.text('الصوتيات والنبر (Phonetics) 🎙️').first);
|
||||
await t.pumpAndSettle();
|
||||
expect(find.textContaining('Minimal Pairs'), findsWidgets);
|
||||
expect(find.textContaining('Syllable Stress Shift'), findsWidgets);
|
||||
|
||||
// Switch to Vocab tab
|
||||
await t.tap(find.text('المفردات والمتلازمات 📚').first);
|
||||
await t.pumpAndSettle();
|
||||
expect(find.textContaining('Thematic Keywords'), findsWidgets);
|
||||
|
||||
// Switch to Listening tab
|
||||
await t.tap(find.text('تحدي الاستماع (Listening) ⚡').first);
|
||||
await t.pumpAndSettle();
|
||||
expect(find.textContaining('Gulf of Aqaba'), findsWidgets);
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user