| Index: pkg/polymer/test/testing.dart
|
| diff --git a/pkg/polymer/test/testing.dart b/pkg/polymer/test/testing.dart
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..c89b41667ad926fba647a7c39d76cf28ccbaa65b
|
| --- /dev/null
|
| +++ b/pkg/polymer/test/testing.dart
|
| @@ -0,0 +1,111 @@
|
| +// Copyright (c) 2012, 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.
|
| +
|
| +/** Common definitions used for setting up the test environment. */
|
| +library testing;
|
| +
|
| +import 'dart:async';
|
| +import 'dart:io';
|
| +
|
| +import 'package:csslib/visitor.dart';
|
| +import 'package:html5lib/dom.dart';
|
| +import 'package:html5lib/parser.dart';
|
| +import 'package:polymer/src/analyzer.dart';
|
| +import 'package:polymer/src/compiler.dart';
|
| +import 'package:polymer/src/file_system.dart';
|
| +import 'package:polymer/src/info.dart';
|
| +import 'package:polymer/src/messages.dart';
|
| +import 'package:polymer/src/compiler_options.dart';
|
| +import 'package:polymer/src/files.dart';
|
| +import 'package:polymer/src/utils.dart';
|
| +
|
| +
|
| +Document parseDocument(String html) => parse(html);
|
| +
|
| +Element parseSubtree(String html) => parseFragment(html).nodes[0];
|
| +
|
| +FileInfo analyzeDefinitionsInTree(Document doc, Messages messages,
|
| + {String packageRoot: 'packages'}) {
|
| +
|
| + return analyzeDefinitions(new GlobalInfo(), new UrlInfo('', '', null),
|
| + doc, packageRoot, messages);
|
| +}
|
| +
|
| +/** Parses files in [fileContents], with [mainHtmlFile] being the main file. */
|
| +List<SourceFile> parseFiles(Map<String, String> fileContents,
|
| + [String mainHtmlFile = 'index.html']) {
|
| +
|
| + var result = <SourceFile>[];
|
| + fileContents.forEach((filename, contents) {
|
| + var src = new SourceFile(filename);
|
| + src.document = parse(contents);
|
| + result.add(src);
|
| + });
|
| +
|
| + return result;
|
| +}
|
| +
|
| +/** Analyze all files. */
|
| +Map<String, FileInfo> analyzeFiles(List<SourceFile> files,
|
| + {Messages messages, String packageRoot: 'packages'}) {
|
| + messages = messages == null ? new Messages.silent() : messages;
|
| + var result = new Map<String, FileInfo>();
|
| +
|
| + // analyze definitions
|
| + var global = new GlobalInfo();
|
| + for (var file in files) {
|
| + var path = file.path;
|
| + result[path] = analyzeDefinitions(global, new UrlInfo(path, path, null),
|
| + file.document, packageRoot, messages);
|
| + }
|
| +
|
| + // analyze file contents
|
| + var uniqueIds = new IntIterator();
|
| + var pseudoElements = new Map();
|
| + for (var file in files) {
|
| + analyzeFile(file, result, uniqueIds, pseudoElements, messages, true);
|
| + }
|
| + return result;
|
| +}
|
| +
|
| +Compiler createCompiler(Map files, Messages messages, {bool errors: false,
|
| + bool scopedCss: false}) {
|
| + List baseOptions = ['--no-colors', '-o', 'out', '--deploy', 'index.html'];
|
| + if (errors) baseOptions.insert(0, '--warnings_as_errors');
|
| + if (scopedCss) baseOptions.insert(0, '--scoped-css');
|
| + var options = CompilerOptions.parse(baseOptions);
|
| + var fs = new MockFileSystem(files);
|
| + return new Compiler(fs, options, messages);
|
| +}
|
| +
|
| +String prettyPrintCss(StyleSheet styleSheet) =>
|
| + ((new CssPrinter())..visitTree(styleSheet)).toString();
|
| +
|
| +/**
|
| + * Abstraction around file system access to work in a variety of different
|
| + * environments.
|
| + */
|
| +class MockFileSystem extends FileSystem {
|
| + final Map _files;
|
| + final Map readCount = {};
|
| +
|
| + MockFileSystem(this._files);
|
| +
|
| + Future readTextOrBytes(String filename) => readText(filename);
|
| +
|
| + Future<String> readText(String path) {
|
| + readCount[path] = readCount.putIfAbsent(path, () => 0) + 1;
|
| + var file = _files[path];
|
| + if (file != null) {
|
| + return new Future.value(file);
|
| + } else {
|
| + return new Future.error(
|
| + new FileException('MockFileSystem: $path not found'));
|
| + }
|
| + }
|
| +
|
| + // Compiler doesn't call these
|
| + void writeString(String outfile, String text) {}
|
| + Future flush() {}
|
| +}
|
|
|