test(ivy): Add bazel flag to control building ViewEngine or Ivy (#23833)

PR Close #23833
This commit is contained in:
Miško Hevery 2018-05-03 10:40:31 -07:00 committed by Matias Niemelä
parent db2329ef6a
commit 1b6b936ef4
6 changed files with 81 additions and 1 deletions

View File

@ -9,7 +9,10 @@ ng_module(
"*.ts",
"src/**/*.ts",
],
),
exclude = ["src/ivy_switch.ts"],
) + [
":ivy_switch",
],
module_name = "@angular/core",
deps = [
"//packages:types",
@ -30,3 +33,20 @@ ng_package(
"//packages/core/testing",
],
)
## Controls if Ivy is enabled. (Temporary target until we permanently switch over to Ivy)
##
## This file generates `src/ivy_switch.ts` file which reexports symbols for `ViewEngine` or `Ivy.`
## - append `--define=ivy=false` (default) to `bazel` command to reexport `./ivy_switch_false`
## and use `ViewEngine`;
## - append `--define=ivy=true` to `bazel` command to rexport `./ivy_switch_true` and use `Ivy`;
##
## NOTE: `--define=ivy=true` works with any `bazel` command or target across the repo.
##
## See: `//tools/bazel.rc` where `--define=ivy=false` is defined as default.
## See: `./src/ivy_switch.ts` for more details.
genrule(
name = "ivy_switch",
outs = ["src/ivy_switch.ts"],
cmd = "echo export '*' from \"'./ivy_switch_$(ivy)';\" > $@",
)

View File

@ -15,6 +15,7 @@ export {ChangeDetectorStatus as ɵChangeDetectorStatus, isDefaultChangeDetection
export {Console as ɵConsole} from './console';
export {inject as ɵinject, setCurrentInjector as ɵsetCurrentInjector} from './di/injector';
export {APP_ROOT as ɵAPP_ROOT} from './di/scope';
export {ivyEnabled as ɵivyEnabled} from './ivy_switch';
export {ComponentFactory as ɵComponentFactory} from './linker/component_factory';
export {CodegenComponentFactoryResolver as ɵCodegenComponentFactoryResolver} from './linker/component_factory_resolver';
export {ReflectionCapabilities as ɵReflectionCapabilities} from './reflection/reflection_capabilities';

View File

@ -0,0 +1,34 @@
/**
* @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
*/
/**
* This file is used to control if the default rendering pipeline should be `ViewEngine` or `Ivy`.
*
* Reexport from:
* - `./ivy_switch_false` => Use `ViewEngine`.
* - `./ivy_switch_true` => Use `Ivy`.
*
* This file is here for your IDE as well as for `google3`. The `bazel` build system
* specifically excludes this file and instead generates a new file which is controlled by
* command line:
*
* - `bazel build packages/core` => Use `ViewEngine`
* - `bazel build packages/core --define=ivy=true` => Use `Ivy`
*
* See: `bazel build packages/core:ivy_switch` for more details.
*
* ## How to use this
*
* Use this mechanism to have the same symbol be aliased to different implementation.
* 1) Create two implementations of a symbol (most likely a `function` or a `class`).
* 2) Export the two implementation under same name in `./ivy_switch_false` and `./ivy_switch_false`
* respectively.
* 3) Import the symbol from `./ivy_switch`. The imported symbol will that point to either the
* symbol in `./ivy_switch_false` and `./ivy_switch_false` depending on the compilation mode.
*/
export * from './ivy_switch_false';

View File

@ -0,0 +1,9 @@
/**
* @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
*/
export const ivyEnabled = false;

View File

@ -0,0 +1,9 @@
/**
* @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
*/
export const ivyEnabled = true;

View File

@ -53,3 +53,10 @@ test --experimental_ui
################################
# Bazel flags for CircleCI are in /.circleci/bazel.rc
################################
# Temporary Settings for Ivy #
################################
# to determine if the compiler used should be Ivy or ViewEngine one can use `--define=ivy=true` on
# any bazel target. This is a temporary flag until codebase is permanently switched to ViewEngine.
build --define=ivy=false