71 lines
2.0 KiB
Dart
71 lines
2.0 KiB
Dart
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<UnsupportedSchoolLayout>()),
|
|
);
|
|
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<UnsupportedSchoolLayout>()),
|
|
);
|
|
expect(reads, 1);
|
|
},
|
|
);
|
|
test('concurrent timetable reading obtains page content once', () async {
|
|
final reader = SchoolReader(SchoolPageAdapter());
|
|
final body = Completer<String>();
|
|
var reads = 0;
|
|
Future<String> 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<UnsupportedSchoolLayout>())),
|
|
expectLater(b, throwsA(isA<UnsupportedSchoolLayout>())),
|
|
]);
|
|
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 [
|
|
'',
|
|
'<html>验证码</html>',
|
|
'<table><tr><td>课程名称</td></tr></table>',
|
|
]) {
|
|
expect(
|
|
() => adapter.extract(html, target),
|
|
throwsA(isA<UnsupportedSchoolLayout>()),
|
|
);
|
|
}
|
|
});
|
|
}
|