| OLD | NEW |
| (Empty) |
| 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file | |
| 2 // for details. All rights reserved. Use of this source code is governed by a | |
| 3 // BSD-style license that can be found in the LICENSE file. | |
| 4 | |
| 5 /** Common definitions used for setting up the test environment. */ | |
| 6 library testing; | |
| 7 | |
| 8 import 'dart:async'; | |
| 9 import 'dart:io'; | |
| 10 | |
| 11 import 'package:csslib/visitor.dart'; | |
| 12 import 'package:html5lib/dom.dart'; | |
| 13 import 'package:html5lib/parser.dart'; | |
| 14 import 'package:polymer/src/analyzer.dart'; | |
| 15 import 'package:polymer/src/compiler.dart'; | |
| 16 import 'package:polymer/src/file_system.dart'; | |
| 17 import 'package:polymer/src/info.dart'; | |
| 18 import 'package:polymer/src/messages.dart'; | |
| 19 import 'package:polymer/src/compiler_options.dart'; | |
| 20 import 'package:polymer/src/files.dart'; | |
| 21 import 'package:polymer/src/utils.dart'; | |
| 22 | |
| 23 | |
| 24 Document parseDocument(String html) => parse(html); | |
| 25 | |
| 26 Element parseSubtree(String html) => parseFragment(html).nodes[0]; | |
| 27 | |
| 28 FileInfo analyzeDefinitionsInTree(Document doc, Messages messages, | |
| 29 {String packageRoot: 'packages'}) { | |
| 30 | |
| 31 return analyzeDefinitions(new GlobalInfo(), new UrlInfo('', '', null), | |
| 32 doc, packageRoot, messages); | |
| 33 } | |
| 34 | |
| 35 /** Parses files in [fileContents], with [mainHtmlFile] being the main file. */ | |
| 36 List<SourceFile> parseFiles(Map<String, String> fileContents, | |
| 37 [String mainHtmlFile = 'index.html']) { | |
| 38 | |
| 39 var result = <SourceFile>[]; | |
| 40 fileContents.forEach((filename, contents) { | |
| 41 var src = new SourceFile(filename); | |
| 42 src.document = parse(contents); | |
| 43 result.add(src); | |
| 44 }); | |
| 45 | |
| 46 return result; | |
| 47 } | |
| 48 | |
| 49 /** Analyze all files. */ | |
| 50 Map<String, FileInfo> analyzeFiles(List<SourceFile> files, | |
| 51 {Messages messages, String packageRoot: 'packages'}) { | |
| 52 messages = messages == null ? new Messages.silent() : messages; | |
| 53 var result = new Map<String, FileInfo>(); | |
| 54 | |
| 55 // analyze definitions | |
| 56 var global = new GlobalInfo(); | |
| 57 for (var file in files) { | |
| 58 var path = file.path; | |
| 59 result[path] = analyzeDefinitions(global, new UrlInfo(path, path, null), | |
| 60 file.document, packageRoot, messages); | |
| 61 } | |
| 62 | |
| 63 // analyze file contents | |
| 64 var uniqueIds = new IntIterator(); | |
| 65 var pseudoElements = new Map(); | |
| 66 for (var file in files) { | |
| 67 analyzeFile(file, result, uniqueIds, pseudoElements, messages, true); | |
| 68 } | |
| 69 return result; | |
| 70 } | |
| 71 | |
| 72 Compiler createCompiler(Map files, Messages messages, {bool errors: false, | |
| 73 bool scopedCss: false}) { | |
| 74 List baseOptions = ['--no-colors', '-o', 'out', '--deploy', 'index.html']; | |
| 75 if (errors) baseOptions.insert(0, '--warnings_as_errors'); | |
| 76 if (scopedCss) baseOptions.insert(0, '--scoped-css'); | |
| 77 var options = CompilerOptions.parse(baseOptions); | |
| 78 var fs = new MockFileSystem(files); | |
| 79 return new Compiler(fs, options, messages); | |
| 80 } | |
| 81 | |
| 82 String prettyPrintCss(StyleSheet styleSheet) => | |
| 83 ((new CssPrinter())..visitTree(styleSheet)).toString(); | |
| 84 | |
| 85 /** | |
| 86 * Abstraction around file system access to work in a variety of different | |
| 87 * environments. | |
| 88 */ | |
| 89 class MockFileSystem extends FileSystem { | |
| 90 final Map _files; | |
| 91 final Map readCount = {}; | |
| 92 | |
| 93 MockFileSystem(this._files); | |
| 94 | |
| 95 Future readTextOrBytes(String filename) => readText(filename); | |
| 96 | |
| 97 Future<String> readText(String path) { | |
| 98 readCount[path] = readCount.putIfAbsent(path, () => 0) + 1; | |
| 99 var file = _files[path]; | |
| 100 if (file != null) { | |
| 101 return new Future.value(file); | |
| 102 } else { | |
| 103 return new Future.error( | |
| 104 new FileException('MockFileSystem: $path not found')); | |
| 105 } | |
| 106 } | |
| 107 | |
| 108 // Compiler doesn't call these | |
| 109 void writeString(String outfile, String text) {} | |
| 110 Future flush() {} | |
| 111 } | |
| OLD | NEW |