Commit 27802b89 authored by Tibor Goldschwendt's avatar Tibor Goldschwendt Committed by Commit Bot

[webui][ntp] Autogenerate test proxies

Change-Id: I22a400da520922e46308cc5a870876ef9865d5ce
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2026893
Commit-Queue: Tibor Goldschwendt <tiborg@chromium.org>
Reviewed-by: default avatarEsmael Elmoslimany <aee@chromium.org>
Cr-Commit-Position: refs/heads/master@{#737408}
parent 084e02fe
...@@ -5,20 +5,26 @@ ...@@ -5,20 +5,26 @@
import 'chrome://new-tab-page/app.js'; import 'chrome://new-tab-page/app.js';
import {BrowserProxy} from 'chrome://new-tab-page/browser_proxy.js'; import {BrowserProxy} from 'chrome://new-tab-page/browser_proxy.js';
import {assertStyle, TestProxy} from 'chrome://test/new_tab_page/test_support.js'; import {assertStyle, createTestProxy} from 'chrome://test/new_tab_page/test_support.js';
import {flushTasks} from 'chrome://test/test_util.m.js'; import {flushTasks} from 'chrome://test/test_util.m.js';
suite('NewTabPageAppTest', () => { suite('NewTabPageAppTest', () => {
/** @type {!AppElement} */ /** @type {!AppElement} */
let app; let app;
/** @type {TestProxy} */ /**
* @implements {BrowserProxy}
* @extends {TestBrowserProxy}
*/
let testProxy; let testProxy;
setup(async () => { setup(async () => {
PolymerTest.clearBody(); PolymerTest.clearBody();
testProxy = new TestProxy(); testProxy = createTestProxy();
testProxy.handler.setResultFor('getChromeThemes', Promise.resolve({
chromeThemes: [],
}));
BrowserProxy.instance_ = testProxy; BrowserProxy.instance_ = testProxy;
app = document.createElement('ntp-app'); app = document.createElement('ntp-app');
......
...@@ -6,20 +6,28 @@ import 'chrome://new-tab-page/customize_shortcuts.js'; ...@@ -6,20 +6,28 @@ import 'chrome://new-tab-page/customize_shortcuts.js';
import 'chrome://resources/mojo/mojo/public/js/mojo_bindings_lite.js'; import 'chrome://resources/mojo/mojo/public/js/mojo_bindings_lite.js';
import {BrowserProxy} from 'chrome://new-tab-page/browser_proxy.js'; import {BrowserProxy} from 'chrome://new-tab-page/browser_proxy.js';
import {assertStyle, keydown, TestProxy} from 'chrome://test/new_tab_page/test_support.js'; import {createTestProxy} from 'chrome://test/new_tab_page/test_support.js';
import {eventToPromise, flushTasks} from 'chrome://test/test_util.m.js';
suite('NewTabPageCustomizeShortcutsTest', () => { suite('NewTabPageCustomizeShortcutsTest', () => {
/** @type {!CustomizeShortcutsElement} */ /** @type {!CustomizeShortcutsElement} */
let customizeShortcuts; let customizeShortcuts;
/** @type {TestProxy} */ /**
* @implements {BrowserProxy}
* @extends {TestBrowserProxy}
*/
let testProxy; let testProxy;
setup(() => { setup(() => {
PolymerTest.clearBody(); PolymerTest.clearBody();
testProxy = new TestProxy(); testProxy = createTestProxy();
testProxy.handler.setResultFor('addMostVisitedTile', Promise.resolve({
success: true,
}));
testProxy.handler.setResultFor('updateMostVisitedTile', Promise.resolve({
success: true,
}));
BrowserProxy.instance_ = testProxy; BrowserProxy.instance_ = testProxy;
customizeShortcuts = document.createElement('ntp-customize-shortcuts'); customizeShortcuts = document.createElement('ntp-customize-shortcuts');
......
...@@ -5,11 +5,14 @@ ...@@ -5,11 +5,14 @@
import 'chrome://new-tab-page/customize_themes.js'; import 'chrome://new-tab-page/customize_themes.js';
import {BrowserProxy} from 'chrome://new-tab-page/browser_proxy.js'; import {BrowserProxy} from 'chrome://new-tab-page/browser_proxy.js';
import {assertStyle, TestProxy} from 'chrome://test/new_tab_page/test_support.js'; import {assertStyle, createTestProxy} from 'chrome://test/new_tab_page/test_support.js';
import {flushTasks} from 'chrome://test/test_util.m.js'; import {flushTasks} from 'chrome://test/test_util.m.js';
suite('NewTabPageCustomizeThemesTest', () => { suite('NewTabPageCustomizeThemesTest', () => {
/** @type {TestProxy} */ /**
* @implements {BrowserProxy}
* @extends {TestBrowserProxy}
*/
let testProxy; let testProxy;
/** @return {!CustomizeThemesElement} */ /** @return {!CustomizeThemesElement} */
...@@ -30,7 +33,10 @@ suite('NewTabPageCustomizeThemesTest', () => { ...@@ -30,7 +33,10 @@ suite('NewTabPageCustomizeThemesTest', () => {
setup(() => { setup(() => {
PolymerTest.clearBody(); PolymerTest.clearBody();
testProxy = new TestProxy(); testProxy = createTestProxy();
testProxy.handler.setResultFor('getChromeThemes', Promise.resolve({
chromeThemes: [],
}));
BrowserProxy.instance_ = testProxy; BrowserProxy.instance_ = testProxy;
}); });
......
...@@ -7,15 +7,17 @@ import 'chrome://resources/mojo/mojo/public/js/mojo_bindings_lite.js'; ...@@ -7,15 +7,17 @@ import 'chrome://resources/mojo/mojo/public/js/mojo_bindings_lite.js';
import 'chrome://resources/mojo/mojo/public/mojom/base/text_direction.mojom-lite.js'; import 'chrome://resources/mojo/mojo/public/mojom/base/text_direction.mojom-lite.js';
import {BrowserProxy} from 'chrome://new-tab-page/browser_proxy.js'; import {BrowserProxy} from 'chrome://new-tab-page/browser_proxy.js';
import {getDeepActiveElement} from 'chrome://resources/js/util.m.js'; import {assertFocus, createTestProxy, keydown} from 'chrome://test/new_tab_page/test_support.js';
import {assertFocus, keydown, TestProxy} from 'chrome://test/new_tab_page/test_support.js'; import {eventToPromise} from 'chrome://test/test_util.m.js';
import {eventToPromise, flushTasks} from 'chrome://test/test_util.m.js';
suite('NewTabPageMostVisitedFocusTest', () => { suite('NewTabPageMostVisitedFocusTest', () => {
/** @type {!MostVisitedElement} */ /** @type {!MostVisitedElement} */
let mostVisited; let mostVisited;
/** @type {TestProxy} */ /**
* @implements {BrowserProxy}
* @extends {TestBrowserProxy}
*/
let testProxy; let testProxy;
/** /**
...@@ -62,7 +64,7 @@ suite('NewTabPageMostVisitedFocusTest', () => { ...@@ -62,7 +64,7 @@ suite('NewTabPageMostVisitedFocusTest', () => {
setup(() => { setup(() => {
PolymerTest.clearBody(); PolymerTest.clearBody();
testProxy = new TestProxy(); testProxy = createTestProxy();
BrowserProxy.instance_ = testProxy; BrowserProxy.instance_ = testProxy;
mostVisited = document.createElement('ntp-most-visited'); mostVisited = document.createElement('ntp-most-visited');
......
...@@ -8,14 +8,17 @@ import 'chrome://resources/mojo/mojo/public/mojom/base/text_direction.mojom-lite ...@@ -8,14 +8,17 @@ import 'chrome://resources/mojo/mojo/public/mojom/base/text_direction.mojom-lite
import {BrowserProxy} from 'chrome://new-tab-page/browser_proxy.js'; import {BrowserProxy} from 'chrome://new-tab-page/browser_proxy.js';
import {isMac} from 'chrome://resources/js/cr.m.js'; import {isMac} from 'chrome://resources/js/cr.m.js';
import {assertStyle, keydown, TestProxy} from 'chrome://test/new_tab_page/test_support.js'; import {assertStyle, createTestProxy, keydown} from 'chrome://test/new_tab_page/test_support.js';
import {eventToPromise, flushTasks} from 'chrome://test/test_util.m.js'; import {eventToPromise, flushTasks} from 'chrome://test/test_util.m.js';
suite('NewTabPageMostVisitedTest', () => { suite('NewTabPageMostVisitedTest', () => {
/** @type {!MostVisitedElement} */ /** @type {!MostVisitedElement} */
let mostVisited; let mostVisited;
/** @type {TestProxy} */ /**
* @implements {BrowserProxy}
* @extends {TestBrowserProxy}
*/
let testProxy; let testProxy;
/** /**
...@@ -64,7 +67,13 @@ suite('NewTabPageMostVisitedTest', () => { ...@@ -64,7 +67,13 @@ suite('NewTabPageMostVisitedTest', () => {
setup(() => { setup(() => {
PolymerTest.clearBody(); PolymerTest.clearBody();
testProxy = new TestProxy(); testProxy = createTestProxy();
testProxy.handler.setResultFor('addMostVisitedTile', Promise.resolve({
success: true,
}));
testProxy.handler.setResultFor('updateMostVisitedTile', Promise.resolve({
success: true,
}));
BrowserProxy.instance_ = testProxy; BrowserProxy.instance_ = testProxy;
mostVisited = document.createElement('ntp-most-visited'); mostVisited = document.createElement('ntp-most-visited');
......
...@@ -13,136 +13,6 @@ import {getDeepActiveElement} from 'chrome://resources/js/util.m.js'; ...@@ -13,136 +13,6 @@ import {getDeepActiveElement} from 'chrome://resources/js/util.m.js';
import {keyDownOn} from 'chrome://resources/polymer/v3_0/iron-test-helpers/mock-interactions.js'; import {keyDownOn} from 'chrome://resources/polymer/v3_0/iron-test-helpers/mock-interactions.js';
import {TestBrowserProxy} from 'chrome://test/test_browser_proxy.m.js'; import {TestBrowserProxy} from 'chrome://test/test_browser_proxy.m.js';
/** @implements {BrowserProxy} */
export class TestProxy extends TestBrowserProxy {
constructor() {
super([
'navigate',
'setTimeout',
'clearTimeout',
]);
/** @type {newTabPage.mojom.PageCallbackRouter} */
this.callbackRouter = new newTabPage.mojom.PageCallbackRouter();
/** @type {!newTabPage.mojom.PageRemote} */
this.callbackRouterRemote =
this.callbackRouter.$.bindNewPipeAndPassRemote();
/** @type {newTabPage.mojom.PageHandlerInterface} */
this.handler = new FakePageHandler();
}
/** @override */
navigate(href) {
this.methodCalled('navigate', [href]);
}
/** @override */
setTimeout(callback, duration) {
this.methodCalled('setTimeout', [callback, duration]);
return 0;
}
/** @override */
clearTimeout(id) {
this.methodCalled('clearTimeout', [id]);
}
}
/** @implements {newTabPage.mojom.PageHandlerInterface} */
class FakePageHandler extends TestBrowserProxy {
/** @param {newTabPage.mojom.PageInterface} */
constructor() {
super([
'addMostVisitedTile',
'deleteMostVisitedTile',
'reorderMostVisitedTile',
'restoreMostVisitedDefaults',
'setMostVisitedSettings',
'undoMostVisitedTileAction',
'updateMostVisitedInfo',
'updateMostVisitedTile',
'getChromeThemes',
'applyDefaultTheme',
'applyAutogeneratedTheme',
'applyChromeTheme',
'confirmThemeChanges',
]);
}
/** @override */
addMostVisitedTile(url, title) {
this.methodCalled('addMostVisitedTile', [url, title]);
return {success: true};
}
/** @override */
deleteMostVisitedTile(url) {
this.methodCalled('deleteMostVisitedTile', url);
return {success: true};
}
/** @override */
reorderMostVisitedTile(url, newPos) {
this.methodCalled('reorderMostVisitedTile', [url, newPos]);
}
/** @override */
restoreMostVisitedDefaults() {
this.methodCalled('restoreMostVisitedDefaults');
}
/** @override */
setMostVisitedSettings(customLinksEnabled, visible) {
this.methodCalled('setMostVisitedSettings', [customLinksEnabled, visible]);
}
/** @override */
undoMostVisitedTileAction() {
this.methodCalled('undoMostVisitedTileAction');
}
/** @override */
updateMostVisitedInfo() {
this.methodCalled('updateMostVisitedInfo');
}
/** @override */
updateMostVisitedTile(url, newUrl, newTitle) {
this.methodCalled('updateMostVisitedTile', [url, newUrl, newTitle]);
return {success: true};
}
/** @override */
getChromeThemes() {
this.methodCalled('getChromeThemes');
return this.getResultFor('getChromeThemes', Promise.resolve({
chromeThemes: [],
}));
}
/** @override */
applyDefaultTheme() {
this.methodCalled('applyDefaultTheme');
}
/** @override */
applyAutogeneratedTheme(frameColor) {
this.methodCalled('applyAutogeneratedTheme', frameColor);
}
/** @override */
applyChromeTheme(id) {
this.methodCalled('applyChromeTheme', id);
}
/** @override */
confirmThemeChanges() {
this.methodCalled('confirmThemeChanges');
}
}
/** /**
* @param {!HTMLElement} element * @param {!HTMLElement} element
* @param {string} key * @param {string} key
...@@ -179,3 +49,38 @@ export function assertStyle(element, name, expected) { ...@@ -179,3 +49,38 @@ export function assertStyle(element, name, expected) {
export function assertFocus(element) { export function assertFocus(element) {
assertEquals(element, getDeepActiveElement()); assertEquals(element, getDeepActiveElement());
} }
/**
* Creates a |TestBrowserProxy|, which has mock functions for all functions of
* class |clazz|.
* @param {Class} clazz
* @return {TestBrowserProxy}
*/
export function mock(clazz) {
const props = Object.getOwnPropertyNames(clazz.prototype);
const mockBrowserProxy = new TestBrowserProxy(props);
for (const prop of props) {
if (prop == 'constructor') {
continue;
}
mockBrowserProxy[prop] = function() {
const args = arguments.length == 1 ? arguments[0] : Array.from(arguments);
mockBrowserProxy.methodCalled(prop, args);
return mockBrowserProxy.getResultFor(prop, undefined);
};
}
return mockBrowserProxy;
}
/**
* Creates a mocked test proxy.
* @return {TestBrowserProxy}
*/
export function createTestProxy() {
const testProxy = mock(BrowserProxy);
testProxy.callbackRouter = new newTabPage.mojom.PageCallbackRouter();
testProxy.callbackRouterRemote =
testProxy.callbackRouter.$.bindNewPipeAndPassRemote();
testProxy.handler = mock(newTabPage.mojom.PageHandlerRemote);
return testProxy;
}
...@@ -7,7 +7,7 @@ import 'chrome://new-tab-page/voice_search_overlay.js'; ...@@ -7,7 +7,7 @@ import 'chrome://new-tab-page/voice_search_overlay.js';
import {BrowserProxy} from 'chrome://new-tab-page/browser_proxy.js'; import {BrowserProxy} from 'chrome://new-tab-page/browser_proxy.js';
import {loadTimeData} from 'chrome://resources/js/load_time_data.m.js'; import {loadTimeData} from 'chrome://resources/js/load_time_data.m.js';
import {flushTasks} from 'chrome://test/test_util.m.js'; import {flushTasks} from 'chrome://test/test_util.m.js';
import {isVisible, TestProxy} from './test_support.js'; import {createTestProxy, isVisible} from './test_support.js';
class MockSpeechRecognition { class MockSpeechRecognition {
constructor() { constructor() {
...@@ -32,7 +32,10 @@ suite('NewTabPageVoiceSearchOverlayTest', () => { ...@@ -32,7 +32,10 @@ suite('NewTabPageVoiceSearchOverlayTest', () => {
/** @type {!VoiceSearchOverlayElement} */ /** @type {!VoiceSearchOverlayElement} */
let voiceSearchOverlay; let voiceSearchOverlay;
/** @type {TestProxy} */ /**
* @implements {BrowserProxy}
* @extends {TestBrowserProxy}
*/
let testProxy; let testProxy;
setup(async () => { setup(async () => {
...@@ -40,7 +43,8 @@ suite('NewTabPageVoiceSearchOverlayTest', () => { ...@@ -40,7 +43,8 @@ suite('NewTabPageVoiceSearchOverlayTest', () => {
window.webkitSpeechRecognition = MockSpeechRecognition; window.webkitSpeechRecognition = MockSpeechRecognition;
testProxy = new TestProxy(); testProxy = createTestProxy();
testProxy.setResultFor('setTimeout', 0);
BrowserProxy.instance_ = testProxy; BrowserProxy.instance_ = testProxy;
voiceSearchOverlay = document.createElement('ntp-voice-search-overlay'); voiceSearchOverlay = document.createElement('ntp-voice-search-overlay');
...@@ -125,7 +129,7 @@ suite('NewTabPageVoiceSearchOverlayTest', () => { ...@@ -125,7 +129,7 @@ suite('NewTabPageVoiceSearchOverlayTest', () => {
}); });
// Assert. // Assert.
const [href] = await testProxy.whenCalled('navigate'); const href = await testProxy.whenCalled('navigate');
assertEquals(href, `${googleBaseUrl}/search?q=hello+world&gs_ivs=1`); assertEquals(href, `${googleBaseUrl}/search?q=hello+world&gs_ivs=1`);
}); });
......
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