diff --git a/.travis.yml b/.travis.yml index 009f41650..c54e2a795 100644 --- a/.travis.yml +++ b/.travis.yml @@ -19,9 +19,14 @@ jobs: script: ./tool/travis.sh dartanalyzer env: PKG="webdev" dart: dev + - stage: unit_test + script: ./tool/travis.sh test + env: PKG="webdev" + dart: dev stages: - analyzer_and_format + - unit_test # Only building master means that we don't run two builds for each pull request. branches: diff --git a/tool/travis.sh b/tool/travis.sh index 2e8091aa2..a28953b9f 100755 --- a/tool/travis.sh +++ b/tool/travis.sh @@ -29,6 +29,11 @@ while (( "$#" )); do echo -e 'dartfmt -n --set-exit-if-changed .' dartfmt -n --set-exit-if-changed . || EXIT_CODE=$? ;; + test) echo + echo -e '\033[1mTASK: test\033[22m' + echo -e 'pub run test' + pub run test || EXIT_CODE=$? + ;; *) echo -e "\033[31mNot expecting TASK '${TASK}'. Error!\033[0m" EXIT_CODE=1 ;; diff --git a/webdev/.mono_repo.yml b/webdev/.mono_repo.yml index 77bede62c..c44173cf8 100644 --- a/webdev/.mono_repo.yml +++ b/webdev/.mono_repo.yml @@ -6,5 +6,5 @@ stages: - analyzer_and_format: - dartfmt - dartanalyzer: --fatal-infos --fatal-warnings . -# - unit_test: -# - test + - unit_test: + - test diff --git a/webdev/LICENSE b/webdev/LICENSE new file mode 100644 index 000000000..389ce9856 --- /dev/null +++ b/webdev/LICENSE @@ -0,0 +1,26 @@ +Copyright 2017, the Dart project authors. All rights reserved. +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + * Neither the name of Google Inc. nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/webdev/README.md b/webdev/README.md index 840f95a1a..ad0a2a207 100644 --- a/webdev/README.md +++ b/webdev/README.md @@ -1,12 +1,24 @@ -# Experimental Usage +## Installation -The example directory contains a package that is configured to work with -`pub run webdev `. Support for `pub global activate webdev` and simply -adding a dev_dependency to your packages is coming soon. +```console +$ pub global activate webdev +``` -## Commands +## Usage -* __build__: Run builders to build a package. -* __help__: Display help information for webdev. -* __serve__: Run a local web development server and a file system watcher that - re-builds on changes. +```console +$ webdev +A tool to develop Dart web projects. + +Usage: webdev [arguments] + +Global options: +-h, --help Print this usage information. + +Available commands: + build Run builders to build a package. + help Display help information for webdev. + serve Run a local web development server and a file system watcher that re-builds on changes. + +Run "webdev help " for more information about a command. +``` diff --git a/webdev/pubspec.yaml b/webdev/pubspec.yaml index eadcaa2df..13b761f49 100644 --- a/webdev/pubspec.yaml +++ b/webdev/pubspec.yaml @@ -12,5 +12,9 @@ dependencies: io: ^0.3.2+1 stack_trace: ^1.9.2 +dev_dependencies: + test: ^0.12.0 + test_process: ^1.0.1 + executables: webdev: diff --git a/webdev/test/integration_test.dart b/webdev/test/integration_test.dart new file mode 100644 index 000000000..4d8aca451 --- /dev/null +++ b/webdev/test/integration_test.dart @@ -0,0 +1,39 @@ +// Copyright (c) 2017, 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 'dart:io'; + +import 'package:test/test.dart'; +import 'package:test_process/test_process.dart'; + +void main() { + test('README contains help output', () async { + var process = await TestProcess.start('dart', ['bin/webdev.dart']); + + var output = (await process.stdoutStream().join('\n')).trim(); + + var readme = new File('README.md'); + + expect(readme.readAsStringSync(), + contains('```console\n\$ webdev\n$output\n```')); + + await process.shouldExit(0); + }); + + test('non-existant commands create errors', () async { + var process = + await TestProcess.start('dart', ['bin/webdev.dart', 'monkey']); + + var output = (await process.stdoutStream().join('\n')).trim(); + + expect(output, contains('Could not find a command named "monkey".')); + + await process.shouldExit(64); + }); + + test('should fail in a package without a build_runner dependency', () async { + var process = await TestProcess.start('dart', ['bin/webdev.dart', 'serve']); + await process.shouldExit(255); + }); +}