Commit f76ba6dd authored by Zentaro Kavanagh's avatar Zentaro Kavanagh Committed by Commit Bot

Diagnostics: Add a fake SystemRoutineController

Bug: 1125150
Test: browser_tests --gtest_filter=DiagnosticsApp*
Change-Id: Ibcb2638e12595d6023ff382c61983ca1f6d951cd
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2461216Reviewed-by: default avatarBailey Berro <baileyberro@chromium.org>
Commit-Queue: Zentaro Kavanagh <zentaro@chromium.org>
Cr-Commit-Position: refs/heads/master@{#815374}
parent 224f96bc
......@@ -21,8 +21,10 @@ GEN('#include "content/public/test/browser_test.h"');
['FakeMojoInterface', 'diagnostics/mojo_interface_provider_test.js'],
['FakeSystemDataProvider', 'diagnostics/fake_system_data_provider_test.js'],
['FakeMethodProvider', 'diagnostics/fake_method_provider_test.js'],
['PercentBarChart', 'diagnostics/percent_bar_chart_test.js']]
.forEach(test => registerTest(...test));
['PercentBarChart', 'diagnostics/percent_bar_chart_test.js'], [
'FakeSystemRoutineController',
'diagnostics/fake_system_routine_controller_test.js'
]].forEach(test => registerTest(...test));
function registerTest(testName, module) {
const className = `DiagnosticsApp${testName}`;
......
// Copyright 2020 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
// TODO(jimmyxgong): Use es6 module for mojo binding (crbug/1004256).
import 'chrome://resources/mojo/mojo/public/js/mojo_bindings_lite.js';
import {RoutineName, StandardRoutineResult} from 'chrome://diagnostics/diagnostics_types.js';
import {FakeSystemRoutineController} from 'chrome://diagnostics/fake_system_routine_controller.js';
import {PromiseResolver} from 'chrome://resources/js/promise_resolver.m.js';
suite('FakeSystemRoutineContollerTest', () => {
/** @type {?FakeSystemRoutineController} */
let controller = null;
setup(() => {
controller = new FakeSystemRoutineController();
});
teardown(() => {
controller = null;
});
/**
* Runs a standard routine and asserts the expected result. The returned
* promise must be forced to resolve either by chaining it with additional
* promises or returning it from the test.
*
* @param {!RoutineName} expectedName
* @param {!StandardRoutineResult} expectedResult
* @return {!Promise}
*/
function runRoutineAndAssertStandardResult(expectedName, expectedResult) {
let resolver = new PromiseResolver();
/** @type {!RoutineRunner} */
const routineRunnerRemote = {
onRoutineResult: (resultInfo) => {
assertEquals(expectedName, resultInfo.name);
assertEquals(expectedResult, resultInfo.result.simple_result);
resolver.resolve();
}
};
return controller.runRoutine(expectedName, routineRunnerRemote).then(() => {
return resolver.promise;
});
}
test('NonExistantTest', () => {
// A routine that hasn't had a fake result set will return kErrorExecuting.
return runRoutineAndAssertStandardResult(
RoutineName.kCpuStress, StandardRoutineResult.kErrorExecuting);
});
test('ExpectedResultPass', () => {
const routineName = RoutineName.kCpuStress;
const expectedResult = StandardRoutineResult.kTestPassed;
controller.setFakeStandardRoutineResult(routineName, expectedResult);
return runRoutineAndAssertStandardResult(routineName, expectedResult);
});
test('ExpectedResultFail', () => {
const routineName = RoutineName.kCpuStress;
const expectedResult = StandardRoutineResult.kTestFailed;
controller.setFakeStandardRoutineResult(routineName, expectedResult);
return runRoutineAndAssertStandardResult(routineName, expectedResult);
});
});
......@@ -20,6 +20,7 @@ js_type_check("closure_compile_module") {
":fake_method_resolver",
":fake_observables",
":fake_system_data_provider",
":fake_system_routine_controller",
":memory_card",
":mojo_interface_provider",
":overview_card",
......@@ -90,6 +91,10 @@ js_library("fake_system_data_provider") {
deps = [ "//ui/webui/resources/js:cr.m" ]
}
js_library("fake_system_routine_controller") {
deps = [ "//ui/webui/resources/js:cr.m" ]
}
js_library("memory_card") {
deps = [
":data_point",
......
......@@ -24,6 +24,7 @@
<include name="IDR_DIAGNOSTICS_FAKE_METHOD_RESOLVER_JS" file="fake_method_resolver.js" type="BINDATA"/>
<include name="IDR_DIAGNOSTICS_FAKE_OBSERVABLES_JS" file="fake_observables.js" type="BINDATA"/>
<include name="IDR_DIAGNOSTICS_FAKE_SYSTEM_DATA_PROVIDER_JS" file="fake_system_data_provider.js" type="BINDATA"/>
<include name="IDR_DIAGNOSTICS_FAKE_SYSTEM_ROUTINE_CONTROLLER_JS" file="fake_system_routine_controller.js" type="BINDATA"/>
<include name="IDR_DIAGNOSTICS_FONTS_CSS_JS" file="${root_gen_dir}/chromeos/components/diagnostics_ui/resources/diagnostics_fonts_css.js" use_base_dir="false" type="BINDATA"/>
<include name="IDR_DIAGNOSTICS_MEMORY_CARD_JS" file="${root_gen_dir}/chromeos/components/diagnostics_ui/resources/memory_card.js" use_base_dir="false" type="BINDATA"/>
<include name="IDR_DIAGNOSTICS_MOJO_INTERFACE_PROVIDER_JS" file="mojo_interface_provider.js" type="BINDATA"/>
......
// Copyright 2020 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
import {RoutineName, RoutineResult, RoutineResultInfo, RoutineRunner, StandardRoutineResult} from './diagnostics_types.js';
/**
* @fileoverview
* Implements a fake version of the SystemRoutineController mojo interface.
*
* TODO(zentaro): Add support for complex routine results.
*/
export class FakeSystemRoutineController {
constructor() {
/** private !Map<!RoutineName, !StandardRoutineResult> */
this.routineResults_ = new Map();
}
/*
* Implements SystemRoutineController.RunRoutine.
* @param {!RoutineName} routineName
* @param {!RoutineRunner} remoteRunner
* @return {!Promise}
*/
runRoutine(routineName, remoteRunner) {
return new Promise((resolve) => {
let result = this.routineResults_.get(routineName);
if (result == undefined) {
result = StandardRoutineResult.kErrorExecuting;
}
/** @type {!RoutineResult} */
const fullResult = {
simple_result: result,
};
/** @type {!RoutineResultInfo} */
const resultInfo = {
name: routineName,
result: fullResult,
};
remoteRunner.onRoutineResult(resultInfo);
resolve();
});
}
/**
*
* @param {!RoutineName} routineName
* @param {!StandardRoutineResult} routineResult
* @private
*/
setFakeStandardRoutineResult(routineName, routineResult) {
this.routineResults_.set(routineName, routineResult);
}
}
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment