Skip to content
This repository was archived by the owner on May 1, 2020. It is now read-only.

Commit 7222880

Browse files
committed
test(config): validate defaults so we don't accidentally screw something up
1 parent 989953b commit 7222880

File tree

2 files changed

+131
-7
lines changed

2 files changed

+131
-7
lines changed

src/util/config.spec.ts

Lines changed: 113 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,14 @@
1+
import { join, resolve } from 'path';
2+
3+
import * as helpers from './helpers';
14
import { BuildContext } from './interfaces';
25
import * as config from './config';
3-
46
import * as Constants from './constants';
5-
import { resolve } from 'path';
67

78

89
describe('config', () => {
910

10-
describe('config.config.generateContext', () => {
11+
describe('config.generateContext', () => {
1112

1213
it('should set isWatch true with isWatch true context', () => {
1314
const context = config.generateContext({
@@ -48,7 +49,7 @@ describe('config', () => {
4849
expect(context).toBeDefined();
4950
});
5051

51-
it('should set default prod specific build flag defaults to false', () => {
52+
it('should set the correct defaults for a dev build', () => {
5253
// arrange
5354
const fakeConfig: any = { };
5455
config.setProcessEnv(fakeConfig);
@@ -65,11 +66,90 @@ describe('config', () => {
6566
expect(context.runMinifyCss).toEqual(false);
6667
expect(context.optimizeJs).toEqual(false);
6768
expect(fakeConfig[Constants.ENV_VAR_IONIC_ENV]).toEqual(Constants.ENV_VAR_DEV);
69+
70+
expect(context.rootDir).toEqual(process.cwd());
71+
expect(context.tmpDir).toEqual(join(process.cwd(), Constants.TMP_DIR));
72+
expect(context.srcDir).toEqual(join(process.cwd(), Constants.SRC_DIR));
73+
expect(context.wwwDir).toEqual(join(process.cwd(), Constants.WWW_DIR));
74+
expect(context.wwwIndex).toEqual('index.html');
75+
expect(context.buildDir).toEqual(join(process.cwd(), Constants.WWW_DIR, Constants.BUILD_DIR));
76+
expect(context.nodeModulesDir).toEqual(join(process.cwd(), Constants.NODE_MODULES));
77+
expect(context.ionicAngularDir).toEqual(join(process.cwd(), Constants.NODE_MODULES, Constants.IONIC_ANGULAR));
78+
expect(context.platform).toEqual(null);
79+
expect(context.target).toEqual(null);
80+
expect(fakeConfig[Constants.ENV_VAR_IONIC_ANGULAR_ENTRY_POINT]).toEqual(join(context.ionicAngularDir, 'index.js'));
81+
expect(fakeConfig[Constants.ENV_VAR_APP_SCRIPTS_DIR]).toEqual(join(__dirname, '..', '..'));
82+
expect(fakeConfig[Constants.ENV_VAR_GENERATE_SOURCE_MAP]).toEqual('true');
83+
expect(fakeConfig[Constants.ENV_VAR_SOURCE_MAP_TYPE]).toEqual(Constants.SOURCE_MAP_TYPE_EXPENSIVE);
84+
expect(fakeConfig[Constants.ENV_TS_CONFIG]).toEqual(join(process.cwd(), 'tsconfig.json'));
85+
expect(fakeConfig[Constants.ENV_READ_CONFIG_JSON]).toEqual('true');
86+
expect(fakeConfig[Constants.ENV_APP_ENTRY_POINT]).toEqual(join(context.srcDir, 'app', 'main.ts'));
87+
expect(fakeConfig[Constants.ENV_APP_NG_MODULE_PATH]).toEqual(join(context.srcDir, 'app', 'app.module.ts'));
88+
expect(fakeConfig[Constants.ENV_APP_NG_MODULE_CLASS]).toEqual('AppModule');
89+
expect(fakeConfig[Constants.ENV_GLOB_UTIL]).toEqual(join(fakeConfig[Constants.ENV_VAR_APP_SCRIPTS_DIR], 'dist', 'util', 'glob-util.js'));
90+
expect(fakeConfig[Constants.ENV_CLEAN_BEFORE_COPY]).toBeFalsy();
91+
expect(fakeConfig[Constants.ENV_CLOSURE_JAR]).toEqual(join(fakeConfig[Constants.ENV_VAR_APP_SCRIPTS_DIR], 'bin', 'closure-compiler.jar'));
92+
expect(fakeConfig[Constants.ENV_OUTPUT_JS_FILE_NAME]).toEqual('main.js');
93+
expect(fakeConfig[Constants.ENV_OUTPUT_JS_MAP_FILE_NAME]).toEqual('main.js.map');
94+
expect(fakeConfig[Constants.ENV_OUTPUT_CSS_FILE_NAME]).toEqual('main.css');
95+
expect(fakeConfig[Constants.ENV_OUTPUT_CSS_MAP_FILE_NAME]).toEqual('main.css.map');
96+
expect(fakeConfig[Constants.ENV_WEBPACK_FACTORY]).toEqual(join(fakeConfig[Constants.ENV_VAR_APP_SCRIPTS_DIR], 'dist', 'webpack', 'ionic-webpack-factory.js'));
97+
expect(fakeConfig[Constants.ENV_WEBPACK_LOADER]).toEqual(join(fakeConfig[Constants.ENV_VAR_APP_SCRIPTS_DIR], 'dist', 'webpack', 'loader.js'));
98+
expect(fakeConfig[Constants.ENV_OPTIMIZATION_LOADER]).toEqual(join(fakeConfig[Constants.ENV_VAR_APP_SCRIPTS_DIR], 'dist', 'webpack', 'optimization-loader.js'));
99+
expect(fakeConfig[Constants.ENV_AOT_WRITE_TO_DISK]).toBeFalsy();
100+
expect(fakeConfig[Constants.ENV_PRINT_ORIGINAL_DEPENDENCY_TREE]).toBeFalsy();
101+
expect(fakeConfig[Constants.ENV_PRINT_MODIFIED_DEPENDENCY_TREE]).toBeFalsy();
102+
expect(fakeConfig[Constants.ENV_PRINT_WEBPACK_DEPENDENCY_TREE]).toBeFalsy();
103+
expect(fakeConfig[Constants.ENV_BAIL_ON_LINT_ERROR]).toBeFalsy();
104+
expect(fakeConfig[Constants.ENV_ENABLE_LINT]).toEqual('true');
105+
expect(fakeConfig[Constants.ENV_DISABLE_LOGGING]).toBeFalsy();
106+
107+
expect(fakeConfig[Constants.ENV_ACTION_SHEET_CONTROLLER_CLASSNAME]).toEqual('ActionSheetController');
108+
expect(fakeConfig[Constants.ENV_ACTION_SHEET_CONTROLLER_PATH]).toEqual(join(context.ionicAngularDir, 'components', 'action-sheet', 'action-sheet-controller.js'));
109+
expect(fakeConfig[Constants.ENV_ACTION_SHEET_VIEW_CONTROLLER_PATH]).toEqual(join(context.ionicAngularDir, 'components', 'action-sheet', 'action-sheet.js'));
110+
expect(fakeConfig[Constants.ENV_ACTION_SHEET_COMPONENT_FACTORY_PATH]).toEqual(join(context.ionicAngularDir, 'components', 'action-sheet', 'action-sheet-component.ngfactory.js'));
111+
112+
expect(fakeConfig[Constants.ENV_ALERT_CONTROLLER_CLASSNAME]).toEqual('AlertController');
113+
expect(fakeConfig[Constants.ENV_ALERT_CONTROLLER_PATH]).toEqual(join(context.ionicAngularDir, 'components', 'alert', 'alert-controller.js'));
114+
expect(fakeConfig[Constants.ENV_ALERT_VIEW_CONTROLLER_PATH]).toEqual(join(context.ionicAngularDir, 'components', 'alert', 'alert.js'));
115+
expect(fakeConfig[Constants.ENV_ALERT_COMPONENT_FACTORY_PATH]).toEqual(join(context.ionicAngularDir, 'components', 'alert', 'alert-component.ngfactory.js'));
116+
117+
expect(fakeConfig[Constants.ENV_LOADING_CONTROLLER_CLASSNAME]).toEqual('LoadingController');
118+
expect(fakeConfig[Constants.ENV_LOADING_CONTROLLER_PATH]).toEqual(join(context.ionicAngularDir, 'components', 'loading', 'loading-controller.js'));
119+
expect(fakeConfig[Constants.ENV_LOADING_VIEW_CONTROLLER_PATH]).toEqual(join(context.ionicAngularDir, 'components', 'loading', 'loading.js'));
120+
expect(fakeConfig[Constants.ENV_LOADING_COMPONENT_FACTORY_PATH]).toEqual(join(context.ionicAngularDir, 'components', 'loading', 'loading-component.ngfactory.js'));
121+
122+
expect(fakeConfig[Constants.ENV_MODAL_CONTROLLER_CLASSNAME]).toEqual('ModalController');
123+
expect(fakeConfig[Constants.ENV_MODAL_CONTROLLER_PATH]).toEqual(join(context.ionicAngularDir, 'components', 'modal', 'modal-controller.js'));
124+
expect(fakeConfig[Constants.ENV_MODAL_VIEW_CONTROLLER_PATH]).toEqual(join(context.ionicAngularDir, 'components', 'modal', 'modal.js'));
125+
expect(fakeConfig[Constants.ENV_MODAL_COMPONENT_FACTORY_PATH]).toEqual(join(context.ionicAngularDir, 'components', 'modal', 'modal-component.ngfactory.js'));
126+
127+
expect(fakeConfig[Constants.ENV_PICKER_CONTROLLER_CLASSNAME]).toEqual('PickerController');
128+
expect(fakeConfig[Constants.ENV_PICKER_CONTROLLER_PATH]).toEqual(join(context.ionicAngularDir, 'components', 'picker', 'picker-controller.js'));
129+
expect(fakeConfig[Constants.ENV_PICKER_VIEW_CONTROLLER_PATH]).toEqual(join(context.ionicAngularDir, 'components', 'picker', 'picker.js'));
130+
expect(fakeConfig[Constants.ENV_PICKER_COMPONENT_FACTORY_PATH]).toEqual(join(context.ionicAngularDir, 'components', 'picker', 'picker-component.ngfactory.js'));
131+
132+
expect(fakeConfig[Constants.ENV_POPOVER_CONTROLLER_CLASSNAME]).toEqual('PopoverController');
133+
expect(fakeConfig[Constants.ENV_POPOVER_CONTROLLER_PATH]).toEqual(join(context.ionicAngularDir, 'components', 'popover', 'popover-controller.js'));
134+
expect(fakeConfig[Constants.ENV_POPOVER_VIEW_CONTROLLER_PATH]).toEqual(join(context.ionicAngularDir, 'components', 'popover', 'popover.js'));
135+
expect(fakeConfig[Constants.ENV_POPOVER_COMPONENT_FACTORY_PATH]).toEqual(join(context.ionicAngularDir, 'components', 'popover', 'popover-component.ngfactory.js'));
136+
137+
expect(fakeConfig[Constants.ENV_TOAST_CONTROLLER_CLASSNAME]).toEqual('ToastController');
138+
expect(fakeConfig[Constants.ENV_TOAST_CONTROLLER_PATH]).toEqual(join(context.ionicAngularDir, 'components', 'toast', 'toast-controller.js'));
139+
expect(fakeConfig[Constants.ENV_TOAST_VIEW_CONTROLLER_PATH]).toEqual(join(context.ionicAngularDir, 'components', 'toast', 'toast.js'));
140+
expect(fakeConfig[Constants.ENV_TOAST_COMPONENT_FACTORY_PATH]).toEqual(join(context.ionicAngularDir, 'components', 'toast', 'toast-component.ngfactory.js'));
141+
142+
expect(fakeConfig[Constants.ENV_EXPERIMENTAL_PARSE_DEEPLINKS]).toBeFalsy();
143+
expect(fakeConfig[Constants.ENV_EXPERIMENTAL_MANUAL_TREESHAKING]).toBeFalsy();
144+
expect(fakeConfig[Constants.ENV_EXPERIMENTAL_PURGE_DECORATORS]).toBeFalsy();
145+
expect(fakeConfig[Constants.ENV_USE_EXPERIMENTAL_CLOSURE]).toBeFalsy();
146+
expect(fakeConfig[Constants.ENV_USE_EXPERIMENTAL_BABILI]).toBeFalsy();
147+
expect(fakeConfig[Constants.ENV_BUILD_TO_ES5]).toEqual('true');
148+
expect(context.bundler).toEqual('webpack');
68149
});
69150

70-
it('should set default prod specific build flags to true when isProd is true', () => {
151+
it('should set defaults for a prod build', () => {
71152
// arrange
72-
// arrange
73153
const fakeConfig: any = { };
74154
config.setProcessEnv(fakeConfig);
75155

@@ -85,7 +165,34 @@ describe('config', () => {
85165
expect(context.runMinifyCss).toEqual(true);
86166
expect(context.optimizeJs).toEqual(true);
87167
expect(fakeConfig[Constants.ENV_VAR_IONIC_ENV]).toEqual(Constants.ENV_VAR_PROD);
168+
expect(fakeConfig[Constants.ENV_VAR_GENERATE_SOURCE_MAP]).toBeFalsy();
88169
});
170+
171+
it('should override console', () => {
172+
const originalDebug = console.debug;
173+
const originalError = console.error;
174+
const originalInfo = console.info;
175+
const originalLog = console.log;
176+
const originalTrace = console.trace;
177+
const originalWarn = console.warn;
178+
179+
const fakeConfig: any = { };
180+
config.setProcessEnv(fakeConfig);
181+
182+
spyOn(helpers, helpers.getBooleanPropertyValue.name).and.returnValue(true);
183+
184+
config.generateContext({
185+
isProd: true
186+
});
187+
188+
expect(console.debug).not.toEqual(originalDebug);
189+
expect(console.error).not.toEqual(originalError);
190+
expect(console.info).not.toEqual(originalInfo);
191+
expect(console.log).not.toEqual(originalLog);
192+
expect(console.trace).not.toEqual(originalTrace);
193+
expect(console.warn).not.toEqual(originalWarn);
194+
});
195+
89196
});
90197

91198
describe('config.replacePathVars', () => {

src/util/config.ts

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import { accessSync, readJSONSync, statSync } from 'fs-extra';
33

44
import { Logger } from '../logger/logger';
55
import { BuildContext, TaskInfo } from './interfaces';
6-
import { objectAssign } from './helpers';
6+
import { getBooleanPropertyValue, objectAssign } from './helpers';
77
import { FileCache } from './file-cache';
88
import * as Constants from './constants';
99

@@ -197,6 +197,14 @@ export function generateContext(context?: BuildContext): BuildContext {
197197
setProcessEnvVar(Constants.ENV_BAIL_ON_LINT_ERROR, bailOnLintError);
198198
Logger.debug(`bailOnLintError set to ${bailOnLintError}`);
199199

200+
const enableLint = getConfigValue(context, '--enableLint', null, Constants.ENV_ENABLE_LINT, Constants.ENV_ENABLE_LINT.toLowerCase(), 'true');
201+
setProcessEnvVar(Constants.ENV_ENABLE_LINT, enableLint);
202+
Logger.debug(`enableLint set to ${enableLint}`);
203+
204+
const disableLogging = getConfigValue(context, '--disableLogging', null, Constants.ENV_DISABLE_LOGGING, Constants.ENV_DISABLE_LOGGING.toLowerCase(), null);
205+
setProcessEnvVar(Constants.ENV_DISABLE_LOGGING, disableLogging);
206+
Logger.debug(`disableLogging set to ${disableLogging}`);
207+
200208
/* Provider Path Stuff */
201209
setProcessEnvVar(Constants.ENV_ACTION_SHEET_CONTROLLER_CLASSNAME, 'ActionSheetController');
202210
setProcessEnvVar(Constants.ENV_ACTION_SHEET_CONTROLLER_PATH, join(context.ionicAngularDir, 'components', 'action-sheet', 'action-sheet-controller.js'));
@@ -269,6 +277,15 @@ export function generateContext(context?: BuildContext): BuildContext {
269277

270278
checkDebugMode();
271279

280+
if (getBooleanPropertyValue(Constants.ENV_DISABLE_LOGGING)) {
281+
console.debug = () => { };
282+
console.error = () => { };
283+
console.info = () => { };
284+
console.log = () => { };
285+
console.trace = () => { };
286+
console.warn = () => { };
287+
}
288+
272289
return context;
273290
}
274291

0 commit comments

Comments
 (0)