| // Copyright (c) 2015, the Fletch 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.md file. |
| |
| /// Tests that analyzing everything from the libraries that are public from the |
| /// embedded category does not cause elements from other libraries to be |
| /// processed. |
| library embedded_category_boundary_test; |
| |
| import 'package:expect/expect.dart'; |
| import 'package:async_helper/async_helper.dart'; |
| import 'package:compiler/src/compiler.dart'; |
| import 'package:compiler/src/elements/elements.dart'; |
| import 'package:sdk_library_metadata/libraries.dart'; |
| |
| import 'analyze_helper.dart'; |
| |
| main() async { |
| List<Uri> uriList = new List<Uri>(); |
| libraries.forEach((String name, LibraryInfo info) { |
| if (info.categories.contains(Category.embedded)) { |
| uriList.add(new Uri(scheme: 'dart', path: name)); |
| } |
| }); |
| asyncTest(() async { |
| await analyze(uriList, {}, |
| checkResults: checkResults, mode: AnalysisMode.MAIN); |
| }); |
| } |
| |
| /// These elements are currently escaping from dart:async via |
| /// `core._Resource#_readAsStream`. |
| Set<String> whiteList = new Set.from([ |
| "function(StreamController#addError)", |
| "getter(StreamController#stream)", |
| "setter(StreamController#onListen)" |
| ]); |
| |
| bool checkResults(Compiler compiler, CollectingDiagnosticHandler handler) { |
| return compiler.enqueuer.resolution.processedEntities |
| .every((Element element) { |
| if (whiteList.contains("$element")) return true; |
| LibraryInfo info = libraries[element.library.canonicalUri.path]; |
| bool isAllowedInEmbedded = |
| info.isInternal || info.categories.contains(Category.embedded); |
| if (!isAllowedInEmbedded) { |
| print( |
| 'Disallowed element: $element from ${element.library.canonicalUri}'); |
| } |
| return isAllowedInEmbedded; |
| }); |
| } |