From ea2a3f833594f676f22ab3ffdf3e74d42000a50c Mon Sep 17 00:00:00 2001 From: Jason Aden Date: Tue, 29 Jan 2019 15:39:00 -0800 Subject: [PATCH] Revert "build: switch example e2e tests to bazel (#28402)" (#28438) This reverts commit ef78e335604de8352d2fb5bd3a131eca08d3d405. PR Close #28438 --- .circleci/config.yml | 5 +- gulpfile.js | 1 + package.json | 4 +- packages/examples/BUILD.bazel | 4 -- packages/examples/README.md | 25 +++++-- packages/examples/_common/bootstrap.ts | 21 ++++++ packages/examples/_common/e2e_util.ts | 26 ++++++++ packages/examples/_common/index.html | 16 +++++ .../{core/main.ts => _common/main-dynamic.ts} | 7 +- packages/examples/_common/module.d.ts | 19 ++++++ packages/examples/_common/system-config.ts | 36 ++++++++++ packages/examples/build.sh | 44 +++++++++++++ packages/examples/common/BUILD.bazel | 63 ------------------ .../ts/e2e_test/location_component_spec.ts | 7 +- .../examples/common/location/ts/module.ts | 5 +- packages/examples/common/main.ts | 12 ---- .../ts/e2e_test/ngComponentOutlet_spec.ts | 3 +- .../common/ngComponentOutlet/ts/module.ts | 54 ++++++--------- .../common/ngIf/ts/e2e_test/ngIf_spec.ts | 4 +- packages/examples/common/ngIf/ts/module.ts | 13 ++-- .../ts/e2e_test/ngTemplateOutlet_spec.ts | 4 +- .../common/ngTemplateOutlet/ts/module.ts | 7 +- .../examples/common/pipes/ts/async_pipe.ts | 2 +- .../common/pipes/ts/e2e_test/pipe_spec.ts | 4 +- packages/examples/common/pipes/ts/module.ts | 12 ++-- packages/examples/common/start-server.js | 17 ----- packages/examples/common/test_module.ts | 41 ------------ packages/examples/compiler/BUILD.bazel | 13 ---- .../compiler/ts/url_resolver/url_resolver.ts | 6 +- packages/examples/core/BUILD.bazel | 63 ------------------ .../ts/dsl/e2e_test/animation_example_spec.ts | 4 +- .../examples/core/animation/ts/dsl/module.ts | 3 +- .../e2e_test/content_child_spec.ts | 4 +- .../core/di/ts/contentChild/module.ts | 2 - .../e2e_test/content_children_spec.ts | 4 +- .../core/di/ts/contentChildren/module.ts | 2 - .../ts/viewChild/e2e_test/view_child_spec.ts | 4 +- .../examples/core/di/ts/viewChild/module.ts | 2 - .../e2e_test/view_children_spec.ts | 4 +- .../core/di/ts/viewChildren/module.ts | 2 - packages/examples/core/start-server.js | 17 ----- packages/examples/core/test_module.ts | 44 ------------- .../e2e_test/testability_example_spec.ts | 12 +--- .../core/testability/ts/whenStable/module.ts | 2 +- packages/examples/core/testing/ts/BUILD.bazel | 23 ------- .../examples/core/testing/ts/example_spec.ts | 12 ---- .../examples/core/ts/metadata/directives.ts | 10 +-- .../core/ts/prod_mode/prod_mode_example.ts | 6 +- packages/examples/forms/BUILD.bazel | 59 ----------------- packages/examples/forms/main.ts | 12 ---- packages/examples/forms/start-server.js | 17 ----- packages/examples/forms/test_module.ts | 58 ---------------- .../formBuilder/e2e_test/form_builder_spec.ts | 4 +- .../examples/forms/ts/formBuilder/module.ts | 6 +- .../e2e_test/nested_form_array_spec.ts | 4 +- .../forms/ts/nestedFormArray/module.ts | 2 - .../e2e_test/nested_form_group_spec.ts | 4 +- .../forms/ts/nestedFormGroup/module.ts | 2 - .../e2e_test/ng_model_group_spec.ts | 4 +- .../examples/forms/ts/ngModelGroup/module.ts | 2 - .../e2e_test/radio_button_spec.ts | 4 +- .../examples/forms/ts/radioButtons/module.ts | 2 - .../e2e_test/reactive_radio_button_spec.ts | 4 +- .../forms/ts/reactiveRadioButtons/module.ts | 2 - .../e2e_test/reactive_select_control_spec.ts | 4 +- .../forms/ts/reactiveSelectControl/module.ts | 2 - .../e2e_test/select_control_spec.ts | 4 +- .../examples/forms/ts/selectControl/module.ts | 2 - .../simpleForm/e2e_test/simple_form_spec.ts | 4 +- .../examples/forms/ts/simpleForm/module.ts | 2 - .../e2e_test/simple_form_control_spec.ts | 4 +- .../forms/ts/simpleFormControl/module.ts | 2 - .../e2e_test/simple_form_group_spec.ts | 4 +- .../forms/ts/simpleFormGroup/module.ts | 2 - .../examples/forms/ts/simpleNgModel/module.ts | 2 - packages/examples/http/BUILD.bazel | 1 - packages/examples/index.html | 15 ----- .../examples/platform-browser/BUILD.bazel | 14 ---- .../debug_element_view_listener/providers.ts | 2 +- packages/examples/test-utils/BUILD.bazel | 11 ---- packages/examples/test-utils/index.ts | 43 ------------ packages/examples/test.sh | 17 +++++ packages/examples/testing/BUILD.bazel | 13 ---- packages/examples/tsconfig-build.json | 22 +++++++ packages/examples/tsconfig-e2e.json | 6 -- packages/examples/tsconfig.json | 18 +++++ packages/examples/upgrade/BUILD.bazel | 4 -- packages/examples/upgrade/start-server.js | 17 ----- .../upgrade/static/ts/full/BUILD.bazel | 14 ---- .../ts/full/e2e_test/static_full_spec.ts | 4 +- .../static/ts/lite-multi-shared/BUILD.bazel | 13 ---- .../e2e_test/static_lite_multi_shared_spec.ts | 4 +- .../upgrade/static/ts/lite-multi/BUILD.bazel | 13 ---- .../e2e_test/static_lite_multi_spec.ts | 4 +- .../upgrade/static/ts/lite/BUILD.bazel | 14 ---- .../ts/lite/e2e_test/static_lite_spec.ts | 4 +- packages/examples/upgrade/tsconfig-build.json | 6 -- packages/examples/upgrade/upgrade_example.bzl | 66 ------------------- packages/tsconfig.json | 5 -- protractor-examples-e2e.conf.js | 35 ++++++++++ scripts/build-e2e-tests.sh | 4 ++ tools/gulp-tasks/serve.js | 15 +++++ yarn.lock | 15 ++--- 103 files changed, 415 insertions(+), 897 deletions(-) delete mode 100644 packages/examples/BUILD.bazel create mode 100644 packages/examples/_common/bootstrap.ts create mode 100644 packages/examples/_common/e2e_util.ts create mode 100644 packages/examples/_common/index.html rename packages/examples/{core/main.ts => _common/main-dynamic.ts} (66%) create mode 100644 packages/examples/_common/module.d.ts create mode 100644 packages/examples/_common/system-config.ts create mode 100755 packages/examples/build.sh delete mode 100644 packages/examples/common/BUILD.bazel delete mode 100644 packages/examples/common/main.ts delete mode 100644 packages/examples/common/start-server.js delete mode 100644 packages/examples/common/test_module.ts delete mode 100644 packages/examples/compiler/BUILD.bazel delete mode 100644 packages/examples/core/BUILD.bazel delete mode 100644 packages/examples/core/start-server.js delete mode 100644 packages/examples/core/test_module.ts delete mode 100644 packages/examples/core/testing/ts/BUILD.bazel delete mode 100644 packages/examples/core/testing/ts/example_spec.ts delete mode 100644 packages/examples/forms/BUILD.bazel delete mode 100644 packages/examples/forms/main.ts delete mode 100644 packages/examples/forms/start-server.js delete mode 100644 packages/examples/forms/test_module.ts delete mode 100644 packages/examples/http/BUILD.bazel delete mode 100644 packages/examples/index.html delete mode 100644 packages/examples/platform-browser/BUILD.bazel delete mode 100644 packages/examples/test-utils/BUILD.bazel delete mode 100644 packages/examples/test-utils/index.ts create mode 100755 packages/examples/test.sh delete mode 100644 packages/examples/testing/BUILD.bazel create mode 100644 packages/examples/tsconfig-build.json delete mode 100644 packages/examples/tsconfig-e2e.json create mode 100644 packages/examples/tsconfig.json delete mode 100644 packages/examples/upgrade/BUILD.bazel delete mode 100644 packages/examples/upgrade/start-server.js delete mode 100644 packages/examples/upgrade/static/ts/full/BUILD.bazel delete mode 100644 packages/examples/upgrade/static/ts/lite-multi-shared/BUILD.bazel delete mode 100644 packages/examples/upgrade/static/ts/lite-multi/BUILD.bazel delete mode 100644 packages/examples/upgrade/static/ts/lite/BUILD.bazel delete mode 100644 packages/examples/upgrade/tsconfig-build.json delete mode 100644 packages/examples/upgrade/upgrade_example.bzl create mode 100644 protractor-examples-e2e.conf.js diff --git a/.circleci/config.yml b/.circleci/config.yml index 6c0884091a..b1d4f9b387 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -397,6 +397,7 @@ jobs: - *define_env_vars - *yarn_install - run: yarn tsc -p packages + - run: yarn tsc -p packages/examples - run: yarn tsc -p modules - run: yarn karma start ./karma-js.conf.js --single-run --browsers=ChromeNoSandbox @@ -423,6 +424,7 @@ jobs: command: ./scripts/saucelabs/start-tunnel.sh background: true - run: yarn tsc -p packages + - run: yarn tsc -p packages/examples - run: yarn tsc -p modules # Waits for the Saucelabs tunnel to be ready. This ensures that we don't run tests # too early without Saucelabs not being ready. @@ -450,9 +452,10 @@ jobs: - run: ./scripts/build-e2e-tests.sh --use-existing-packages-dist - run: name: Starting servers for e2e tests - command: yarn gulp serve + command: yarn gulp serve serve-examples background: true - run: NODE_PATH=$NODE_PATH:./dist/all yarn protractor ./protractor-e2e.conf.js --bundles=true + - run: NODE_PATH=$NODE_PATH:./dist/all yarn protractor ./protractor-examples-e2e.conf.js --bundles=true - run: NODE_PATH=$NODE_PATH:./dist/all yarn protractor ./protractor-perf.conf.js --bundles=true --dryrun legacy-misc-tests: diff --git a/gulpfile.js b/gulpfile.js index 36ae7dc114..0560592e82 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -39,6 +39,7 @@ gulp.task('source-map-test', loadTask('source-map-test')); gulp.task('tools:build', loadTask('tools-build')); gulp.task('check-cycle', loadTask('check-cycle')); gulp.task('serve', loadTask('serve', 'default')); +gulp.task('serve-examples', loadTask('serve', 'examples')); gulp.task('changelog', loadTask('changelog')); gulp.task('check-env', () => {/* this is a noop because the env test ran already above */}); gulp.task('cldr:extract', loadTask('cldr', 'extract')); diff --git a/package.json b/package.json index d16d3a6413..1f16fa8619 100644 --- a/package.json +++ b/package.json @@ -38,14 +38,12 @@ "@bazel/karma": "~0.22.1", "@bazel/typescript": "~0.22.1", "@schematics/angular": "^7.0.4", - "@types/angular": "^1.6.47", "@types/chokidar": "1.7.3", "@types/convert-source-map": "^1.5.1", "@types/diff": "^3.2.2", "@types/fs-extra": "4.0.2", "@types/hammerjs": "2.0.35", "@types/jasmine": "^2.8.8", - "@types/jasminewd2": "^2.0.6", "@types/mock-fs": "^3.6.30", "@types/node": "^10.9.4", "@types/selenium-webdriver": "3.0.7", @@ -100,7 +98,9 @@ "@bazel/bazel": "~0.22.0", "@bazel/buildifier": "^0.19.2", "@bazel/ibazel": "~0.9.0", + "@types/angular": "^1.6.47", "@types/base64-js": "1.2.5", + "@types/jasminewd2": "^2.0.4", "@types/minimist": "^1.2.0", "@types/systemjs": "0.19.32", "browserstacktunnel-wrapper": "2.0.1", diff --git a/packages/examples/BUILD.bazel b/packages/examples/BUILD.bazel deleted file mode 100644 index 70b5855669..0000000000 --- a/packages/examples/BUILD.bazel +++ /dev/null @@ -1,4 +0,0 @@ -exports_files([ - "index.html", - "tsconfig-e2e.json", -]) diff --git a/packages/examples/README.md b/packages/examples/README.md index c472095b25..2e3269f41f 100644 --- a/packages/examples/README.md +++ b/packages/examples/README.md @@ -7,15 +7,28 @@ behavior) just like an Angular application developer would write. # Running the examples ``` -# Serving individual examples (e.g. common) -yarn bazel run //packages/examples/common:devserver +# # execute the following command only when framework code changes +./build.sh -# "core" examples -yarn bazel run //packages/examples/core:devserver +# run when test change +./packages/examples/build.sh + +# start server +$(npm bin)/gulp serve-examples ``` +navigate to [http://localhost:8001](http://localhost:8001) + # Running the tests ``` -yarn bazel test //packages/examples/... -``` \ No newline at end of file + # run only when framework code changes +./build.sh + +# run to compile tests and run them +./packages/examples/test.sh +``` + +NOTE: sometimes the http server does not exit properly and it retains the `8001` port. + in such a case you can use `lsof -i:8001` to see which process it is and then use `kill` + to remove it. (Or in single command: `lsof -i:8001 -t | xargs kill`) \ No newline at end of file diff --git a/packages/examples/_common/bootstrap.ts b/packages/examples/_common/bootstrap.ts new file mode 100644 index 0000000000..24bad23979 --- /dev/null +++ b/packages/examples/_common/bootstrap.ts @@ -0,0 +1,21 @@ +/** + * @license + * Copyright Google Inc. All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ +(function(global: any) { + writeScriptTag('/vendor/zone.js'); + writeScriptTag('/vendor/task-tracking.js'); + writeScriptTag('/vendor/system.js'); + writeScriptTag('/vendor/Reflect.js'); + writeScriptTag('/_common/system-config.js'); + if (location.pathname.indexOf('/upgrade/') != -1) { + writeScriptTag('/vendor/angular.js'); + } + + function writeScriptTag(scriptUrl: string, onload: string = '') { + document.write(''); + } +}(window)); diff --git a/packages/examples/_common/e2e_util.ts b/packages/examples/_common/e2e_util.ts new file mode 100644 index 0000000000..4ca6732c1e --- /dev/null +++ b/packages/examples/_common/e2e_util.ts @@ -0,0 +1,26 @@ +/** + * @license + * Copyright Google Inc. All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ +/* tslint:disable:no-console */ +import * as webdriver from 'selenium-webdriver'; +declare var browser: any; +declare var expect: any; + +// TODO (juliemr): remove this method once this becomes a protractor plugin +export function verifyNoBrowserErrors() { + browser.manage().logs().get('browser').then(function(browserLog: any[]) { + const errors: any[] = []; + browserLog.filter(logEntry => { + const msg = logEntry.message; + console.log('>> ' + msg); + if (logEntry.level.value >= webdriver.logging.Level.INFO.value) { + errors.push(msg); + } + }); + expect(errors).toEqual([]); + }); +} diff --git a/packages/examples/_common/index.html b/packages/examples/_common/index.html new file mode 100644 index 0000000000..645ad3416f --- /dev/null +++ b/packages/examples/_common/index.html @@ -0,0 +1,16 @@ + + + + + + + + + + + loading... + + + diff --git a/packages/examples/core/main.ts b/packages/examples/_common/main-dynamic.ts similarity index 66% rename from packages/examples/core/main.ts rename to packages/examples/_common/main-dynamic.ts index b5ec0fb33e..e30f1c076b 100644 --- a/packages/examples/core/main.ts +++ b/packages/examples/_common/main-dynamic.ts @@ -5,8 +5,9 @@ * Use of this source code is governed by an MIT-style license that can be * found in the LICENSE file at https://angular.io/license */ - import {platformBrowserDynamic} from '@angular/platform-browser-dynamic'; -import {TestsAppModuleNgFactory} from './test_module.ngfactory'; +import * as mod from './module'; -platformBrowserDynamic().bootstrapModuleFactory(TestsAppModuleNgFactory); +if (mod.AppModule) { + platformBrowserDynamic().bootstrapModule(mod.AppModule); +} diff --git a/packages/examples/_common/module.d.ts b/packages/examples/_common/module.d.ts new file mode 100644 index 0000000000..9038a8f4ac --- /dev/null +++ b/packages/examples/_common/module.d.ts @@ -0,0 +1,19 @@ +/** + * @license + * Copyright Google Inc. All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + +/* + +DO NOT DELETE THIS FILE +======================= + +The purpose of this file is to allow `main-dynamic.ts` to be tsc-compiled +BEFORE it is copied over to each of the associated example directories +within `dist/examples`. + + */ +export class AppModule {}; diff --git a/packages/examples/_common/system-config.ts b/packages/examples/_common/system-config.ts new file mode 100644 index 0000000000..2ad12456a6 --- /dev/null +++ b/packages/examples/_common/system-config.ts @@ -0,0 +1,36 @@ +/** + * @license + * Copyright Google Inc. All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ +System.config({ + defaultJSExtensions: true, + map: { + '@angular/common': '/vendor/@angular/common/bundles/common.umd.js', + '@angular/compiler': '/vendor/@angular/compiler/bundles/compiler.umd.js', + '@angular/animations': '/vendor/@angular/animations/bundles/animations.umd.js', + '@angular/animations/browser': '/vendor/@angular/animations/bundles/animations-browser.umd.js', + '@angular/platform-browser/animations': + '/vendor/@angular/platform-browser/bundles/platform-browser-animations.umd.js', + '@angular/core': '/vendor/@angular/core/bundles/core.umd.js', + '@angular/forms': '/vendor/@angular/forms/bundles/forms.umd.js', + '@angular/http': '/vendor/@angular/forms/bundles/http.umd.js', + '@angular/platform-browser': + '/vendor/@angular/platform-browser/bundles/platform-browser.umd.js', + '@angular/platform-browser-dynamic': + '/vendor/@angular/platform-browser-dynamic/bundles/platform-browser-dynamic.umd.js', + '@angular/router': '/vendor/@angular/router/bundles/router.umd.js', + '@angular/upgrade': '/vendor/@angular/upgrade/bundles/upgrade.umd.js', + '@angular/upgrade/static': '/vendor/@angular/upgrade/bundles/upgrade-static.umd.js', + 'rxjs': '/vendor/rxjs' + }, + packages: { + 'rxjs/ajax': {main: 'index.js', defaultExtension: 'js'}, + 'rxjs/operators': {main: 'index.js', defaultExtension: 'js'}, + 'rxjs/testing': {main: 'index.js', defaultExtension: 'js'}, + 'rxjs/websocket': {main: 'index.js', defaultExtension: 'js'}, + 'rxjs': {main: 'index.js', defaultExtension: 'js'}, + }, +}); diff --git a/packages/examples/build.sh b/packages/examples/build.sh new file mode 100755 index 0000000000..ce521af07a --- /dev/null +++ b/packages/examples/build.sh @@ -0,0 +1,44 @@ +#!/usr/bin/env bash + +set -u -e -o pipefail + +# +# This script is used to compile and copy the contents for each of +# example directories over to the dist/examples directory so that they +# can be tested with karma and protractor. The `gulp serve-examples` command +# can be used to run each of the examples in isolation via http as well. +# + +( + cd `dirname $0` + + DIST="../../dist/examples"; + rm -rf -- $DIST + $(npm bin)/tsc -p ./tsconfig-build.json --importHelpers false + + mkdir $DIST/vendor/ + + ln -s ../../../dist/packages-dist/ $DIST/vendor/@angular + + for FILE in \ + ../../../node_modules/angular/angular.js \ + ../../../node_modules/zone.js/dist/zone.js \ + ../../../node_modules/zone.js/dist/task-tracking.js \ + ../../../node_modules/systemjs/dist/system.js \ + ../../../node_modules/reflect-metadata/Reflect.js \ + ../../../node_modules/rxjs + do + ln -s $FILE $DIST/vendor/`basename $FILE` + done + + for MODULE in `find . -name module.ts`; do + FINAL_DIR_PATH=$DIST/`dirname $MODULE` + + echo "==== $MODULE" + cp _common/*.html $FINAL_DIR_PATH + cp $DIST/_common/*.js $FINAL_DIR_PATH + cp $DIST/_common/*.js.map $FINAL_DIR_PATH + + find `dirname $MODULE` -name \*.css -exec cp {} $FINAL_DIR_PATH \; + done +) diff --git a/packages/examples/common/BUILD.bazel b/packages/examples/common/BUILD.bazel deleted file mode 100644 index 5b7ce353f2..0000000000 --- a/packages/examples/common/BUILD.bazel +++ /dev/null @@ -1,63 +0,0 @@ -package(default_visibility = ["//visibility:public"]) - -load("//packages/bazel:index.bzl", "protractor_web_test_suite") -load("//tools:defaults.bzl", "ng_module", "ts_library") -load("@build_bazel_rules_typescript//:defs.bzl", "ts_devserver") - -ng_module( - name = "common_examples", - srcs = glob( - ["**/*.ts"], - exclude = ["**/*_spec.ts"], - ), - # TODO: FW-1004 Type checking is currently not complete. - type_check = False, - deps = [ - "//packages/common", - "//packages/core", - "//packages/platform-browser", - "//packages/platform-browser-dynamic", - "//packages/router", - "@rxjs", - ], -) - -ts_library( - name = "common_tests_lib", - testonly = True, - srcs = glob(["**/*_spec.ts"]), - tsconfig = "//packages/examples:tsconfig-e2e.json", - deps = [ - "//packages/examples/test-utils", - "//packages/private/testing", - "@ngdeps//@types/jasminewd2", - "@ngdeps//protractor", - ], -) - -ts_devserver( - name = "devserver", - entry_module = "@angular/examples/common/main", - index_html = "//packages/examples:index.html", - port = 4200, - scripts = ["@ngdeps//node_modules/tslib:tslib.js"], - static_files = [ - "@ngdeps//node_modules/zone.js:dist/zone.js", - # This is needed because the "ngComponentOutlet" test uses the JIT compiler - # and needs to be able to read metadata at runtime. - "@ngdeps//node_modules/reflect-metadata:Reflect.js", - ], - deps = [":common_examples"], -) - -protractor_web_test_suite( - name = "protractor_tests", - data = ["//packages/bazel/src/protractor/utils"], - on_prepare = ":start-server.js", - server = ":devserver", - deps = [ - ":common_tests_lib", - "@ngdeps//protractor", - "@ngdeps//selenium-webdriver", - ], -) diff --git a/packages/examples/common/location/ts/e2e_test/location_component_spec.ts b/packages/examples/common/location/ts/e2e_test/location_component_spec.ts index 917b3f43c1..20e790a3c1 100644 --- a/packages/examples/common/location/ts/e2e_test/location_component_spec.ts +++ b/packages/examples/common/location/ts/e2e_test/location_component_spec.ts @@ -8,7 +8,7 @@ import {$, browser, by, element, protractor} from 'protractor'; -import {verifyNoBrowserErrors} from '../../../../test-utils'; +import {verifyNoBrowserErrors} from '../../../../_common/e2e_util'; function waitForElement(selector: string) { @@ -21,9 +21,10 @@ describe('Location', () => { afterEach(verifyNoBrowserErrors); it('should verify paths', () => { - browser.get('/location/#/bar/baz'); + browser.get('/common/location/ts/#/bar/baz'); waitForElement('hash-location'); - expect(element.all(by.css('path-location code')).get(0).getText()).toEqual('/location'); + expect(element.all(by.css('path-location code')).get(0).getText()) + .toEqual('/common/location/ts'); expect(element.all(by.css('hash-location code')).get(0).getText()).toEqual('/bar/baz'); }); }); diff --git a/packages/examples/common/location/ts/module.ts b/packages/examples/common/location/ts/module.ts index 76a902de2a..10b064e54d 100644 --- a/packages/examples/common/location/ts/module.ts +++ b/packages/examples/common/location/ts/module.ts @@ -17,13 +17,14 @@ import {PathLocationComponent} from './path_location_component'; selector: 'example-app', template: `` }) -export class AppComponent { +export class ExampleAppComponent { } @NgModule({ - declarations: [AppComponent, PathLocationComponent, HashLocationComponent], + declarations: [ExampleAppComponent, PathLocationComponent, HashLocationComponent], providers: [{provide: APP_BASE_HREF, useValue: '/'}], imports: [BrowserModule], + bootstrap: [ExampleAppComponent] }) export class AppModule { } diff --git a/packages/examples/common/main.ts b/packages/examples/common/main.ts deleted file mode 100644 index b5ec0fb33e..0000000000 --- a/packages/examples/common/main.ts +++ /dev/null @@ -1,12 +0,0 @@ -/** - * @license - * Copyright Google Inc. All Rights Reserved. - * - * Use of this source code is governed by an MIT-style license that can be - * found in the LICENSE file at https://angular.io/license - */ - -import {platformBrowserDynamic} from '@angular/platform-browser-dynamic'; -import {TestsAppModuleNgFactory} from './test_module.ngfactory'; - -platformBrowserDynamic().bootstrapModuleFactory(TestsAppModuleNgFactory); diff --git a/packages/examples/common/ngComponentOutlet/ts/e2e_test/ngComponentOutlet_spec.ts b/packages/examples/common/ngComponentOutlet/ts/e2e_test/ngComponentOutlet_spec.ts index 54f392fdc8..fd6110a4b5 100644 --- a/packages/examples/common/ngComponentOutlet/ts/e2e_test/ngComponentOutlet_spec.ts +++ b/packages/examples/common/ngComponentOutlet/ts/e2e_test/ngComponentOutlet_spec.ts @@ -7,8 +7,7 @@ */ import {$, ExpectedConditions, browser, by, element} from 'protractor'; - -import {verifyNoBrowserErrors} from '../../../../test-utils'; +import {verifyNoBrowserErrors} from '../../../../_common/e2e_util'; function waitForElement(selector: string) { const EC = ExpectedConditions; diff --git a/packages/examples/common/ngComponentOutlet/ts/module.ts b/packages/examples/common/ngComponentOutlet/ts/module.ts index a351268186..1bb2f2442a 100644 --- a/packages/examples/common/ngComponentOutlet/ts/module.ts +++ b/packages/examples/common/ngComponentOutlet/ts/module.ts @@ -7,22 +7,21 @@ */ import {CommonModule} from '@angular/common'; -import {COMPILER_OPTIONS, Compiler, CompilerFactory, Component, Injectable, Injector, NgModule, NgModuleFactory} from '@angular/core'; +import {Compiler, Component, Injectable, Injector, NgModule, NgModuleFactory} from '@angular/core'; import {BrowserModule} from '@angular/platform-browser'; -import {JitCompilerFactory} from '@angular/platform-browser-dynamic'; // #docregion SimpleExample @Component({selector: 'hello-world', template: 'Hello World!'}) -export class HelloWorld { +class HelloWorld { } @Component({ selector: 'ng-component-outlet-simple-example', template: `` }) -export class NgTemplateOutletSimpleExample { +class NgTemplateOutletSimpleExample { // This field is necessary to expose HelloWorld to the template. HelloWorld = HelloWorld; } @@ -30,7 +29,7 @@ export class NgTemplateOutletSimpleExample { // #docregion CompleteExample @Injectable() -export class Greeter { +class Greeter { suffix = '!'; } @@ -38,7 +37,7 @@ export class Greeter { selector: 'complete-component', template: `Complete: {{ greeter.suffix }}` }) -export class CompleteComponent { +class CompleteComponent { constructor(public greeter: Greeter) {} } @@ -49,7 +48,7 @@ export class CompleteComponent { injector: myInjector; content: myContent">` }) -export class NgTemplateOutletCompleteExample { +class NgTemplateOutletCompleteExample { // This field is necessary to expose CompleteComponent to the template. CompleteComponent = CompleteComponent; myInjector: Injector; @@ -65,7 +64,7 @@ export class NgTemplateOutletCompleteExample { // #docregion NgModuleFactoryExample @Component({selector: 'other-module-component', template: `Other Module Component!`}) -export class OtherModuleComponent { +class OtherModuleComponent { } @Component({ @@ -74,7 +73,7 @@ export class OtherModuleComponent { ` }) -export class NgTemplateOutletOtherModuleExample { +class NgTemplateOutletOtherModuleExample { // This field is necessary to expose OtherModuleComponent to the template. OtherModuleComponent = OtherModuleComponent; myModule: NgModuleFactory; @@ -92,7 +91,19 @@ export class NgTemplateOutletOtherModuleExample {
` }) -export class AppComponent { +class ExampleApp { +} + +@NgModule({ + imports: [BrowserModule], + declarations: [ + ExampleApp, NgTemplateOutletSimpleExample, NgTemplateOutletCompleteExample, + NgTemplateOutletOtherModuleExample, HelloWorld, CompleteComponent + ], + entryComponents: [HelloWorld, CompleteComponent], + bootstrap: [ExampleApp] +}) +export class AppModule { } @NgModule({ @@ -102,26 +113,3 @@ export class AppComponent { }) export class OtherModule { } - -export function createCompiler(compilerFactory: CompilerFactory) { - return compilerFactory.createCompiler(); -} - -@NgModule({ - imports: [BrowserModule], - declarations: [ - AppComponent, NgTemplateOutletSimpleExample, NgTemplateOutletCompleteExample, - NgTemplateOutletOtherModuleExample, HelloWorld, CompleteComponent - ], - entryComponents: [HelloWorld, CompleteComponent], - providers: [ - // Setup the JIT compiler that is not set up by default because the examples - // are bootstrapped using their NgModule factory. Since this example uses the - // JIT compiler, we manually set it up for this module. - {provide: COMPILER_OPTIONS, useValue: {}, multi: true}, - {provide: CompilerFactory, useClass: JitCompilerFactory, deps: [COMPILER_OPTIONS]}, - {provide: Compiler, useFactory: createCompiler, deps: [CompilerFactory]} - ] -}) -export class AppModule { -} diff --git a/packages/examples/common/ngIf/ts/e2e_test/ngIf_spec.ts b/packages/examples/common/ngIf/ts/e2e_test/ngIf_spec.ts index 2c3656c350..b0ba5c41c6 100644 --- a/packages/examples/common/ngIf/ts/e2e_test/ngIf_spec.ts +++ b/packages/examples/common/ngIf/ts/e2e_test/ngIf_spec.ts @@ -7,7 +7,7 @@ */ import {$, ExpectedConditions, browser, by, element} from 'protractor'; -import {verifyNoBrowserErrors} from '../../../../test-utils'; +import {verifyNoBrowserErrors} from '../../../../_common/e2e_util'; function waitForElement(selector: string) { const EC = ExpectedConditions; @@ -16,7 +16,7 @@ function waitForElement(selector: string) { } describe('ngIf', () => { - const URL = '/ngIf'; + const URL = 'common/ngIf/ts/'; afterEach(verifyNoBrowserErrors); describe('ng-if-simple', () => { diff --git a/packages/examples/common/ngIf/ts/module.ts b/packages/examples/common/ngIf/ts/module.ts index 51df5ed019..902ea6e528 100644 --- a/packages/examples/common/ngIf/ts/module.ts +++ b/packages/examples/common/ngIf/ts/module.ts @@ -21,7 +21,7 @@ import {Subject} from 'rxjs';
Text to show
` }) -export class NgIfSimple { +class NgIfSimple { show: boolean = true; } // #enddocregion @@ -37,7 +37,7 @@ export class NgIfSimple { Alternate text while primary text is hidden ` }) -export class NgIfElse { +class NgIfElse { show: boolean = true; } // #enddocregion @@ -56,7 +56,7 @@ export class NgIfElse { Alternate text while primary text is hidden ` }) -export class NgIfThenElse implements OnInit { +class NgIfThenElse implements OnInit { thenBlock: TemplateRef|null = null; show: boolean = true; @@ -85,7 +85,7 @@ export class NgIfThenElse implements OnInit { Waiting... (user is {{user|json}}) ` }) -export class NgIfAs { +class NgIfAs { userObservable = new Subject<{first: string, last: string}>(); first = ['John', 'Mike', 'Mary', 'Bob']; firstIndex = 0; @@ -116,12 +116,13 @@ export class NgIfAs {
` }) -export class AppComponent { +class ExampleApp { } @NgModule({ imports: [BrowserModule], - declarations: [AppComponent, NgIfSimple, NgIfElse, NgIfThenElse, NgIfAs], + declarations: [ExampleApp, NgIfSimple, NgIfElse, NgIfThenElse, NgIfAs], + bootstrap: [ExampleApp] }) export class AppModule { } diff --git a/packages/examples/common/ngTemplateOutlet/ts/e2e_test/ngTemplateOutlet_spec.ts b/packages/examples/common/ngTemplateOutlet/ts/e2e_test/ngTemplateOutlet_spec.ts index 508a68b01e..a57ea4fc9f 100644 --- a/packages/examples/common/ngTemplateOutlet/ts/e2e_test/ngTemplateOutlet_spec.ts +++ b/packages/examples/common/ngTemplateOutlet/ts/e2e_test/ngTemplateOutlet_spec.ts @@ -7,7 +7,7 @@ */ import {$, ExpectedConditions, browser, by, element} from 'protractor'; -import {verifyNoBrowserErrors} from '../../../../test-utils'; +import {verifyNoBrowserErrors} from '../../../../_common/e2e_util'; function waitForElement(selector: string) { const EC = ExpectedConditions; @@ -16,7 +16,7 @@ function waitForElement(selector: string) { } describe('ngTemplateOutlet', () => { - const URL = '/ngTemplateOutlet'; + const URL = 'common/ngTemplateOutlet/ts/'; afterEach(verifyNoBrowserErrors); describe('ng-template-outlet-example', () => { diff --git a/packages/examples/common/ngTemplateOutlet/ts/module.ts b/packages/examples/common/ngTemplateOutlet/ts/module.ts index 22e371a38b..dc14eb17be 100644 --- a/packages/examples/common/ngTemplateOutlet/ts/module.ts +++ b/packages/examples/common/ngTemplateOutlet/ts/module.ts @@ -26,7 +26,7 @@ import {BrowserModule} from '@angular/platform-browser'; Ahoj {{person}}! ` }) -export class NgTemplateOutletExample { +class NgTemplateOutletExample { myContext = {$implicit: 'World', localSk: 'Svet'}; } // #enddocregion @@ -36,12 +36,13 @@ export class NgTemplateOutletExample { selector: 'example-app', template: `` }) -export class AppComponent { +class ExampleApp { } @NgModule({ imports: [BrowserModule], - declarations: [AppComponent, NgTemplateOutletExample], + declarations: [ExampleApp, NgTemplateOutletExample], + bootstrap: [ExampleApp] }) export class AppModule { } diff --git a/packages/examples/common/pipes/ts/async_pipe.ts b/packages/examples/common/pipes/ts/async_pipe.ts index 50eb38ae01..31fa366d10 100644 --- a/packages/examples/common/pipes/ts/async_pipe.ts +++ b/packages/examples/common/pipes/ts/async_pipe.ts @@ -58,7 +58,7 @@ export class AsyncObservablePipeComponent { // protractor will not see us. Also we want to have this outside the docregion so as not to confuse // the reader. function setInterval(fn: Function, delay: number) { - const zone = (window as any)['Zone'].current; + const zone = Zone.current; let rootZone = zone; while (rootZone.parent) { rootZone = rootZone.parent; diff --git a/packages/examples/common/pipes/ts/e2e_test/pipe_spec.ts b/packages/examples/common/pipes/ts/e2e_test/pipe_spec.ts index def858d4a6..10551fcfb1 100644 --- a/packages/examples/common/pipes/ts/e2e_test/pipe_spec.ts +++ b/packages/examples/common/pipes/ts/e2e_test/pipe_spec.ts @@ -7,7 +7,7 @@ */ import {$, ExpectedConditions, browser, by, element} from 'protractor'; -import {verifyNoBrowserErrors} from '../../../../test-utils'; +import {verifyNoBrowserErrors} from '../../../../_common/e2e_util'; function waitForElement(selector: string) { const EC = ExpectedConditions; @@ -17,7 +17,7 @@ function waitForElement(selector: string) { describe('pipe', () => { afterEach(verifyNoBrowserErrors); - const URL = '/pipes'; + const URL = '/common/pipes/ts/'; describe('async', () => { it('should resolve and display promise', () => { diff --git a/packages/examples/common/pipes/ts/module.ts b/packages/examples/common/pipes/ts/module.ts index 5600dda996..f21d3af8b1 100644 --- a/packages/examples/common/pipes/ts/module.ts +++ b/packages/examples/common/pipes/ts/module.ts @@ -59,19 +59,19 @@ import {TitleCasePipeComponent} from './titlecase_pipe'; ` }) -export class AppComponent { +export class ExampleAppComponent { } @NgModule({ declarations: [ - AsyncPromisePipeComponent, AsyncObservablePipeComponent, AppComponent, JsonPipeComponent, + AsyncPromisePipeComponent, AsyncObservablePipeComponent, ExampleAppComponent, JsonPipeComponent, DatePipeComponent, DeprecatedDatePipeComponent, LowerUpperPipeComponent, TitleCasePipeComponent, - NumberPipeComponent, DeprecatedNumberPipeComponent, PercentPipeComponent, - DeprecatedPercentPipeComponent, CurrencyPipeComponent, DeprecatedCurrencyPipeComponent, - SlicePipeStringComponent, SlicePipeListComponent, I18nPluralPipeComponent, - I18nSelectPipeComponent, KeyValuePipeComponent + NumberPipeComponent, PercentPipeComponent, DeprecatedPercentPipeComponent, + CurrencyPipeComponent, DeprecatedCurrencyPipeComponent, SlicePipeStringComponent, + SlicePipeListComponent, I18nPluralPipeComponent, I18nSelectPipeComponent, KeyValuePipeComponent ], imports: [BrowserModule], + bootstrap: [ExampleAppComponent] }) export class AppModule { } diff --git a/packages/examples/common/start-server.js b/packages/examples/common/start-server.js deleted file mode 100644 index e7d432281a..0000000000 --- a/packages/examples/common/start-server.js +++ /dev/null @@ -1,17 +0,0 @@ -/** - * @license - * Copyright Google Inc. All Rights Reserved. - * - * Use of this source code is governed by an MIT-style license that can be - * found in the LICENSE file at https://angular.io/license - */ - -const protractorUtils = require('@angular/bazel/protractor-utils'); -const protractor = require('protractor'); - -module.exports = async function(config) { - const {port} = await protractorUtils.runServer(config.workspace, config.server, '-port', []); - const serverUrl = `http://localhost:${port}`; - - protractor.browser.baseUrl = serverUrl; -}; diff --git a/packages/examples/common/test_module.ts b/packages/examples/common/test_module.ts deleted file mode 100644 index 03e78df027..0000000000 --- a/packages/examples/common/test_module.ts +++ /dev/null @@ -1,41 +0,0 @@ -/** - * @license - * Copyright Google Inc. All Rights Reserved. - * - * Use of this source code is governed by an MIT-style license that can be - * found in the LICENSE file at https://angular.io/license - */ - -import {Component, NgModule} from '@angular/core'; -import {RouterModule} from '@angular/router'; - -import * as locationExample from './location/ts/module'; -import * as ngComponentOutletExample from './ngComponentOutlet/ts/module'; -import * as ngIfExample from './ngIf/ts/module'; -import * as ngTemplateOutletExample from './ngTemplateOutlet/ts/module'; -import * as pipesExample from './pipes/ts/module'; - -@Component({selector: 'example-app', template: ''}) -export class TestsAppComponent { -} - -@NgModule({ - imports: [ - locationExample.AppModule, ngComponentOutletExample.AppModule, ngIfExample.AppModule, - ngTemplateOutletExample.AppModule, pipesExample.AppModule, - - // Router configuration so that the individual e2e tests can load their - // app components. - RouterModule.forRoot([ - {path: 'location', component: locationExample.AppComponent}, - {path: 'ngComponentOutlet', component: ngComponentOutletExample.AppComponent}, - {path: 'ngIf', component: ngIfExample.AppComponent}, - {path: 'ngTemplateOutlet', component: ngTemplateOutletExample.AppComponent}, - {path: 'pipes', component: pipesExample.AppComponent}, - ]) - ], - declarations: [TestsAppComponent], - bootstrap: [TestsAppComponent] -}) -export class TestsAppModule { -} diff --git a/packages/examples/compiler/BUILD.bazel b/packages/examples/compiler/BUILD.bazel deleted file mode 100644 index 0ca85ef155..0000000000 --- a/packages/examples/compiler/BUILD.bazel +++ /dev/null @@ -1,13 +0,0 @@ -package(default_visibility = ["//visibility:public"]) - -load("//tools:defaults.bzl", "ng_module") - -ng_module( - name = "compiler_examples", - srcs = glob(["**/*.ts"]), - deps = [ - "//packages/core", - "//packages/platform-browser", - "//packages/platform-browser-dynamic", - ], -) diff --git a/packages/examples/compiler/ts/url_resolver/url_resolver.ts b/packages/examples/compiler/ts/url_resolver/url_resolver.ts index 4519132045..aac9552714 100644 --- a/packages/examples/compiler/ts/url_resolver/url_resolver.ts +++ b/packages/examples/compiler/ts/url_resolver/url_resolver.ts @@ -7,13 +7,11 @@ */ import {UrlResolver} from '@angular/compiler'; -import {Component, NgModule} from '@angular/core'; +import {NgModule} from '@angular/core'; import {BrowserModule} from '@angular/platform-browser'; import {platformBrowserDynamic} from '@angular/platform-browser-dynamic'; -@Component({selector: 'my-app', template: 'empty'}) -class MyApp { -} +let MyApp: any; // #docregion url_resolver class MyUrlResolver extends UrlResolver { diff --git a/packages/examples/core/BUILD.bazel b/packages/examples/core/BUILD.bazel deleted file mode 100644 index 0c25642b88..0000000000 --- a/packages/examples/core/BUILD.bazel +++ /dev/null @@ -1,63 +0,0 @@ -package(default_visibility = ["//visibility:public"]) - -load("//packages/bazel:index.bzl", "protractor_web_test_suite") -load("//tools:defaults.bzl", "ng_module", "ts_library") -load("@build_bazel_rules_typescript//:defs.bzl", "ts_devserver") - -ng_module( - name = "core_examples", - srcs = glob( - ["**/*.ts"], - exclude = [ - "**/*_spec.ts", - "**/*_howto.ts", - ], - ), - # TODO: FW-1004 Type checking is currently not complete. - type_check = False, - deps = [ - "//packages/animations", - "//packages/core", - "//packages/platform-browser", - "//packages/platform-browser-dynamic", - "//packages/platform-browser/animations", - "//packages/router", - ], -) - -ts_library( - name = "core_e2e_tests_lib", - testonly = True, - srcs = glob(["**/e2e_test/*_spec.ts"]), - tsconfig = "//packages/examples:tsconfig-e2e.json", - deps = [ - "//packages/examples/test-utils", - "@ngdeps//@types/jasminewd2", - "@ngdeps//protractor", - ], -) - -ts_devserver( - name = "devserver", - entry_module = "@angular/examples/core/main", - index_html = "//packages/examples:index.html", - port = 4200, - scripts = ["@ngdeps//node_modules/tslib:tslib.js"], - static_files = [ - "@ngdeps//node_modules/zone.js:dist/zone.js", - "@ngdeps//node_modules/zone.js:dist/task-tracking.js", - ], - deps = [":core_examples"], -) - -protractor_web_test_suite( - name = "protractor_tests", - data = ["//packages/bazel/src/protractor/utils"], - on_prepare = ":start-server.js", - server = ":devserver", - deps = [ - ":core_e2e_tests_lib", - "@ngdeps//protractor", - "@ngdeps//selenium-webdriver", - ], -) diff --git a/packages/examples/core/animation/ts/dsl/e2e_test/animation_example_spec.ts b/packages/examples/core/animation/ts/dsl/e2e_test/animation_example_spec.ts index 550af8d2a5..11ff8acfb5 100644 --- a/packages/examples/core/animation/ts/dsl/e2e_test/animation_example_spec.ts +++ b/packages/examples/core/animation/ts/dsl/e2e_test/animation_example_spec.ts @@ -7,7 +7,7 @@ */ import {$, ExpectedConditions, browser, by, element} from 'protractor'; -import {verifyNoBrowserErrors} from '../../../../../test-utils'; +import {verifyNoBrowserErrors} from '../../../../../_common/e2e_util'; function waitForElement(selector: string) { const EC = ExpectedConditions; @@ -19,7 +19,7 @@ describe('animation example', () => { afterEach(verifyNoBrowserErrors); describe('index view', () => { - const URL = '/animation/dsl/'; + const URL = '/core/animation/ts/dsl/'; it('should list out the current collection of items', () => { browser.get(URL); diff --git a/packages/examples/core/animation/ts/dsl/module.ts b/packages/examples/core/animation/ts/dsl/module.ts index b98014f470..6420007c73 100644 --- a/packages/examples/core/animation/ts/dsl/module.ts +++ b/packages/examples/core/animation/ts/dsl/module.ts @@ -5,5 +5,4 @@ * Use of this source code is governed by an MIT-style license that can be * found in the LICENSE file at https://angular.io/license */ - -export {AppModule, MyExpandoCmp as AppComponent} from './animation_example'; +export {AppModule} from './animation_example'; diff --git a/packages/examples/core/di/ts/contentChild/e2e_test/content_child_spec.ts b/packages/examples/core/di/ts/contentChild/e2e_test/content_child_spec.ts index 8c88393838..3d18b2e6c4 100644 --- a/packages/examples/core/di/ts/contentChild/e2e_test/content_child_spec.ts +++ b/packages/examples/core/di/ts/contentChild/e2e_test/content_child_spec.ts @@ -7,7 +7,7 @@ */ import {ElementFinder, browser, by, element} from 'protractor'; -import {verifyNoBrowserErrors} from '../../../../../test-utils'; +import {verifyNoBrowserErrors} from '../../../../../_common/e2e_util'; describe('contentChild example', () => { afterEach(verifyNoBrowserErrors); @@ -15,7 +15,7 @@ describe('contentChild example', () => { let result: ElementFinder; beforeEach(() => { - browser.get('/di/contentChild'); + browser.get('/core/di/ts/contentChild/index.html'); button = element(by.css('button')); result = element(by.css('div')); }); diff --git a/packages/examples/core/di/ts/contentChild/module.ts b/packages/examples/core/di/ts/contentChild/module.ts index 57a4d9378c..d64982d351 100644 --- a/packages/examples/core/di/ts/contentChild/module.ts +++ b/packages/examples/core/di/ts/contentChild/module.ts @@ -17,5 +17,3 @@ import {ContentChildComp, Pane, Tab} from './content_child_example'; }) export class AppModule { } - -export {ContentChildComp as AppComponent}; diff --git a/packages/examples/core/di/ts/contentChildren/e2e_test/content_children_spec.ts b/packages/examples/core/di/ts/contentChildren/e2e_test/content_children_spec.ts index 068e457704..1f061af5fe 100644 --- a/packages/examples/core/di/ts/contentChildren/e2e_test/content_children_spec.ts +++ b/packages/examples/core/di/ts/contentChildren/e2e_test/content_children_spec.ts @@ -7,7 +7,7 @@ */ import {ElementFinder, browser, by, element} from 'protractor'; -import {verifyNoBrowserErrors} from '../../../../../test-utils'; +import {verifyNoBrowserErrors} from '../../../../../_common/e2e_util'; describe('contentChildren example', () => { afterEach(verifyNoBrowserErrors); @@ -16,7 +16,7 @@ describe('contentChildren example', () => { let resultNested: ElementFinder; beforeEach(() => { - browser.get('/di/contentChildren'); + browser.get('/core/di/ts/contentChildren/index.html'); button = element(by.css('button')); resultTopLevel = element(by.css('.top-level')); resultNested = element(by.css('.nested')); diff --git a/packages/examples/core/di/ts/contentChildren/module.ts b/packages/examples/core/di/ts/contentChildren/module.ts index 1182507812..18e50ea60c 100644 --- a/packages/examples/core/di/ts/contentChildren/module.ts +++ b/packages/examples/core/di/ts/contentChildren/module.ts @@ -17,5 +17,3 @@ import {ContentChildrenComp, Pane, Tab} from './content_children_example'; }) export class AppModule { } - -export {ContentChildrenComp as AppComponent}; diff --git a/packages/examples/core/di/ts/viewChild/e2e_test/view_child_spec.ts b/packages/examples/core/di/ts/viewChild/e2e_test/view_child_spec.ts index 295cd1dbf1..5d58b46a5b 100644 --- a/packages/examples/core/di/ts/viewChild/e2e_test/view_child_spec.ts +++ b/packages/examples/core/di/ts/viewChild/e2e_test/view_child_spec.ts @@ -7,7 +7,7 @@ */ import {ElementFinder, browser, by, element} from 'protractor'; -import {verifyNoBrowserErrors} from '../../../../../test-utils'; +import {verifyNoBrowserErrors} from '../../../../../_common/e2e_util'; describe('viewChild example', () => { afterEach(verifyNoBrowserErrors); @@ -15,7 +15,7 @@ describe('viewChild example', () => { let result: ElementFinder; beforeEach(() => { - browser.get('/di/viewChild'); + browser.get('/core/di/ts/viewChild/index.html'); button = element(by.css('button')); result = element(by.css('div')); }); diff --git a/packages/examples/core/di/ts/viewChild/module.ts b/packages/examples/core/di/ts/viewChild/module.ts index de45d067f3..0ea1c25ec6 100644 --- a/packages/examples/core/di/ts/viewChild/module.ts +++ b/packages/examples/core/di/ts/viewChild/module.ts @@ -15,5 +15,3 @@ import {Pane, ViewChildComp} from './view_child_example'; {imports: [BrowserModule], declarations: [ViewChildComp, Pane], bootstrap: [ViewChildComp]}) export class AppModule { } - -export {ViewChildComp as AppComponent}; diff --git a/packages/examples/core/di/ts/viewChildren/e2e_test/view_children_spec.ts b/packages/examples/core/di/ts/viewChildren/e2e_test/view_children_spec.ts index 701e8cc389..a61d8e1ed3 100644 --- a/packages/examples/core/di/ts/viewChildren/e2e_test/view_children_spec.ts +++ b/packages/examples/core/di/ts/viewChildren/e2e_test/view_children_spec.ts @@ -8,7 +8,7 @@ import {ElementFinder, browser, by, element} from 'protractor'; -import {verifyNoBrowserErrors} from '../../../../../test-utils'; +import {verifyNoBrowserErrors} from '../../../../../_common/e2e_util'; describe('viewChildren example', () => { afterEach(verifyNoBrowserErrors); @@ -16,7 +16,7 @@ describe('viewChildren example', () => { let result: ElementFinder; beforeEach(() => { - browser.get('/di/viewChildren'); + browser.get('/core/di/ts/viewChildren/index.html'); button = element(by.css('button')); result = element(by.css('div')); }); diff --git a/packages/examples/core/di/ts/viewChildren/module.ts b/packages/examples/core/di/ts/viewChildren/module.ts index 59c07ea88d..1783203c2b 100644 --- a/packages/examples/core/di/ts/viewChildren/module.ts +++ b/packages/examples/core/di/ts/viewChildren/module.ts @@ -18,5 +18,3 @@ import {Pane, ViewChildrenComp} from './view_children_example'; }) export class AppModule { } - -export {ViewChildrenComp as AppComponent}; diff --git a/packages/examples/core/start-server.js b/packages/examples/core/start-server.js deleted file mode 100644 index e7d432281a..0000000000 --- a/packages/examples/core/start-server.js +++ /dev/null @@ -1,17 +0,0 @@ -/** - * @license - * Copyright Google Inc. All Rights Reserved. - * - * Use of this source code is governed by an MIT-style license that can be - * found in the LICENSE file at https://angular.io/license - */ - -const protractorUtils = require('@angular/bazel/protractor-utils'); -const protractor = require('protractor'); - -module.exports = async function(config) { - const {port} = await protractorUtils.runServer(config.workspace, config.server, '-port', []); - const serverUrl = `http://localhost:${port}`; - - protractor.browser.baseUrl = serverUrl; -}; diff --git a/packages/examples/core/test_module.ts b/packages/examples/core/test_module.ts deleted file mode 100644 index 933ed95b81..0000000000 --- a/packages/examples/core/test_module.ts +++ /dev/null @@ -1,44 +0,0 @@ -/** - * @license - * Copyright Google Inc. All Rights Reserved. - * - * Use of this source code is governed by an MIT-style license that can be - * found in the LICENSE file at https://angular.io/license - */ - -import {Component, NgModule} from '@angular/core'; -import {RouterModule} from '@angular/router'; - -import * as animationDslExample from './animation/ts/dsl/module'; -import * as diContentChildExample from './di/ts/contentChild/module'; -import * as diContentChildrenExample from './di/ts/contentChildren/module'; -import * as diViewChildExample from './di/ts/viewChild/module'; -import * as diViewChildrenExample from './di/ts/viewChildren/module'; -import * as testabilityWhenStableExample from './testability/ts/whenStable/module'; - -@Component({selector: 'example-app', template: ''}) -export class TestsAppComponent { -} - -@NgModule({ - imports: [ - animationDslExample.AppModule, diContentChildExample.AppModule, - diContentChildrenExample.AppModule, diViewChildExample.AppModule, - diViewChildrenExample.AppModule, testabilityWhenStableExample.AppModule, - - // Router configuration so that the individual e2e tests can load their - // app components. - RouterModule.forRoot([ - {path: 'animation/dsl', component: animationDslExample.AppComponent}, - {path: 'di/contentChild', component: diContentChildExample.AppComponent}, - {path: 'di/contentChildren', component: diContentChildrenExample.AppComponent}, - {path: 'di/viewChild', component: diViewChildExample.AppComponent}, - {path: 'di/viewChildren', component: diViewChildrenExample.AppComponent}, - {path: 'testability/whenStable', component: testabilityWhenStableExample.AppComponent}, - ]) - ], - declarations: [TestsAppComponent], - bootstrap: [TestsAppComponent] -}) -export class TestsAppModule { -} diff --git a/packages/examples/core/testability/ts/whenStable/e2e_test/testability_example_spec.ts b/packages/examples/core/testability/ts/whenStable/e2e_test/testability_example_spec.ts index 9ffc27a774..544914552b 100644 --- a/packages/examples/core/testability/ts/whenStable/e2e_test/testability_example_spec.ts +++ b/packages/examples/core/testability/ts/whenStable/e2e_test/testability_example_spec.ts @@ -7,19 +7,13 @@ */ import {browser, by, element} from 'protractor'; -import {verifyNoBrowserErrors} from '../../../../../test-utils'; - -// Declare the global "window" and "document" constant since we don't want to add the "dom" -// TypeScript lib for the e2e specs that execute code in the browser and reference such -// global constants. -declare const window: any; -declare const document: any; +import {verifyNoBrowserErrors} from '../../../../../_common/e2e_util'; describe('testability example', () => { afterEach(verifyNoBrowserErrors); describe('using task tracking', () => { - const URL = '/testability/whenStable/'; + const URL = '/core/testability/ts/whenStable/'; it('times out with a list of tasks', done => { browser.get(URL); @@ -28,7 +22,7 @@ describe('testability example', () => { // Script that runs in the browser and calls whenStable with a timeout. let waitWithResultScript = function(done: any) { let rootEl = document.querySelector('example-app'); - let testability = window.getAngularTestability(rootEl); + let testability = (window as any).getAngularTestability(rootEl); testability.whenStable((didWork: boolean, tasks: any) => { done(tasks); }, 1000); }; diff --git a/packages/examples/core/testability/ts/whenStable/module.ts b/packages/examples/core/testability/ts/whenStable/module.ts index 51fe049302..a8f49caec7 100644 --- a/packages/examples/core/testability/ts/whenStable/module.ts +++ b/packages/examples/core/testability/ts/whenStable/module.ts @@ -5,4 +5,4 @@ * Use of this source code is governed by an MIT-style license that can be * found in the LICENSE file at https://angular.io/license */ -export {AppModule, StableTestCmp as AppComponent} from './testability_example'; +export {AppModule} from './testability_example'; diff --git a/packages/examples/core/testing/ts/BUILD.bazel b/packages/examples/core/testing/ts/BUILD.bazel deleted file mode 100644 index 2fe7a63b68..0000000000 --- a/packages/examples/core/testing/ts/BUILD.bazel +++ /dev/null @@ -1,23 +0,0 @@ -load("//tools:defaults.bzl", "jasmine_node_test", "ts_library") - -ts_library( - name = "fake_async_lib", - srcs = [ - "example_spec.ts", - "fake_async.ts", - ], - deps = [ - "//packages/core/testing", - "@ngdeps//@types/jasmine", - "@ngdeps//@types/node", - ], -) - -jasmine_node_test( - name = "test", - bootstrap = ["angular/tools/testing/init_node_spec.js"], - deps = [ - ":fake_async_lib", - "//tools/testing:node", - ], -) diff --git a/packages/examples/core/testing/ts/example_spec.ts b/packages/examples/core/testing/ts/example_spec.ts deleted file mode 100644 index 880c5f975a..0000000000 --- a/packages/examples/core/testing/ts/example_spec.ts +++ /dev/null @@ -1,12 +0,0 @@ -/** - * @license - * Copyright Google Inc. All Rights Reserved. - * - * Use of this source code is governed by an MIT-style license that can be - * found in the LICENSE file at https://angular.io/license - */ - -// Import the "fake_async" example that registers tests which are shown as examples. These need -// to be valid tests, so we run them here. Note that we need to add this layer of abstraction here -// because the "jasmine_node_test" rule only picks up test files with the "_spec.ts" file suffix. -import './fake_async'; diff --git a/packages/examples/core/ts/metadata/directives.ts b/packages/examples/core/ts/metadata/directives.ts index 49aa0ea6b1..d1fa0b28aa 100644 --- a/packages/examples/core/ts/metadata/directives.ts +++ b/packages/examples/core/ts/metadata/directives.ts @@ -6,7 +6,7 @@ * found in the LICENSE file at https://angular.io/license */ /* tslint:disable:no-console */ -import {Component, Directive, EventEmitter, NgModule} from '@angular/core'; +import {Component, Directive, EventEmitter} from '@angular/core'; // #docregion component-input @Component({ @@ -63,10 +63,4 @@ export class MyOutputComponent { onEverySecond() { console.log('second'); } onEveryFiveSeconds() { console.log('five seconds'); } } -// #enddocregion component-output-interval - -@NgModule({ - declarations: [BankAccountComponent, MyInputComponent, IntervalDirComponent, MyOutputComponent] -}) -export class AppModule { -} +// #enddocregion component-output-interval \ No newline at end of file diff --git a/packages/examples/core/ts/prod_mode/prod_mode_example.ts b/packages/examples/core/ts/prod_mode/prod_mode_example.ts index 34cc039b4e..4dcb7a55e2 100644 --- a/packages/examples/core/ts/prod_mode/prod_mode_example.ts +++ b/packages/examples/core/ts/prod_mode/prod_mode_example.ts @@ -13,10 +13,8 @@ import {platformBrowserDynamic} from '@angular/platform-browser-dynamic'; import {MyComponent} from './my_component'; enableProdMode(); - -@NgModule({imports: [BrowserModule], declarations: [MyComponent], bootstrap: [MyComponent]}) -export class AppModule { +@NgModule({imports: [BrowserModule], bootstrap: [MyComponent]}) +class AppModule { } - platformBrowserDynamic().bootstrapModule(AppModule); // #enddocregion diff --git a/packages/examples/forms/BUILD.bazel b/packages/examples/forms/BUILD.bazel deleted file mode 100644 index 3b82221b41..0000000000 --- a/packages/examples/forms/BUILD.bazel +++ /dev/null @@ -1,59 +0,0 @@ -package(default_visibility = ["//visibility:public"]) - -load("//packages/bazel:index.bzl", "protractor_web_test_suite") -load("//tools:defaults.bzl", "ng_module", "ts_library") -load("@build_bazel_rules_typescript//:defs.bzl", "ts_devserver") - -ng_module( - name = "forms_examples", - srcs = glob( - ["**/*.ts"], - exclude = ["**/*_spec.ts"], - ), - # TODO: FW-1004 Type checking is currently not complete. - type_check = False, - deps = [ - "//packages/core", - "//packages/forms", - "//packages/platform-browser", - "//packages/platform-browser-dynamic", - "//packages/router", - ], -) - -ts_library( - name = "forms_e2e_tests_lib", - testonly = True, - srcs = glob(["**/e2e_test/*_spec.ts"]), - tsconfig = "//packages/examples:tsconfig-e2e.json", - deps = [ - "//packages/examples/test-utils", - "//packages/private/testing", - "@ngdeps//@types/jasminewd2", - "@ngdeps//protractor", - ], -) - -ts_devserver( - name = "devserver", - entry_module = "@angular/examples/forms/main", - index_html = "//packages/examples:index.html", - port = 4200, - scripts = ["@ngdeps//node_modules/tslib:tslib.js"], - static_files = [ - "@ngdeps//node_modules/zone.js:dist/zone.js", - ], - deps = [":forms_examples"], -) - -protractor_web_test_suite( - name = "protractor_tests", - data = ["//packages/bazel/src/protractor/utils"], - on_prepare = ":start-server.js", - server = ":devserver", - deps = [ - ":forms_e2e_tests_lib", - "@ngdeps//protractor", - "@ngdeps//selenium-webdriver", - ], -) diff --git a/packages/examples/forms/main.ts b/packages/examples/forms/main.ts deleted file mode 100644 index b5ec0fb33e..0000000000 --- a/packages/examples/forms/main.ts +++ /dev/null @@ -1,12 +0,0 @@ -/** - * @license - * Copyright Google Inc. All Rights Reserved. - * - * Use of this source code is governed by an MIT-style license that can be - * found in the LICENSE file at https://angular.io/license - */ - -import {platformBrowserDynamic} from '@angular/platform-browser-dynamic'; -import {TestsAppModuleNgFactory} from './test_module.ngfactory'; - -platformBrowserDynamic().bootstrapModuleFactory(TestsAppModuleNgFactory); diff --git a/packages/examples/forms/start-server.js b/packages/examples/forms/start-server.js deleted file mode 100644 index e7d432281a..0000000000 --- a/packages/examples/forms/start-server.js +++ /dev/null @@ -1,17 +0,0 @@ -/** - * @license - * Copyright Google Inc. All Rights Reserved. - * - * Use of this source code is governed by an MIT-style license that can be - * found in the LICENSE file at https://angular.io/license - */ - -const protractorUtils = require('@angular/bazel/protractor-utils'); -const protractor = require('protractor'); - -module.exports = async function(config) { - const {port} = await protractorUtils.runServer(config.workspace, config.server, '-port', []); - const serverUrl = `http://localhost:${port}`; - - protractor.browser.baseUrl = serverUrl; -}; diff --git a/packages/examples/forms/test_module.ts b/packages/examples/forms/test_module.ts deleted file mode 100644 index 95d02990f2..0000000000 --- a/packages/examples/forms/test_module.ts +++ /dev/null @@ -1,58 +0,0 @@ -/** - * @license - * Copyright Google Inc. All Rights Reserved. - * - * Use of this source code is governed by an MIT-style license that can be - * found in the LICENSE file at https://angular.io/license - */ - -import {Component, NgModule} from '@angular/core'; -import {RouterModule} from '@angular/router'; - -import * as formBuilderExample from './ts/formBuilder/module'; -import * as nestedFormArrayExample from './ts/nestedFormArray/module'; -import * as nestedFormGroupExample from './ts/nestedFormGroup/module'; -import * as ngModelGroupExample from './ts/ngModelGroup/module'; -import * as radioButtonsExample from './ts/radioButtons/module'; -import * as reactiveRadioButtonsExample from './ts/reactiveRadioButtons/module'; -import * as reactiveSelectControlExample from './ts/reactiveSelectControl/module'; -import * as selectControlExample from './ts/selectControl/module'; -import * as simpleFormExample from './ts/simpleForm/module'; -import * as simpleFormControlExample from './ts/simpleFormControl/module'; -import * as simpleFormGroupExample from './ts/simpleFormGroup/module'; -import * as simpleNgModelExample from './ts/simpleNgModel/module'; - -@Component({selector: 'example-app', template: ''}) -export class TestsAppComponent { -} - -@NgModule({ - imports: [ - formBuilderExample.AppModule, nestedFormArrayExample.AppModule, - nestedFormGroupExample.AppModule, ngModelGroupExample.AppModule, radioButtonsExample.AppModule, - reactiveRadioButtonsExample.AppModule, reactiveSelectControlExample.AppModule, - selectControlExample.AppModule, simpleFormExample.AppModule, simpleFormControlExample.AppModule, - simpleFormGroupExample.AppModule, simpleNgModelExample.AppModule, - - // Router configuration so that the individual e2e tests can load their - // app components. - RouterModule.forRoot([ - {path: 'formBuilder', component: formBuilderExample.AppComponent}, - {path: 'nestedFormArray', component: nestedFormArrayExample.AppComponent}, - {path: 'nestedFormGroup', component: nestedFormGroupExample.AppComponent}, - {path: 'ngModelGroup', component: ngModelGroupExample.AppComponent}, - {path: 'radioButtons', component: radioButtonsExample.AppComponent}, - {path: 'reactiveRadioButtons', component: reactiveRadioButtonsExample.AppComponent}, - {path: 'reactiveSelectControl', component: reactiveSelectControlExample.AppComponent}, - {path: 'selectControl', component: selectControlExample.AppComponent}, - {path: 'simpleForm', component: simpleFormExample.AppComponent}, - {path: 'simpleFormControl', component: simpleFormControlExample.AppComponent}, - {path: 'simpleFormGroup', component: simpleFormGroupExample.AppComponent}, - {path: 'simpleNgModel', component: simpleNgModelExample.AppComponent} - ]) - ], - declarations: [TestsAppComponent], - bootstrap: [TestsAppComponent] -}) -export class TestsAppModule { -} diff --git a/packages/examples/forms/ts/formBuilder/e2e_test/form_builder_spec.ts b/packages/examples/forms/ts/formBuilder/e2e_test/form_builder_spec.ts index 03c964d0c6..55d4a43a55 100644 --- a/packages/examples/forms/ts/formBuilder/e2e_test/form_builder_spec.ts +++ b/packages/examples/forms/ts/formBuilder/e2e_test/form_builder_spec.ts @@ -7,7 +7,7 @@ */ import {ElementArrayFinder, browser, by, element} from 'protractor'; -import {verifyNoBrowserErrors} from '../../../../test-utils'; +import {verifyNoBrowserErrors} from '../../../../_common/e2e_util'; describe('formBuilder example', () => { afterEach(verifyNoBrowserErrors); @@ -15,7 +15,7 @@ describe('formBuilder example', () => { let paragraphs: ElementArrayFinder; beforeEach(() => { - browser.get('/formBuilder'); + browser.get('/forms/ts/formBuilder/index.html'); inputs = element.all(by.css('input')); paragraphs = element.all(by.css('p')); }); diff --git a/packages/examples/forms/ts/formBuilder/module.ts b/packages/examples/forms/ts/formBuilder/module.ts index 7e94ea650a..d34292d1d3 100644 --- a/packages/examples/forms/ts/formBuilder/module.ts +++ b/packages/examples/forms/ts/formBuilder/module.ts @@ -9,14 +9,12 @@ import {NgModule} from '@angular/core'; import {ReactiveFormsModule} from '@angular/forms'; import {BrowserModule} from '@angular/platform-browser'; -import {DisabledFormControlComponent, FormBuilderComp} from './form_builder_example'; +import {FormBuilderComp} from './form_builder_example'; @NgModule({ imports: [BrowserModule, ReactiveFormsModule], - declarations: [FormBuilderComp, DisabledFormControlComponent], + declarations: [FormBuilderComp], bootstrap: [FormBuilderComp] }) export class AppModule { } - -export {FormBuilderComp as AppComponent}; diff --git a/packages/examples/forms/ts/nestedFormArray/e2e_test/nested_form_array_spec.ts b/packages/examples/forms/ts/nestedFormArray/e2e_test/nested_form_array_spec.ts index 9baaac992c..e594b27290 100644 --- a/packages/examples/forms/ts/nestedFormArray/e2e_test/nested_form_array_spec.ts +++ b/packages/examples/forms/ts/nestedFormArray/e2e_test/nested_form_array_spec.ts @@ -7,7 +7,7 @@ */ import {ElementArrayFinder, browser, by, element} from 'protractor'; -import {verifyNoBrowserErrors} from '../../../../test-utils'; +import {verifyNoBrowserErrors} from '../../../../_common/e2e_util'; describe('nestedFormArray example', () => { afterEach(verifyNoBrowserErrors); @@ -15,7 +15,7 @@ describe('nestedFormArray example', () => { let buttons: ElementArrayFinder; beforeEach(() => { - browser.get('/nestedFormArray'); + browser.get('/forms/ts/nestedFormArray/index.html'); inputs = element.all(by.css('input')); buttons = element.all(by.css('button')); }); diff --git a/packages/examples/forms/ts/nestedFormArray/module.ts b/packages/examples/forms/ts/nestedFormArray/module.ts index 0d1d9b2f61..eb2478a6e4 100644 --- a/packages/examples/forms/ts/nestedFormArray/module.ts +++ b/packages/examples/forms/ts/nestedFormArray/module.ts @@ -18,5 +18,3 @@ import {NestedFormArray} from './nested_form_array_example'; }) export class AppModule { } - -export {NestedFormArray as AppComponent}; diff --git a/packages/examples/forms/ts/nestedFormGroup/e2e_test/nested_form_group_spec.ts b/packages/examples/forms/ts/nestedFormGroup/e2e_test/nested_form_group_spec.ts index a3fb76047c..6de78dfe09 100644 --- a/packages/examples/forms/ts/nestedFormGroup/e2e_test/nested_form_group_spec.ts +++ b/packages/examples/forms/ts/nestedFormGroup/e2e_test/nested_form_group_spec.ts @@ -7,7 +7,7 @@ */ import {ElementFinder, browser, by, element} from 'protractor'; -import {verifyNoBrowserErrors} from '../../../../test-utils'; +import {verifyNoBrowserErrors} from '../../../../_common/e2e_util'; describe('nestedFormGroup example', () => { afterEach(verifyNoBrowserErrors); @@ -16,7 +16,7 @@ describe('nestedFormGroup example', () => { let button: ElementFinder; beforeEach(() => { - browser.get('/nestedFormGroup'); + browser.get('/forms/ts/nestedFormGroup/index.html'); firstInput = element(by.css('[formControlName="first"]')); lastInput = element(by.css('[formControlName="last"]')); button = element(by.css('button:not([type="submit"])')); diff --git a/packages/examples/forms/ts/nestedFormGroup/module.ts b/packages/examples/forms/ts/nestedFormGroup/module.ts index 0d5503f1ae..5773d5281f 100644 --- a/packages/examples/forms/ts/nestedFormGroup/module.ts +++ b/packages/examples/forms/ts/nestedFormGroup/module.ts @@ -18,5 +18,3 @@ import {NestedFormGroupComp} from './nested_form_group_example'; }) export class AppModule { } - -export {NestedFormGroupComp as AppComponent}; diff --git a/packages/examples/forms/ts/ngModelGroup/e2e_test/ng_model_group_spec.ts b/packages/examples/forms/ts/ngModelGroup/e2e_test/ng_model_group_spec.ts index 6d700e69ee..176a4eb8ae 100644 --- a/packages/examples/forms/ts/ngModelGroup/e2e_test/ng_model_group_spec.ts +++ b/packages/examples/forms/ts/ngModelGroup/e2e_test/ng_model_group_spec.ts @@ -7,7 +7,7 @@ */ import {ElementArrayFinder, browser, by, element} from 'protractor'; -import {verifyNoBrowserErrors} from '../../../../test-utils'; +import {verifyNoBrowserErrors} from '../../../../_common/e2e_util'; describe('ngModelGroup example', () => { afterEach(verifyNoBrowserErrors); @@ -15,7 +15,7 @@ describe('ngModelGroup example', () => { let buttons: ElementArrayFinder; beforeEach(() => { - browser.get('/ngModelGroup'); + browser.get('/forms/ts/ngModelGroup/index.html'); inputs = element.all(by.css('input')); buttons = element.all(by.css('button')); }); diff --git a/packages/examples/forms/ts/ngModelGroup/module.ts b/packages/examples/forms/ts/ngModelGroup/module.ts index 692f6edb46..ce06883c67 100644 --- a/packages/examples/forms/ts/ngModelGroup/module.ts +++ b/packages/examples/forms/ts/ngModelGroup/module.ts @@ -18,5 +18,3 @@ import {NgModelGroupComp} from './ng_model_group_example'; }) export class AppModule { } - -export {NgModelGroupComp as AppComponent}; diff --git a/packages/examples/forms/ts/radioButtons/e2e_test/radio_button_spec.ts b/packages/examples/forms/ts/radioButtons/e2e_test/radio_button_spec.ts index 56f668ec14..04b0ddd715 100644 --- a/packages/examples/forms/ts/radioButtons/e2e_test/radio_button_spec.ts +++ b/packages/examples/forms/ts/radioButtons/e2e_test/radio_button_spec.ts @@ -7,7 +7,7 @@ */ import {ElementArrayFinder, browser, by, element} from 'protractor'; -import {verifyNoBrowserErrors} from '../../../../test-utils'; +import {verifyNoBrowserErrors} from '../../../../_common/e2e_util'; describe('radioButtons example', () => { afterEach(verifyNoBrowserErrors); @@ -15,7 +15,7 @@ describe('radioButtons example', () => { let paragraphs: ElementArrayFinder; beforeEach(() => { - browser.get('/radioButtons'); + browser.get('/forms/ts/radioButtons/index.html'); inputs = element.all(by.css('input')); paragraphs = element.all(by.css('p')); }); diff --git a/packages/examples/forms/ts/radioButtons/module.ts b/packages/examples/forms/ts/radioButtons/module.ts index 4a146db88f..6a8151e88e 100644 --- a/packages/examples/forms/ts/radioButtons/module.ts +++ b/packages/examples/forms/ts/radioButtons/module.ts @@ -18,5 +18,3 @@ import {RadioButtonComp} from './radio_button_example'; }) export class AppModule { } - -export {RadioButtonComp as AppComponent}; diff --git a/packages/examples/forms/ts/reactiveRadioButtons/e2e_test/reactive_radio_button_spec.ts b/packages/examples/forms/ts/reactiveRadioButtons/e2e_test/reactive_radio_button_spec.ts index 4b23a8ffd5..d4286d5199 100644 --- a/packages/examples/forms/ts/reactiveRadioButtons/e2e_test/reactive_radio_button_spec.ts +++ b/packages/examples/forms/ts/reactiveRadioButtons/e2e_test/reactive_radio_button_spec.ts @@ -7,14 +7,14 @@ */ import {ElementArrayFinder, browser, by, element} from 'protractor'; -import {verifyNoBrowserErrors} from '../../../../test-utils'; +import {verifyNoBrowserErrors} from '../../../../_common/e2e_util'; describe('radioButtons example', () => { afterEach(verifyNoBrowserErrors); let inputs: ElementArrayFinder; beforeEach(() => { - browser.get('/reactiveRadioButtons'); + browser.get('/forms/ts/reactiveRadioButtons/index.html'); inputs = element.all(by.css('input')); }); diff --git a/packages/examples/forms/ts/reactiveRadioButtons/module.ts b/packages/examples/forms/ts/reactiveRadioButtons/module.ts index acf2040f9e..17f67b430b 100644 --- a/packages/examples/forms/ts/reactiveRadioButtons/module.ts +++ b/packages/examples/forms/ts/reactiveRadioButtons/module.ts @@ -18,5 +18,3 @@ import {ReactiveRadioButtonComp} from './reactive_radio_button_example'; }) export class AppModule { } - -export {ReactiveRadioButtonComp as AppComponent}; diff --git a/packages/examples/forms/ts/reactiveSelectControl/e2e_test/reactive_select_control_spec.ts b/packages/examples/forms/ts/reactiveSelectControl/e2e_test/reactive_select_control_spec.ts index 1da4d5eff0..5d2b338804 100644 --- a/packages/examples/forms/ts/reactiveSelectControl/e2e_test/reactive_select_control_spec.ts +++ b/packages/examples/forms/ts/reactiveSelectControl/e2e_test/reactive_select_control_spec.ts @@ -7,7 +7,7 @@ */ import {ElementArrayFinder, ElementFinder, browser, by, element} from 'protractor'; -import {verifyNoBrowserErrors} from '../../../../test-utils'; +import {verifyNoBrowserErrors} from '../../../../_common/e2e_util'; describe('reactiveSelectControl example', () => { afterEach(verifyNoBrowserErrors); @@ -16,7 +16,7 @@ describe('reactiveSelectControl example', () => { let p: ElementFinder; beforeEach(() => { - browser.get('/reactiveSelectControl'); + browser.get('/forms/ts/reactiveSelectControl/index.html'); select = element(by.css('select')); options = element.all(by.css('option')); p = element(by.css('p')); diff --git a/packages/examples/forms/ts/reactiveSelectControl/module.ts b/packages/examples/forms/ts/reactiveSelectControl/module.ts index eace263e9b..47c53b3fe7 100644 --- a/packages/examples/forms/ts/reactiveSelectControl/module.ts +++ b/packages/examples/forms/ts/reactiveSelectControl/module.ts @@ -18,5 +18,3 @@ import {ReactiveSelectComp} from './reactive_select_control_example'; }) export class AppModule { } - -export {ReactiveSelectComp as AppComponent}; diff --git a/packages/examples/forms/ts/selectControl/e2e_test/select_control_spec.ts b/packages/examples/forms/ts/selectControl/e2e_test/select_control_spec.ts index 2fbbc22fd3..f79efa27bb 100644 --- a/packages/examples/forms/ts/selectControl/e2e_test/select_control_spec.ts +++ b/packages/examples/forms/ts/selectControl/e2e_test/select_control_spec.ts @@ -7,7 +7,7 @@ */ import {ElementArrayFinder, ElementFinder, browser, by, element} from 'protractor'; -import {verifyNoBrowserErrors} from '../../../../test-utils'; +import {verifyNoBrowserErrors} from '../../../../_common/e2e_util'; describe('selectControl example', () => { afterEach(verifyNoBrowserErrors); @@ -16,7 +16,7 @@ describe('selectControl example', () => { let p: ElementFinder; beforeEach(() => { - browser.get('/selectControl'); + browser.get('/forms/ts/selectControl/index.html'); select = element(by.css('select')); options = element.all(by.css('option')); p = element(by.css('p')); diff --git a/packages/examples/forms/ts/selectControl/module.ts b/packages/examples/forms/ts/selectControl/module.ts index 722f3baf43..f2adc86335 100644 --- a/packages/examples/forms/ts/selectControl/module.ts +++ b/packages/examples/forms/ts/selectControl/module.ts @@ -18,5 +18,3 @@ import {SelectControlComp} from './select_control_example'; }) export class AppModule { } - -export {SelectControlComp as AppComponent}; diff --git a/packages/examples/forms/ts/simpleForm/e2e_test/simple_form_spec.ts b/packages/examples/forms/ts/simpleForm/e2e_test/simple_form_spec.ts index 0588a5882d..6f176ca56a 100644 --- a/packages/examples/forms/ts/simpleForm/e2e_test/simple_form_spec.ts +++ b/packages/examples/forms/ts/simpleForm/e2e_test/simple_form_spec.ts @@ -7,7 +7,7 @@ */ import {ElementArrayFinder, browser, by, element} from 'protractor'; -import {verifyNoBrowserErrors} from '../../../../test-utils'; +import {verifyNoBrowserErrors} from '../../../../_common/e2e_util'; describe('simpleForm example', () => { afterEach(verifyNoBrowserErrors); @@ -15,7 +15,7 @@ describe('simpleForm example', () => { let paragraphs: ElementArrayFinder; beforeEach(() => { - browser.get('/simpleForm'); + browser.get('/forms/ts/simpleForm/index.html'); inputs = element.all(by.css('input')); paragraphs = element.all(by.css('p')); }); diff --git a/packages/examples/forms/ts/simpleForm/module.ts b/packages/examples/forms/ts/simpleForm/module.ts index 5b004e6ffe..12037114e4 100644 --- a/packages/examples/forms/ts/simpleForm/module.ts +++ b/packages/examples/forms/ts/simpleForm/module.ts @@ -18,5 +18,3 @@ import {SimpleFormComp} from './simple_form_example'; }) export class AppModule { } - -export {SimpleFormComp as AppComponent}; diff --git a/packages/examples/forms/ts/simpleFormControl/e2e_test/simple_form_control_spec.ts b/packages/examples/forms/ts/simpleFormControl/e2e_test/simple_form_control_spec.ts index 810064705c..5436952a63 100644 --- a/packages/examples/forms/ts/simpleFormControl/e2e_test/simple_form_control_spec.ts +++ b/packages/examples/forms/ts/simpleFormControl/e2e_test/simple_form_control_spec.ts @@ -7,7 +7,7 @@ */ import {ElementFinder, browser, by, element} from 'protractor'; -import {verifyNoBrowserErrors} from '../../../../test-utils'; +import {verifyNoBrowserErrors} from '../../../../_common/e2e_util'; describe('simpleFormControl example', () => { afterEach(verifyNoBrowserErrors); @@ -18,7 +18,7 @@ describe('simpleFormControl example', () => { let statusP: ElementFinder; beforeEach(() => { - browser.get('/simpleFormControl'); + browser.get('/forms/ts/simpleFormControl/index.html'); input = element(by.css('input')); valueP = element(by.css('p:first-of-type')); statusP = element(by.css('p:last-of-type')); diff --git a/packages/examples/forms/ts/simpleFormControl/module.ts b/packages/examples/forms/ts/simpleFormControl/module.ts index 860756856e..a16a1f4369 100644 --- a/packages/examples/forms/ts/simpleFormControl/module.ts +++ b/packages/examples/forms/ts/simpleFormControl/module.ts @@ -18,5 +18,3 @@ import {SimpleFormControl} from './simple_form_control_example'; }) export class AppModule { } - -export {SimpleFormControl as AppComponent}; diff --git a/packages/examples/forms/ts/simpleFormGroup/e2e_test/simple_form_group_spec.ts b/packages/examples/forms/ts/simpleFormGroup/e2e_test/simple_form_group_spec.ts index 76fdf8e7c6..5e2b3c8fdf 100644 --- a/packages/examples/forms/ts/simpleFormGroup/e2e_test/simple_form_group_spec.ts +++ b/packages/examples/forms/ts/simpleFormGroup/e2e_test/simple_form_group_spec.ts @@ -7,7 +7,7 @@ */ import {ElementFinder, browser, by, element} from 'protractor'; -import {verifyNoBrowserErrors} from '../../../../test-utils'; +import {verifyNoBrowserErrors} from '../../../../_common/e2e_util'; describe('formControlName example', () => { afterEach(verifyNoBrowserErrors); @@ -17,7 +17,7 @@ describe('formControlName example', () => { let lastInput: ElementFinder; beforeEach(() => { - browser.get('/simpleFormGroup'); + browser.get('/forms/ts/simpleFormGroup/index.html'); firstInput = element(by.css('[formControlName="first"]')); lastInput = element(by.css('[formControlName="last"]')); }); diff --git a/packages/examples/forms/ts/simpleFormGroup/module.ts b/packages/examples/forms/ts/simpleFormGroup/module.ts index e5749d0d56..cbafcdd503 100644 --- a/packages/examples/forms/ts/simpleFormGroup/module.ts +++ b/packages/examples/forms/ts/simpleFormGroup/module.ts @@ -18,5 +18,3 @@ import {SimpleFormGroup} from './simple_form_group_example'; }) export class AppModule { } - -export {SimpleFormGroup as AppComponent}; diff --git a/packages/examples/forms/ts/simpleNgModel/module.ts b/packages/examples/forms/ts/simpleNgModel/module.ts index 86e1e7d726..9f0872c544 100644 --- a/packages/examples/forms/ts/simpleNgModel/module.ts +++ b/packages/examples/forms/ts/simpleNgModel/module.ts @@ -18,5 +18,3 @@ import {SimpleNgModelComp} from './simple_ng_model_example'; }) export class AppModule { } - -export {SimpleNgModelComp as AppComponent}; diff --git a/packages/examples/http/BUILD.bazel b/packages/examples/http/BUILD.bazel deleted file mode 100644 index ffd0fb0cdc..0000000000 --- a/packages/examples/http/BUILD.bazel +++ /dev/null @@ -1 +0,0 @@ -package(default_visibility = ["//visibility:public"]) diff --git a/packages/examples/index.html b/packages/examples/index.html deleted file mode 100644 index 7f405e44b9..0000000000 --- a/packages/examples/index.html +++ /dev/null @@ -1,15 +0,0 @@ - - - - - Angular Examples - - - - - - - Loading... - - diff --git a/packages/examples/platform-browser/BUILD.bazel b/packages/examples/platform-browser/BUILD.bazel deleted file mode 100644 index 9298acbc99..0000000000 --- a/packages/examples/platform-browser/BUILD.bazel +++ /dev/null @@ -1,14 +0,0 @@ -package(default_visibility = ["//visibility:public"]) - -load("//tools:defaults.bzl", "ng_module") - -ng_module( - name = "platform_browser_examples", - srcs = glob(["**/*.ts"]), - deps = [ - "//packages/compiler", - "//packages/core", - "//packages/platform-browser", - "//packages/platform-browser-dynamic", - ], -) diff --git a/packages/examples/platform-browser/dom/debug/ts/debug_element_view_listener/providers.ts b/packages/examples/platform-browser/dom/debug/ts/debug_element_view_listener/providers.ts index 1e4c53dea6..0e47ad0b6f 100644 --- a/packages/examples/platform-browser/dom/debug/ts/debug_element_view_listener/providers.ts +++ b/packages/examples/platform-browser/dom/debug/ts/debug_element_view_listener/providers.ts @@ -11,7 +11,7 @@ import {Component, NgModule} from '@angular/core'; import {BrowserModule} from '@angular/platform-browser'; import {platformBrowserDynamic} from '@angular/platform-browser-dynamic'; -@Component({selector: 'my-component', template: 'text'}) +@Component({selector: 'my-component'}) class MyAppComponent { } diff --git a/packages/examples/test-utils/BUILD.bazel b/packages/examples/test-utils/BUILD.bazel deleted file mode 100644 index be2496ecae..0000000000 --- a/packages/examples/test-utils/BUILD.bazel +++ /dev/null @@ -1,11 +0,0 @@ -package(default_visibility = ["//visibility:public"]) - -load("//tools:defaults.bzl", "ts_library") - -ts_library( - name = "test-utils", - srcs = ["index.ts"], - deps = [ - "@ngdeps//@types/selenium-webdriver", - ], -) diff --git a/packages/examples/test-utils/index.ts b/packages/examples/test-utils/index.ts deleted file mode 100644 index 4bf0dd2b5d..0000000000 --- a/packages/examples/test-utils/index.ts +++ /dev/null @@ -1,43 +0,0 @@ -/** - * @license - * Copyright Google Inc. All Rights Reserved. - * - * Use of this source code is governed by an MIT-style license that can be - * found in the LICENSE file at https://angular.io/license - */ -/* tslint:disable:no-console */ -import {WebDriver, logging} from 'selenium-webdriver'; - -declare var browser: WebDriver; -declare var expect: any; - -// TODO (juliemr): remove this method once this becomes a protractor plugin -export async function verifyNoBrowserErrors() { - const browserLog = await browser.manage().logs().get('browser'); - const collectedErrors: any[] = []; - - browserLog.forEach(logEntry => { - const msg = logEntry.message; - - // Since we currently use the `ts_devserver` from the Bazel TypeScript rules, which does - // fallback to the "index.html" file for HTML5 pushState routing but does always serve the - // expected fallback with a 404 status code, the browser will print a message about the 404, - // while the page loaded properly. Ideally the "ts_devserver" would allow us to opt-in for - // just returning a 200 status code, but the devserver is intended to be kept manually, so - // we manually filter this error before ensuring there are no console errors. - // TODO: This is a current limitation of using the "ts_devserver" with Angular routing. - // Tracked with: TOOL-629 - if (msg.includes( - `Failed to load resource: the server responded with a status of 404 (Not Found)`)) { - return; - } - - console.log('>> ' + msg, logEntry); - - if (logEntry.level.value >= logging.Level.INFO.value) { - collectedErrors.push(msg); - } - }); - - expect(collectedErrors).toEqual([]); -} diff --git a/packages/examples/test.sh b/packages/examples/test.sh new file mode 100755 index 0000000000..c8827305a8 --- /dev/null +++ b/packages/examples/test.sh @@ -0,0 +1,17 @@ +#!/usr/bin/env bash + +set -u -e -o pipefail + +( + cd `dirname $0` + ./build.sh + + gulp serve-examples & + trap "kill $!" EXIT + + ( + cd ../../ + NODE_PATH=${NODE_PATH:-}:dist/all + $(npm bin)/protractor protractor-examples-e2e.conf.js --bundles=true + ) +) diff --git a/packages/examples/testing/BUILD.bazel b/packages/examples/testing/BUILD.bazel deleted file mode 100644 index c8c586c77d..0000000000 --- a/packages/examples/testing/BUILD.bazel +++ /dev/null @@ -1,13 +0,0 @@ -package(default_visibility = ["//visibility:public"]) - -load("//tools:defaults.bzl", "ts_library") - -ts_library( - name = "testing_examples", - srcs = glob(["**/*.ts"]), - tsconfig = "//packages:tsconfig-test.json", - deps = [ - "@ngdeps//@types/jasmine", - "@ngdeps//@types/node", - ], -) diff --git a/packages/examples/tsconfig-build.json b/packages/examples/tsconfig-build.json new file mode 100644 index 0000000000..b2ca2c29c3 --- /dev/null +++ b/packages/examples/tsconfig-build.json @@ -0,0 +1,22 @@ +{ + "extends": "../tsconfig-build.json", + + "compilerOptions": { + "module": "commonjs", + "emitDecoratorMetadata": true, + "baseUrl": ".", + "rootDir": ".", + "paths": { + "@angular/*": ["../../dist/packages-dist/*"], + "rxjs/*": ["../../node_modules/rxjs/*"] + }, + "outDir": "../../dist/examples", + "types": ["angular"] + }, + + "include": [ + "../../node_modules/@types/jasminewd2/index.d.ts", + "../types.d.ts", + "**/*.ts" + ] +} diff --git a/packages/examples/tsconfig-e2e.json b/packages/examples/tsconfig-e2e.json deleted file mode 100644 index ed38112bb4..0000000000 --- a/packages/examples/tsconfig-e2e.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "compilerOptions": { - "lib": ["es2015"], - "types": ["node", "jasminewd2"] - } -} diff --git a/packages/examples/tsconfig.json b/packages/examples/tsconfig.json new file mode 100644 index 0000000000..c13db98f55 --- /dev/null +++ b/packages/examples/tsconfig.json @@ -0,0 +1,18 @@ +// WARNING: +// This file is used to build the e2e tests only. +// The rest of the files are included in `/packages/tsconfig.json`. +{ + "extends": "../tsconfig.json", + + "compilerOptions": { + "types": [] + }, + + "include": [ + "../../node_modules/@types/jasminewd2/index.d.ts", + "../types.d.ts", + "**/e2e_test/*" + ], + + "exclude": [] +} diff --git a/packages/examples/upgrade/BUILD.bazel b/packages/examples/upgrade/BUILD.bazel deleted file mode 100644 index ae7cd15682..0000000000 --- a/packages/examples/upgrade/BUILD.bazel +++ /dev/null @@ -1,4 +0,0 @@ -exports_files([ - "tsconfig-build.json", - "start-server.js", -]) diff --git a/packages/examples/upgrade/start-server.js b/packages/examples/upgrade/start-server.js deleted file mode 100644 index e7d432281a..0000000000 --- a/packages/examples/upgrade/start-server.js +++ /dev/null @@ -1,17 +0,0 @@ -/** - * @license - * Copyright Google Inc. All Rights Reserved. - * - * Use of this source code is governed by an MIT-style license that can be - * found in the LICENSE file at https://angular.io/license - */ - -const protractorUtils = require('@angular/bazel/protractor-utils'); -const protractor = require('protractor'); - -module.exports = async function(config) { - const {port} = await protractorUtils.runServer(config.workspace, config.server, '-port', []); - const serverUrl = `http://localhost:${port}`; - - protractor.browser.baseUrl = serverUrl; -}; diff --git a/packages/examples/upgrade/static/ts/full/BUILD.bazel b/packages/examples/upgrade/static/ts/full/BUILD.bazel deleted file mode 100644 index 0e1d6defb8..0000000000 --- a/packages/examples/upgrade/static/ts/full/BUILD.bazel +++ /dev/null @@ -1,14 +0,0 @@ -package(default_visibility = ["//visibility:public"]) - -load("//packages/examples/upgrade:upgrade_example.bzl", "create_upgrade_example_targets") - -create_upgrade_example_targets( - name = "full", - srcs = glob( - ["**/*.ts"], - exclude = ["**/*_spec.ts"], - ), - assets = ["styles.css"], - e2e_srcs = glob(["e2e_test/*_spec.ts"]), - entry_module = "@angular/examples/upgrade/static/ts/full/module", -) diff --git a/packages/examples/upgrade/static/ts/full/e2e_test/static_full_spec.ts b/packages/examples/upgrade/static/ts/full/e2e_test/static_full_spec.ts index 442802edd7..d941609740 100644 --- a/packages/examples/upgrade/static/ts/full/e2e_test/static_full_spec.ts +++ b/packages/examples/upgrade/static/ts/full/e2e_test/static_full_spec.ts @@ -7,11 +7,11 @@ */ import {browser, by, element} from 'protractor'; -import {verifyNoBrowserErrors} from '../../../../../test-utils'; +import {verifyNoBrowserErrors} from '../../../../../_common/e2e_util'; function loadPage() { browser.rootEl = 'example-app'; - browser.get('/'); + browser.get('/upgrade/static/ts/full/'); } describe('upgrade/static (full)', () => { diff --git a/packages/examples/upgrade/static/ts/lite-multi-shared/BUILD.bazel b/packages/examples/upgrade/static/ts/lite-multi-shared/BUILD.bazel deleted file mode 100644 index 63f5064b7c..0000000000 --- a/packages/examples/upgrade/static/ts/lite-multi-shared/BUILD.bazel +++ /dev/null @@ -1,13 +0,0 @@ -package(default_visibility = ["//visibility:public"]) - -load("//packages/examples/upgrade:upgrade_example.bzl", "create_upgrade_example_targets") - -create_upgrade_example_targets( - name = "lite-multi-shared", - srcs = glob( - ["**/*.ts"], - exclude = ["**/*_spec.ts"], - ), - e2e_srcs = glob(["e2e_test/*_spec.ts"]), - entry_module = "@angular/examples/upgrade/static/ts/lite-multi-shared/module", -) diff --git a/packages/examples/upgrade/static/ts/lite-multi-shared/e2e_test/static_lite_multi_shared_spec.ts b/packages/examples/upgrade/static/ts/lite-multi-shared/e2e_test/static_lite_multi_shared_spec.ts index 9a7c6e45d2..8ddefcfae6 100644 --- a/packages/examples/upgrade/static/ts/lite-multi-shared/e2e_test/static_lite_multi_shared_spec.ts +++ b/packages/examples/upgrade/static/ts/lite-multi-shared/e2e_test/static_lite_multi_shared_spec.ts @@ -8,7 +8,7 @@ import {browser, by, element} from 'protractor'; -import {verifyNoBrowserErrors} from '../../../../../test-utils'; +import {verifyNoBrowserErrors} from '../../../../../_common/e2e_util'; describe('upgrade/static (lite with multiple downgraded modules and shared root module)', () => { @@ -16,7 +16,7 @@ describe('upgrade/static (lite with multiple downgraded modules and shared root const compB = element(by.css('ng2-b')); const compC = element(by.css('ng2-c')); - beforeEach(() => browser.get('/')); + beforeEach(() => browser.get('/upgrade/static/ts/lite-multi-shared/')); afterEach(verifyNoBrowserErrors); it('should share the same injectable instance across downgraded modules A and B', () => { diff --git a/packages/examples/upgrade/static/ts/lite-multi/BUILD.bazel b/packages/examples/upgrade/static/ts/lite-multi/BUILD.bazel deleted file mode 100644 index b1e71833a5..0000000000 --- a/packages/examples/upgrade/static/ts/lite-multi/BUILD.bazel +++ /dev/null @@ -1,13 +0,0 @@ -package(default_visibility = ["//visibility:public"]) - -load("//packages/examples/upgrade:upgrade_example.bzl", "create_upgrade_example_targets") - -create_upgrade_example_targets( - name = "lite-multi", - srcs = glob( - ["**/*.ts"], - exclude = ["**/*_spec.ts"], - ), - e2e_srcs = glob(["e2e_test/*_spec.ts"]), - entry_module = "@angular/examples/upgrade/static/ts/lite-multi/module", -) diff --git a/packages/examples/upgrade/static/ts/lite-multi/e2e_test/static_lite_multi_spec.ts b/packages/examples/upgrade/static/ts/lite-multi/e2e_test/static_lite_multi_spec.ts index 2b9c846b74..3a4d571243 100644 --- a/packages/examples/upgrade/static/ts/lite-multi/e2e_test/static_lite_multi_spec.ts +++ b/packages/examples/upgrade/static/ts/lite-multi/e2e_test/static_lite_multi_spec.ts @@ -8,14 +8,14 @@ import {browser, by, element} from 'protractor'; -import {verifyNoBrowserErrors} from '../../../../../test-utils'; +import {verifyNoBrowserErrors} from '../../../../../_common/e2e_util'; describe('upgrade/static (lite with multiple downgraded modules)', () => { const navButtons = element.all(by.css('nav button')); const mainContent = element(by.css('main')); - beforeEach(() => browser.get('/')); + beforeEach(() => browser.get('/upgrade/static/ts/lite-multi/')); afterEach(verifyNoBrowserErrors); it('should correctly bootstrap multiple downgraded modules', () => { diff --git a/packages/examples/upgrade/static/ts/lite/BUILD.bazel b/packages/examples/upgrade/static/ts/lite/BUILD.bazel deleted file mode 100644 index 910574f326..0000000000 --- a/packages/examples/upgrade/static/ts/lite/BUILD.bazel +++ /dev/null @@ -1,14 +0,0 @@ -package(default_visibility = ["//visibility:public"]) - -load("//packages/examples/upgrade:upgrade_example.bzl", "create_upgrade_example_targets") - -create_upgrade_example_targets( - name = "lite", - srcs = glob( - ["**/*.ts"], - exclude = ["e2e_test/*"], - ), - assets = ["styles.css"], - e2e_srcs = glob(["e2e_test/*.ts"]), - entry_module = "@angular/examples/upgrade/static/ts/lite/module", -) diff --git a/packages/examples/upgrade/static/ts/lite/e2e_test/static_lite_spec.ts b/packages/examples/upgrade/static/ts/lite/e2e_test/static_lite_spec.ts index 61bf67d64e..5e7b6395ef 100644 --- a/packages/examples/upgrade/static/ts/lite/e2e_test/static_lite_spec.ts +++ b/packages/examples/upgrade/static/ts/lite/e2e_test/static_lite_spec.ts @@ -7,13 +7,13 @@ */ import {ElementArrayFinder, ElementFinder, browser, by, element} from 'protractor'; -import {verifyNoBrowserErrors} from '../../../../../test-utils'; +import {verifyNoBrowserErrors} from '../../../../../_common/e2e_util'; import {addCustomMatchers} from './e2e_util'; function loadPage() { browser.rootEl = 'example-app'; - browser.get('/'); + browser.get('/upgrade/static/ts/lite/'); } describe('upgrade/static (lite)', () => { diff --git a/packages/examples/upgrade/tsconfig-build.json b/packages/examples/upgrade/tsconfig-build.json deleted file mode 100644 index 70ccf09202..0000000000 --- a/packages/examples/upgrade/tsconfig-build.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "compilerOptions": { - "lib": ["dom", "es2015"], - "types": ["angular"] - } -} diff --git a/packages/examples/upgrade/upgrade_example.bzl b/packages/examples/upgrade/upgrade_example.bzl deleted file mode 100644 index 3934e0cad8..0000000000 --- a/packages/examples/upgrade/upgrade_example.bzl +++ /dev/null @@ -1,66 +0,0 @@ -load("//packages/bazel:index.bzl", "protractor_web_test_suite") -load("//tools:defaults.bzl", "ng_module", "ts_library") -load("@build_bazel_rules_typescript//:defs.bzl", "ts_devserver") - -""" - Macro that can be used to create the Bazel targets for an "upgrade" example. Since the - upgrade examples bootstrap their application manually, and we cannot serve all examples, - we need to define the devserver for each example. This macro reduces code duplication - for defining these targets. -""" - -def create_upgrade_example_targets(name, srcs, e2e_srcs, entry_module, assets = []): - ng_module( - name = "%s_sources" % name, - srcs = srcs, - # TODO: FW-1004 Type checking is currently not complete. - type_check = False, - deps = [ - "@ngdeps//@types/angular", - "//packages/core", - "//packages/platform-browser", - "//packages/platform-browser-dynamic", - "//packages/upgrade/static", - ], - tsconfig = "//packages/examples/upgrade:tsconfig-build.json", - ) - - ts_library( - name = "%s_e2e_lib" % name, - srcs = e2e_srcs, - testonly = True, - deps = [ - "@ngdeps//@types/jasminewd2", - "@ngdeps//protractor", - "//packages/examples/test-utils", - "//packages/private/testing", - ], - tsconfig = "//packages/examples:tsconfig-e2e.json", - ) - - ts_devserver( - name = "devserver", - port = 4200, - entry_module = entry_module, - static_files = [ - "@ngdeps//node_modules/zone.js:dist/zone.js", - "@ngdeps//node_modules/angular:angular.js", - "@ngdeps//node_modules/reflect-metadata:Reflect.js", - ], - index_html = "//packages/examples:index.html", - scripts = ["@ngdeps//node_modules/tslib:tslib.js"], - deps = [":%s_sources" % name], - data = assets, - ) - - protractor_web_test_suite( - name = "%s_protractor" % name, - data = ["//packages/bazel/src/protractor/utils"], - on_prepare = "//packages/examples/upgrade:start-server.js", - server = ":devserver", - deps = [ - ":%s_e2e_lib" % name, - "@ngdeps//protractor", - "@ngdeps//selenium-webdriver", - ], - ) diff --git a/packages/tsconfig.json b/packages/tsconfig.json index 720c55d6c9..9b8d04667c 100644 --- a/packages/tsconfig.json +++ b/packages/tsconfig.json @@ -33,12 +33,7 @@ "common/locales", "compiler-cli/integrationtest", "elements/schematics", - // Do not build the example e2e spec files since those require custom typings and - // aren't required to build all packages. "examples/**/e2e_test/*", - // Exclude the "main.ts" files for each example group because this file is used by - // Bazel to launch the devserver and uses AOT compilation. - "examples/*/main.ts", "platform-server/integrationtest", "router/test/aot_ngsummary_test", ] diff --git a/protractor-examples-e2e.conf.js b/protractor-examples-e2e.conf.js new file mode 100644 index 0000000000..ba143bb6a9 --- /dev/null +++ b/protractor-examples-e2e.conf.js @@ -0,0 +1,35 @@ +/** + * @license + * Copyright Google Inc. All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + +// Make sure that the command line is read as the first thing +// as this could exit node if the help script should be printed. +require('./dist/all/e2e_util/e2e_util').readCommandLine(); +require('reflect-metadata'); + +Error.stackTraceLimit = 9999; + +exports.config = { + onPrepare: function() { beforeEach(function() { browser.ignoreSynchronization = false; }); }, + allScriptsTimeout: 11000, + specs: ['dist/examples/**/e2e_test/*_spec.js'], + capabilities: { + 'browserName': 'chrome', + // Enables concurrent testing. Currently runs four e2e files in parallel. + shardTestFiles: true, + maxInstances: 4, + }, + directConnect: true, + baseUrl: 'http://localhost:8001/', + framework: 'jasmine2', + jasmineNodeOpts: { + showColors: true, + defaultTimeoutInterval: 60000, + print: function(msg) { console.log(msg); }, + }, + useAllAngular2AppRoots: true +}; diff --git a/scripts/build-e2e-tests.sh b/scripts/build-e2e-tests.sh index 7d62b191e4..f34fd342ba 100755 --- a/scripts/build-e2e-tests.sh +++ b/scripts/build-e2e-tests.sh @@ -34,3 +34,7 @@ mkdir -p ./dist/all # Build the modules which contain the playground and benchmark e2e tests. These # can be served by running "gulp serve". ./modules/build.sh + +# Build the examples package which also contains various e2e tests. These can be +# served by running "gulp serve-examples". +./packages/examples/build.sh diff --git a/tools/gulp-tasks/serve.js b/tools/gulp-tasks/serve.js index d3f476cbd2..0c0dda239a 100644 --- a/tools/gulp-tasks/serve.js +++ b/tools/gulp-tasks/serve.js @@ -23,4 +23,19 @@ module.exports = { }); }, + // Serve the examples + examples: (gulp) => () => { + const connect = require('gulp-connect'); + const cors = require('cors'); + const path = require('path'); + + connect.server({ + root: path.resolve(__dirname, '../../dist/examples'), + port: 8001, + livereload: false, + open: false, + middleware: (connect, opt) => [cors()], + }); + } + }; diff --git a/yarn.lock b/yarn.lock index ac369fbc85..c74c6b8c63 100644 --- a/yarn.lock +++ b/yarn.lock @@ -260,20 +260,15 @@ resolved "https://registry.yarnpkg.com/@types/hammerjs/-/hammerjs-2.0.35.tgz#7b7c950c7d54593e23bffc8d2b4feba9866a7277" integrity sha512-4mUIMSZ2U4UOWq1b+iV7XUTE4w+Kr3x+Zb/Qz5ROO6BTZLw2c8/ftjq0aRgluguLs4KRuBnrOy/s389HVn1/zA== -"@types/jasmine@*": - version "3.3.5" - resolved "https://registry.yarnpkg.com/@types/jasmine/-/jasmine-3.3.5.tgz#3738ffbf34dffae9ecaac4503d7d969744f0e1d7" - integrity sha512-LJtc52O1PNUffMvH6Q3fS0BOhQWYlkh3SVu/Jc4GoPgJkUytk5Y6YPbw+6lZK2mWWvG62BtVyOFw0ih7r8STsw== - -"@types/jasmine@^2.8.8": +"@types/jasmine@*", "@types/jasmine@^2.8.8": version "2.8.8" resolved "https://registry.yarnpkg.com/@types/jasmine/-/jasmine-2.8.8.tgz#bf53a7d193ea8b03867a38bfdb4fbb0e0bf066c9" integrity sha512-OJSUxLaxXsjjhob2DBzqzgrkLmukM3+JMpRp0r0E4HTdT1nwDCWhaswjYxazPij6uOdzHCJfNbDjmQ1/rnNbCg== -"@types/jasminewd2@^2.0.6": - version "2.0.6" - resolved "https://registry.yarnpkg.com/@types/jasminewd2/-/jasminewd2-2.0.6.tgz#2f57a8d9875a6c9ef328a14bd070ba14a055ac39" - integrity sha512-2ZOKrxb8bKRmP/po5ObYnRDgFE4i+lQiEB27bAMmtMWLgJSqlIDqlLx6S0IRorpOmOPRQ6O80NujTmQAtBkeNw== +"@types/jasminewd2@^2.0.4": + version "2.0.4" + resolved "https://registry.yarnpkg.com/@types/jasminewd2/-/jasminewd2-2.0.4.tgz#12422ee719f372d30c3cc7d99cc72dadba6ace01" + integrity sha512-G83fHoholqR7pmsY7ojHJqMAl4zD6ylKNaKCx7zH+GisCBQpnI5a7aUTFWVzv2wppIuWd+mJxyRqTASPfqcQ2w== dependencies: "@types/jasmine" "*"