blob: 6f7ea6bf70381dfdb82ef28d6024ad2874c92d1e [file] [log] [blame]
// Copyright (c) 2023, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
import 'package:linter/src/rules/avoid_web_libraries_in_flutter.dart';
import 'package:test_reflective_loader/test_reflective_loader.dart';
import '../rule_test_support.dart';
main() {
defineReflectiveSuite(() {
defineReflectiveTests(AvoidWebLibrariesInFlutterTest);
});
}
@reflectiveTest
class AvoidWebLibrariesInFlutterTest extends LintRuleTest {
@override
bool get addFlutterPackageDep => true;
@override
String get lintRule => 'avoid_web_libraries_in_flutter';
@override
void setUp() {
super.setUp();
// This cache needs to be cleared between test cases.
AvoidWebLibrariesInFlutter.clearCache();
}
test_nonFlutterPackage() async {
newFile('$testPackageRootPath/pubspec.yaml', r'''
name: non_flutter_app
version: 1.0.0+1
environment:
sdk: ">=3.0.0 <4.0.0"
''');
var mainFile = newFile('$testPackageRootPath/lib/main.dart', r'''
// ignore: unused_import
import 'dart:html';
''');
result = await resolveFile(mainFile.path);
await assertNoDiagnosticsIn(result.errors);
}
test_nonWebApp() async {
newFile('$testPackageRootPath/pubspec.yaml', r'''
name: sample_project
version: 1.0.0+1
environment:
sdk: ">=3.0.0 <4.0.0"
dependencies:
flutter:
sdk: flutter
cupertino_icons: ^0.1.2
dev_dependencies:
flutter_test:
sdk: flutter
flutter:
uses-material-design: true
''');
var mainFile = newFile('$testPackageRootPath/lib/main.dart', r'''
// ignore: unused_import
import 'dart:html';
''');
result = await resolveFile(mainFile.path);
await assertDiagnosticsIn(result.errors, [
lint(25, 19),
]);
}
test_noPubspec() async {
var mainFile = newFile('$testPackageRootPath/lib/main.dart', r'''
// ignore: unused_import
import 'dart:html';
''');
result = await resolveFile(mainFile.path);
await assertNoDiagnosticsIn(result.errors);
}
test_webApp() async {
newFile('$testPackageRootPath/pubspec.yaml', r'''
name: sample_project
version: 1.0.0+1
environment:
sdk: ">=3.0.0 <4.0.0"
dependencies:
flutter:
sdk: flutter
cupertino_icons: ^0.1.2
dev_dependencies:
flutter_test:
sdk: flutter
flutter:
uses-material-design: true
''');
var mainFile = newFile('$testPackageRootPath/lib/main.dart', r'''
// ignore: unused_import
import 'dart:html';
''');
newFile('$testPackageRootPath/web/README', 'Placeholder.');
result = await resolveFile(mainFile.path);
await assertDiagnosticsIn(result.errors, [
// Even in a package with a `web/` directory, do not use web libraries.
// Note(srawlins): This seems weird to me, but this is the expectation
// from the previous version of this test.
lint(25, 19),
]);
}
test_webPlugin() async {
newFile('$testPackageRootPath/pubspec.yaml', r'''
name: sample_project
version: 1.0.0+1
environment:
sdk: ">=2.1.0 <3.0.0"
dependencies:
flutter:
sdk: flutter
cupertino_icons: ^0.1.2
dev_dependencies:
flutter_test:
sdk: flutter
flutter:
plugin:
platforms:
web:
pluginClass: SamplePlugin
fileName: main.dart
''');
var mainFile = newFile('$testPackageRootPath/lib/main.dart', r'''
// ignore: unused_import
import 'dart:html';
''');
result = await resolveFile(mainFile.path);
await assertNoDiagnosticsIn(result.errors);
}
}