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" "*"