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 @@
import 'chrome://new-tab-page/app.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';
suite('NewTabPageAppTest', () => {
/** @type {!AppElement} */
let app;
/** @type {TestProxy} */
/**
* @implements {BrowserProxy}
* @extends {TestBrowserProxy}
*/
let testProxy;
setup(async () => {
PolymerTest.clearBody();
testProxy = new TestProxy();
testProxy = createTestProxy();
testProxy.handler.setResultFor('getChromeThemes', Promise.resolve({
chromeThemes: [],
}));
BrowserProxy.instance_ = testProxy;
app = document.createElement('ntp-app');
......
......@@ -6,20 +6,28 @@ import 'chrome://new-tab-page/customize_shortcuts.js';
import 'chrome://resources/mojo/mojo/public/js/mojo_bindings_lite.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 {eventToPromise, flushTasks} from 'chrome://test/test_util.m.js';
import {createTestProxy} from 'chrome://test/new_tab_page/test_support.js';
suite('NewTabPageCustomizeShortcutsTest', () => {
/** @type {!CustomizeShortcutsElement} */
let customizeShortcuts;
/** @type {TestProxy} */
/**
* @implements {BrowserProxy}
* @extends {TestBrowserProxy}
*/
let testProxy;
setup(() => {
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;
customizeShortcuts = document.createElement('ntp-customize-shortcuts');
......
......@@ -5,11 +5,14 @@
import 'chrome://new-tab-page/customize_themes.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';
suite('NewTabPageCustomizeThemesTest', () => {
/** @type {TestProxy} */
/**
* @implements {BrowserProxy}
* @extends {TestBrowserProxy}
*/
let testProxy;
/** @return {!CustomizeThemesElement} */
......@@ -30,7 +33,10 @@ suite('NewTabPageCustomizeThemesTest', () => {
setup(() => {
PolymerTest.clearBody();
testProxy = new TestProxy();
testProxy = createTestProxy();
testProxy.handler.setResultFor('getChromeThemes', Promise.resolve({
chromeThemes: [],
}));
BrowserProxy.instance_ = testProxy;
});
......
......@@ -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 {BrowserProxy} from 'chrome://new-tab-page/browser_proxy.js';
import {getDeepActiveElement} from 'chrome://resources/js/util.m.js';
import {assertFocus, keydown, TestProxy} from 'chrome://test/new_tab_page/test_support.js';
import {eventToPromise, flushTasks} from 'chrome://test/test_util.m.js';
import {assertFocus, createTestProxy, keydown} from 'chrome://test/new_tab_page/test_support.js';
import {eventToPromise} from 'chrome://test/test_util.m.js';
suite('NewTabPageMostVisitedFocusTest', () => {
/** @type {!MostVisitedElement} */
let mostVisited;
/** @type {TestProxy} */
/**
* @implements {BrowserProxy}
* @extends {TestBrowserProxy}
*/
let testProxy;
/**
......@@ -62,7 +64,7 @@ suite('NewTabPageMostVisitedFocusTest', () => {
setup(() => {
PolymerTest.clearBody();
testProxy = new TestProxy();
testProxy = createTestProxy();
BrowserProxy.instance_ = testProxy;
mostVisited = document.createElement('ntp-most-visited');
......
......@@ -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 {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';
suite('NewTabPageMostVisitedTest', () => {
/** @type {!MostVisitedElement} */
let mostVisited;
/** @type {TestProxy} */
/**
* @implements {BrowserProxy}
* @extends {TestBrowserProxy}
*/
let testProxy;
/**
......@@ -64,7 +67,13 @@ suite('NewTabPageMostVisitedTest', () => {
setup(() => {
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;
mostVisited = document.createElement('ntp-most-visited');
......
......@@ -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 {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 {string} key
......@@ -179,3 +49,38 @@ export function assertStyle(element, name, expected) {
export function assertFocus(element) {
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';
import {BrowserProxy} from 'chrome://new-tab-page/browser_proxy.js';
import {loadTimeData} from 'chrome://resources/js/load_time_data.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 {
constructor() {
......@@ -32,7 +32,10 @@ suite('NewTabPageVoiceSearchOverlayTest', () => {
/** @type {!VoiceSearchOverlayElement} */
let voiceSearchOverlay;
/** @type {TestProxy} */
/**
* @implements {BrowserProxy}
* @extends {TestBrowserProxy}
*/
let testProxy;
setup(async () => {
......@@ -40,7 +43,8 @@ suite('NewTabPageVoiceSearchOverlayTest', () => {
window.webkitSpeechRecognition = MockSpeechRecognition;
testProxy = new TestProxy();
testProxy = createTestProxy();
testProxy.setResultFor('setTimeout', 0);
BrowserProxy.instance_ = testProxy;
voiceSearchOverlay = document.createElement('ntp-voice-search-overlay');
......@@ -125,7 +129,7 @@ suite('NewTabPageVoiceSearchOverlayTest', () => {
});
// Assert.
const [href] = await testProxy.whenCalled('navigate');
const href = await testProxy.whenCalled('navigate');
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