diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 0000000..9c3a39f --- /dev/null +++ b/.travis.yml @@ -0,0 +1,2 @@ +language: dart +script: ./tool/travis.sh diff --git a/analysis_options.yaml b/analysis_options.yaml index cee7122..5f425e0 100644 --- a/analysis_options.yaml +++ b/analysis_options.yaml @@ -2,4 +2,6 @@ analyzer: strong-mode: true linter: rules: + - always_declare_return_types - directives_ordering + - public_member_api_docs diff --git a/lib/test_reflective_loader.dart b/lib/test_reflective_loader.dart index 9ebaf84..fa0d91d 100644 --- a/lib/test_reflective_loader.dart +++ b/lib/test_reflective_loader.dart @@ -27,7 +27,7 @@ const _FailingTest failingTest = const _FailingTest(); * A marker annotation used to instruct dart2js to keep reflection information * for the annotated classes. */ -const ReflectiveTest reflectiveTest = const ReflectiveTest(); +const _ReflectiveTest reflectiveTest = const _ReflectiveTest(); /** * A marker annotation used to annotate "solo" groups and tests. @@ -92,7 +92,7 @@ void defineReflectiveSuite(void define(), {String name}) { void defineReflectiveTests(Type type) { ClassMirror classMirror = reflectClass(type); if (!classMirror.metadata.any((InstanceMirror annotation) => - annotation.type.reflectedType == ReflectiveTest)) { + annotation.type.reflectedType == _ReflectiveTest)) { String name = MirrorSystem.getName(classMirror.qualifiedName); throw new Exception('Class $name must have annotation "@reflectiveTest" ' 'in order to be run by runReflectiveTests.'); @@ -247,21 +247,21 @@ Future _runFailingTest(ClassMirror classMirror, Symbol symbol) { }); } -_runTest(ClassMirror classMirror, Symbol symbol) { +Future _runTest(ClassMirror classMirror, Symbol symbol) { InstanceMirror instanceMirror = classMirror.newInstance(new Symbol(''), []); return _invokeSymbolIfExists(instanceMirror, #setUp) .then((_) => instanceMirror.invoke(symbol, []).reflectee) .whenComplete(() => _invokeSymbolIfExists(instanceMirror, #tearDown)); } -typedef _TestFunction(); +typedef dynamic _TestFunction(); /** * A marker annotation used to instruct dart2js to keep reflection information * for the annotated classes. */ -class ReflectiveTest { - const ReflectiveTest(); +class _ReflectiveTest { + const _ReflectiveTest(); } /** diff --git a/test/test_reflective_loader_test.dart b/test/test_reflective_loader_test.dart new file mode 100644 index 0000000..952fe0a --- /dev/null +++ b/test/test_reflective_loader_test.dart @@ -0,0 +1,38 @@ +// 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:async'; + +import 'package:test/test.dart'; +import 'package:test_reflective_loader/test_reflective_loader.dart'; + +void main() { + defineReflectiveSuite(() { + defineReflectiveTests(TestReflectiveLoaderTest); + }); +} + +@reflectiveTest +class TestReflectiveLoaderTest { + String pathname; + + void test_passes() { + expect(true, true); + } + + @failingTest + void test_fails() { + expect(false, true); + } + + @failingTest + void test_fails_throws_sync() { + throw 'foo'; + } + + @failingTest + Future test_fails_throws_async() { + return new Future.error('foo'); + } +} diff --git a/tool/travis.sh b/tool/travis.sh new file mode 100755 index 0000000..ea0f1c4 --- /dev/null +++ b/tool/travis.sh @@ -0,0 +1,16 @@ +#!/bin/bash + +# 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. + +# Fast fail the script on failures. +set -e + +# Verify that the libraries are error free. +dartanalyzer --fatal-warnings \ + lib/test_reflective_loader.dart \ + test/test_reflective_loader_test.dart + +# Run the tests. +dart test/test_reflective_loader_test.dart