// Copyright 2024 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
import {assertEquals, assertNotEquals} from 'chrome://webui-test/chai_assert.js';
import {TestMock} from 'chrome://webui-test/test_mock.js';
type Constructor<T> = new (...args: any[]) => T;
type Installer<T> = (instance: T) => void;
export function installMock<T extends object>(clazz: Constructor<T>):
TestMock<T> {
const installer =
(clazz as unknown as {setInstance: Installer<T>}).setInstance;
const mock = TestMock.fromClass(clazz);
installer!(mock);
return mock;
}
/**
* Asserts the computed style value for an element.
* @param name The name of the style to assert.
* @param expected The expected style value.
*/
export function assertStyle(element: Element, name: string, expected: string) {
const actual = window.getComputedStyle(element).getPropertyValue(name).trim();
assertEquals(expected, actual);
}
/**
* Asserts the computed style for an element is not value.
* @param name The name of the style to assert.
* @param not The value the style should not be.
*/
export function assertNotStyle(element: Element, name: string, not: string) {
const actual = window.getComputedStyle(element).getPropertyValue(name).trim();
assertNotEquals(not, actual);
}
/**
* Queries |selector| on |element|'s shadow root and returns the resulting
* element if there is any.
*/
export function $$<E extends Element = Element>(
element: Element, selector: string): E|null;
export function $$(element: Element, selector: string) {
return element.shadowRoot!.querySelector(selector);
}