Default to system emoji font (#11925)

* Disable Twemoji emoji font by default

Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>

* Force Twemoji font in SAS Verification

Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>

* Iterate

Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>

* Iterate

Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>

* Add tests

Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>

* Improve tests

Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>

---------

Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
This commit is contained in:
Michael Telatynski 2023-11-23 13:04:05 +00:00 committed by GitHub
parent a6705304aa
commit ee485ffcfd
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
13 changed files with 119 additions and 114 deletions

View file

@ -17,22 +17,26 @@ limitations under the License.
import { Action } from "../../../src/dispatcher/actions";
import dis from "../../../src/dispatcher/dispatcher";
import SystemFontController from "../../../src/settings/controllers/SystemFontController";
import { SettingLevel } from "../../../src/settings/SettingLevel";
import SettingsStore from "../../../src/settings/SettingsStore";
const dispatchSpy = jest.spyOn(dis, "dispatch");
describe("SystemFontController", () => {
it("dispatches a font size action on change", () => {
const getValueSpy = jest.spyOn(SettingsStore, "getValue").mockReturnValue(true);
it("dispatches a system font update action on change", () => {
const controller = new SystemFontController();
controller.onChange(SettingLevel.ACCOUNT, "$room:server", 12);
const getValueSpy = jest.spyOn(SettingsStore, "getValue").mockImplementation((settingName) => {
if (settingName === "useBundledEmojiFont") return false;
if (settingName === "useSystemFont") return true;
if (settingName === "systemFont") return "Comic Sans MS";
});
controller.onChange();
expect(dispatchSpy).toHaveBeenCalledWith({
action: Action.UpdateSystemFont,
useBundledEmojiFont: false,
useSystemFont: true,
font: 12,
font: "Comic Sans MS",
});
expect(getValueSpy).toHaveBeenCalledWith("useSystemFont");

View file

@ -1,40 +0,0 @@
/*
Copyright 2022 The Matrix.org Foundation C.I.C.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
import { Action } from "../../../src/dispatcher/actions";
import dis from "../../../src/dispatcher/dispatcher";
import UseSystemFontController from "../../../src/settings/controllers/UseSystemFontController";
import { SettingLevel } from "../../../src/settings/SettingLevel";
import SettingsStore from "../../../src/settings/SettingsStore";
const dispatchSpy = jest.spyOn(dis, "dispatch");
describe("UseSystemFontController", () => {
it("dispatches a font size action on change", () => {
const getValueSpy = jest.spyOn(SettingsStore, "getValue").mockReturnValue(12);
const controller = new UseSystemFontController();
controller.onChange(SettingLevel.ACCOUNT, "$room:server", true);
expect(dispatchSpy).toHaveBeenCalledWith({
action: Action.UpdateSystemFont,
useSystemFont: true,
font: 12,
});
expect(getValueSpy).toHaveBeenCalledWith("systemFont");
});
});

View file

@ -24,9 +24,15 @@ import { Action } from "../../../src/dispatcher/actions";
import { untilDispatch } from "../../test-utils";
import defaultDispatcher from "../../../src/dispatcher/dispatcher";
async function setSystemFont(font: string): Promise<void> {
async function setSystemFont(font: string | false): Promise<void> {
await SettingsStore.setValue("systemFont", null, SettingLevel.DEVICE, font || "");
await SettingsStore.setValue("useSystemFont", null, SettingLevel.DEVICE, !!font);
await SettingsStore.setValue("systemFont", null, SettingLevel.DEVICE, font);
await untilDispatch(Action.UpdateSystemFont);
await sleep(1); // await the FontWatcher doing its action
}
async function setUseBundledEmojiFont(use: boolean): Promise<void> {
await SettingsStore.setValue("useBundledEmojiFont", null, SettingLevel.DEVICE, use);
await untilDispatch(Action.UpdateSystemFont);
await sleep(1); // await the FontWatcher doing its action
}
@ -34,6 +40,9 @@ async function setSystemFont(font: string): Promise<void> {
const getFontFamily = () => {
return document.body.style.getPropertyValue(FontWatcher.FONT_FAMILY_CUSTOM_PROPERTY);
};
const getEmojiFontFamily = () => {
return document.body.style.getPropertyValue(FontWatcher.EMOJI_FONT_FAMILY_CUSTOM_PROPERTY);
};
describe("FontWatcher", function () {
it("should load font on start()", async () => {
@ -85,6 +94,31 @@ describe("FontWatcher", function () {
});
});
describe("Sets bundled emoji font as expected", () => {
let fontWatcher: FontWatcher;
beforeEach(async () => {
await setSystemFont(false);
fontWatcher = new FontWatcher();
await fontWatcher.start();
});
afterEach(() => {
fontWatcher.stop();
});
it("by default does not add Twemoji font", async () => {
expect(getEmojiFontFamily()).toMatchInlineSnapshot(`""`);
});
it("adds Twemoji font when enabled", async () => {
await setUseBundledEmojiFont(true);
expect(getEmojiFontFamily()).toMatchInlineSnapshot(`"Twemoji"`);
});
it("works in conjunction with useSystemFont", async () => {
await setSystemFont(`"Commodore 64"`);
await setUseBundledEmojiFont(true);
expect(getFontFamily()).toMatchInlineSnapshot(`""Commodore 64", Twemoji"`);
});
});
describe("Migrates baseFontSize", () => {
let watcher: FontWatcher | undefined;