Skip to content

Commit

Permalink
[Emoji picker tests TS migration 18/18] Create common init function.
Browse files Browse the repository at this point in the history
Almost every test used the same patterns to initialise the emoji picker.

Unify them all into one place for simplicity

Bug: b:270220102
Change-Id: I57be1a507bad0acfb197ba4dd2cb5bd3b43ae87f
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/4289337
Reviewed-by: Zac Partridge <zacpartridge@google.com>
Commit-Queue: John Palmer <jopalmer@chromium.org>
Cr-Commit-Position: refs/heads/main@{#1119701}
  • Loading branch information
John Palmer authored and Chromium LUCI CQ committed Mar 21, 2023
1 parent 2107220 commit ffd28e7
Show file tree
Hide file tree
Showing 10 changed files with 259 additions and 515 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -2,16 +2,13 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

import {EmojiGroupComponent} from 'chrome://emoji-picker/emoji_group.js';
import {EmojiPicker} from 'chrome://emoji-picker/emoji_picker.js';
import {EmojiPickerApiProxyImpl} from 'chrome://emoji-picker/emoji_picker_api_proxy.js';
import {EMOJI_PICKER_READY, EMOJI_TEXT_BUTTON_CLICK} from 'chrome://emoji-picker/events.js';
import {assert} from 'chrome://resources/js/assert_ts.js';
import {EMOJI_TEXT_BUTTON_CLICK} from 'chrome://emoji-picker/events.js';
import {CrIconButtonElement} from 'chrome://resources/cr_elements/cr_icon_button/cr_icon_button.js';
import {assert} from 'chrome://resources/js/assert_ts.js';
import {flush} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js';
import {assertEquals, assertFalse, assertGT, assertTrue} from 'chrome://webui-test/chai_assert.js';

import {deepQuerySelector, waitForCondition, waitWithTimeout} from './emoji_picker_test_util.js';
import {initialiseEmojiPickerForTest, waitForCondition, waitWithTimeout} from './emoji_picker_test_util.js';

const ACTIVE_CATEGORY_BUTTON = 'category-button-active';

Expand All @@ -33,52 +30,14 @@ const CATEGORY_LIST = ['emoji', 'symbol', 'emoticon'];

export function categoryTestSuite(category: string) {
suite(`emoji-picker-extension-${category}`, () => {
let emojiPicker: EmojiPicker;
let findInEmojiPicker: (...selectors: string[]) => HTMLElement | null;
let findEmojiFirstButton: (...selectors: string[]) =>
HTMLElement | null | undefined;
let categoryIndex: number;
const {emojiPicker, findInEmojiPicker, findEmojiFirstButton, readyPromise} =
initialiseEmojiPickerForTest();

setup(() => {
// Reset DOM state.
document.body.innerHTML = '';
window.localStorage.clear();

// Set default incognito state to False.
EmojiPickerApiProxyImpl.getInstance().isIncognitoTextField = () =>
new Promise((resolve) => resolve({incognito: false}));
EmojiPicker.configs = () => ({
dataUrls: {
emoji: [
'/emoji_test_ordering_start.json',
'/emoji_test_ordering_remaining.json',
],
emoticon: ['/emoticon_test_ordering.json'],
symbol: ['/symbol_test_ordering.json'],
gif: [],
},
});

emojiPicker = document.createElement('emoji-picker');

findInEmojiPicker = (...path) => deepQuerySelector(emojiPicker, path);

findEmojiFirstButton = (...path) => {
return (deepQuerySelector(emojiPicker, path) as EmojiGroupComponent |
null)
?.firstEmojiButton();
};
setup(async () => {
await readyPromise;

categoryIndex = CATEGORY_LIST.indexOf(category);

// Wait until emoji data is loaded before executing tests.
return new Promise<void>((resolve) => {
emojiPicker.addEventListener(EMOJI_PICKER_READY, () => {
flush();
resolve();
});
document.body.appendChild(emojiPicker);
});
});

test(category + ' category button is initialized correctly', () => {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,16 +3,15 @@
// found in the LICENSE file.

import {TRENDING_GROUP_ID} from 'chrome://emoji-picker/constants.js';
import {EmojiGroupComponent} from 'chrome://emoji-picker/emoji_group.js';
import {EmojiPicker} from 'chrome://emoji-picker/emoji_picker.js';
import {EmojiPickerApiProxyImpl} from 'chrome://emoji-picker/emoji_picker_api_proxy.js';
import {EMOJI_IMG_BUTTON_CLICK, EMOJI_PICKER_READY} from 'chrome://emoji-picker/events.js';
import {assert} from 'chrome://resources/js/assert_ts.js';
import {EMOJI_IMG_BUTTON_CLICK} from 'chrome://emoji-picker/events.js';
import {CrIconButtonElement} from 'chrome://resources/cr_elements/cr_icon_button/cr_icon_button.js';
import {assert} from 'chrome://resources/js/assert_ts.js';
import {flush} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js';
import {assertEquals, assertFalse, assertTrue} from 'chrome://webui-test/chai_assert.js';

import {deepQuerySelector, isGroupButtonActive, timeout, waitForCondition, waitWithTimeout} from './emoji_picker_test_util.js';
import {initialiseEmojiPickerForTest, isGroupButtonActive, timeout, waitForCondition, waitWithTimeout} from './emoji_picker_test_util.js';
import {TestEmojiPickerApiProxyImpl} from './test_emoji_picker_api_proxy.js';

const ACTIVE_CATEGORY_BUTTON = 'category-button-active';
Expand All @@ -39,76 +38,25 @@ function subcategoryGroupSelector(category: string, subcategory: string) {

export function gifTestSuite(category: string) {
suite(`emoji-picker-extension-${category}`, () => {
EmojiPickerApiProxyImpl.setInstance(new TestEmojiPickerApiProxyImpl());
let emojiPicker: EmojiPicker;
let findInEmojiPicker: (...selectors: string[]) => HTMLElement | null;
let findEmojiFirstButton: (selector: string) =>
HTMLElement | undefined | null;
let findInEmojiPicker: (...path: string[]) => HTMLElement | null;
let findEmojiFirstButton: (...path: string[]) =>
HTMLElement | null | undefined;
let scrollDown: (height: number) => void;
let scrollToBottom: () => void;
let categoryIndex: number;

setup(() => {
// Reset DOM state.
document.body.innerHTML = '';
window.localStorage.clear();

EmojiPickerApiProxyImpl.setInstance(new TestEmojiPickerApiProxyImpl());

// Set default incognito state to False.
EmojiPickerApiProxyImpl.getInstance().isIncognitoTextField = () =>
new Promise((resolve) => resolve({incognito: false}));
EmojiPicker.configs = () => ({
dataUrls: {
emoji: [
'/emoji_test_ordering_start.json',
'/emoji_test_ordering_remaining.json',
],
emoticon: ['/emoticon_test_ordering.json'],
symbol: ['/symbol_test_ordering.json'],
gif: [],
},
});

emojiPicker = document.createElement('emoji-picker');

findInEmojiPicker = (...path) => deepQuerySelector(emojiPicker, path);

findEmojiFirstButton = (...path) => {
return (deepQuerySelector(emojiPicker, path) as EmojiGroupComponent |
null)
?.firstEmojiButton();
};

scrollDown = (height) => {
const thisRect = emojiPicker.$['groups'];
if (thisRect) {
thisRect.scrollTop += height;
}
};

scrollToBottom = () => {
const thisRect = emojiPicker.$['groups'];
if (!thisRect) {
return;
}
const searchResultRect =
emojiPicker.getActiveGroupAndId(thisRect.getBoundingClientRect())
.group;
if (searchResultRect) {
thisRect.scrollTop += searchResultRect.getBoundingClientRect().bottom;
}
};
setup(async () => {
const newPicker = initialiseEmojiPickerForTest();
emojiPicker = newPicker.emojiPicker;
findInEmojiPicker = newPicker.findInEmojiPicker;
findEmojiFirstButton = newPicker.findEmojiFirstButton;
scrollDown = newPicker.scrollDown;
scrollToBottom = newPicker.scrollToBottom;
await newPicker.readyPromise;

categoryIndex = CATEGORY_LIST.indexOf(category);

// Wait until emoji data is loaded before executing tests.
return new Promise<void>((resolve) => {
emojiPicker.addEventListener(EMOJI_PICKER_READY, () => {
flush();
resolve();
});
document.body.appendChild(emojiPicker);
});
});

test(category + ' category button is initialized correctly', () => {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,14 +5,12 @@
import 'chrome://emoji-picker/emoji_search.js';

import {EmojiPicker} from 'chrome://emoji-picker/emoji_picker.js';
import {EmojiPickerApiProxyImpl} from 'chrome://emoji-picker/emoji_picker_api_proxy.js';
import {EmojiSearch} from 'chrome://emoji-picker/emoji_search.js';
import {EMOJI_PICKER_READY} from 'chrome://emoji-picker/events.js';
import {assert} from 'chrome://resources/js/assert_ts.js';
import {flush} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js';
import {assertEquals, assertFalse} from 'chrome://webui-test/chai_assert.js';

import {completePendingMicrotasks, deepQuerySelector, isGroupButtonActive, timeout, waitForCondition} from './emoji_picker_test_util.js';
import {completePendingMicrotasks, initialiseEmojiPickerForTest, isGroupButtonActive, timeout, waitForCondition} from './emoji_picker_test_util.js';

const ACTIVE_CATEGORY_BUTTON = 'category-button-active';

Expand All @@ -23,40 +21,13 @@ function isCategoryButtonActive(element: HTMLElement|null|undefined) {

suite('emoji-picker-extension', () => {
let emojiPicker: EmojiPicker;
let findInEmojiPicker: (...selectors: string[]) => HTMLElement | null;

setup(() => {
// Reset DOM state.
document.body.innerHTML = '';
window.localStorage.clear();

// Set default incognito state to False.
EmojiPickerApiProxyImpl.getInstance().isIncognitoTextField = () =>
new Promise((resolve) => resolve({incognito: false}));
EmojiPicker.configs = () => ({
dataUrls: {
emoji: [
'/emoji_test_ordering_start.json',
'/emoji_test_ordering_remaining.json',
],
emoticon: ['/emoticon_test_ordering.json'],
symbol: ['/symbol_test_ordering.json'],
gif: [],
},
});

emojiPicker = document.createElement('emoji-picker');

findInEmojiPicker = (...path) => deepQuerySelector(emojiPicker, path);

// Wait until emoji data is loaded before executing tests.
return new Promise<void>((resolve) => {
emojiPicker.addEventListener(EMOJI_PICKER_READY, () => {
flush();
resolve();
});
document.body.appendChild(emojiPicker);
});
let findInEmojiPicker: (...path: string[]) => HTMLElement | null;

setup(async () => {
const newPicker = initialiseEmojiPickerForTest();
emojiPicker = newPicker.emojiPicker;
findInEmojiPicker = newPicker.findInEmojiPicker;
await newPicker.readyPromise;
});

test(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,15 +3,13 @@
// found in the LICENSE file.

import {TRENDING_GROUP_ID} from 'chrome://emoji-picker/constants.js';
import {EmojiPicker} from 'chrome://emoji-picker/emoji_picker.js';
import {EmojiPickerApiProxyImpl} from 'chrome://emoji-picker/emoji_picker_api_proxy.js';
import {EmojiSearch} from 'chrome://emoji-picker/emoji_search.js';
import {EMOJI_PICKER_READY} from 'chrome://emoji-picker/events.js';
import {assert} from 'chrome://resources/js/assert_ts.js';
import {flush} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js';
import {assertEquals} from 'chrome://webui-test/chai_assert.js';

import {deepQuerySelector, waitForCondition} from './emoji_picker_test_util.js';
import {initialiseEmojiPickerForTest, waitForCondition} from './emoji_picker_test_util.js';
import {TestEmojiPickerApiProxyErrorImpl} from './test_emoji_picker_offline_api_proxy.js';

const CATEGORY_LIST = ['emoji', 'symbol', 'emoticon', 'gif'];
Expand All @@ -21,52 +19,18 @@ function subcategoryGroupSelector(category: string, subcategory: string) {
}

suite('emoji-picker-offline-gif', () => {
let emojiPicker: EmojiPicker;
let findInEmojiPicker: (...selectors: string[]) => HTMLElement | null;
const testEmojiPickerApiProxy = new TestEmojiPickerApiProxyErrorImpl();
EmojiPickerApiProxyImpl.setInstance(testEmojiPickerApiProxy);
testEmojiPickerApiProxy.setHttpError();
const {emojiPicker, findInEmojiPicker, readyPromise} =
initialiseEmojiPickerForTest();
let emojiSearch: EmojiSearch;
let categoryIndex: number;

setup(() => {
// Reset DOM state.
document.body.innerHTML = '';
window.localStorage.clear();

EmojiPickerApiProxyImpl.setInstance(new TestEmojiPickerApiProxyErrorImpl());

// Set default incognito state to False.
EmojiPickerApiProxyImpl.getInstance().isIncognitoTextField = () =>
new Promise((resolve) => resolve({incognito: false}));

(EmojiPickerApiProxyImpl.getInstance() as TestEmojiPickerApiProxyErrorImpl)
.setHttpError();

EmojiPicker.configs = () => ({
dataUrls: {
emoji: [
'/emoji_test_ordering_start.json',
'/emoji_test_ordering_remaining.json',
],
emoticon: ['/emoticon_test_ordering.json'],
symbol: ['/symbol_test_ordering.json'],
gif: [],
},
});

emojiPicker = document.createElement('emoji-picker');

findInEmojiPicker = (...path) => deepQuerySelector(emojiPicker, path);

setup(async () => {
await readyPromise;
emojiSearch = findInEmojiPicker('emoji-search') as EmojiSearch;
categoryIndex = CATEGORY_LIST.indexOf('gif');

// Wait until emoji data is loaded before executing tests.
return new Promise<void>((resolve) => {
emojiPicker.addEventListener(EMOJI_PICKER_READY, () => {
flush();
resolve();
});
document.body.appendChild(emojiPicker);
emojiSearch = findInEmojiPicker('emoji-search') as EmojiSearch;
});
});

test('There is no trending GIFs.', async () => {
Expand Down

0 comments on commit ffd28e7

Please sign in to comment.