import 'package:flutter_test/flutter_test.dart'; import 'dart:async'; import 'package:hepan_everyday/features/school/school_page_adapter.dart'; void main() { test( 'a rejected origin does not poison later legitimate page reading', () async { final reader = SchoolReader(SchoolPageAdapter()); await expectLater( reader.read( Uri.parse('https://idas.uestc.edu.cn/authserver/login'), () async => 'x', ), throwsA(isA()), ); var reads = 0; await expectLater( reader.read( Uri.parse('https://yjsjy.uestc.edu.cn/pyxx/pygl/xskbcx/index/1'), () async { reads++; return 'unknown'; }, ), throwsA(isA()), ); expect(reads, 1); }, ); test('concurrent timetable reading obtains page content once', () async { final reader = SchoolReader(SchoolPageAdapter()); final body = Completer(); var reads = 0; Future getHtml() { reads++; return body.future; } final target = Uri.parse( 'https://yjsjy.uestc.edu.cn/pyxx/pygl/xskbcx/index/1', ); final a = reader.read(target, getHtml), b = reader.read(target, getHtml); final checks = Future.wait([ expectLater(a, throwsA(isA())), expectLater(b, throwsA(isA())), ]); body.complete('unknown'); await checks; expect(reads, 1); }); test('unknown school markup never becomes an empty successful import', () { final adapter = SchoolPageAdapter(); final target = Uri.parse( 'https://yjsjy.uestc.edu.cn/pyxx/pygl/xskbcx/index/1', ); for (final html in [ '', '验证码', '
课程名称
', ]) { expect( () => adapter.extract(html, target), throwsA(isA()), ); } }); }