import { jest } from '@jest/globals';
import { BaseEvalElement } from '../../src/components/base';
customElements.define('py-base', BaseEvalElement);
describe('BaseEvalElement', () => {
let instance: BaseEvalElement;
beforeEach(() => {
instance = new BaseEvalElement();
});
it('BaseEvalElement instantiates correctly', async () => {
expect(instance).toBeInstanceOf(BaseEvalElement);
});
it('addToOutput sets outputElements property correctly', async () => {
instance.outputElement = document.createElement('body');
instance.addToOutput('Hello, world!');
expect(instance.outputElement.innerHTML).toBe('
Hello, world!
');
expect(instance.outputElement.hidden).toBe(false);
instance.addToOutput('Have a good day!');
expect(instance.outputElement.innerHTML).toBe('Hello, world!
Have a good day!
');
});
it('setOutputMode updates appendOutput property correctly', async () => {
// Confirm that the default mode is 'append'
expect(instance.appendOutput).toBe(true);
instance.setAttribute('output-mode', 'replace');
instance.setOutputMode();
expect(instance.appendOutput).toBe(false);
// Using a custom output-mode shouldn't update mode
instance.setAttribute('output-mode', 'custom');
instance.setOutputMode();
expect(instance.appendOutput).toBe(false);
});
it('preEvaluate returns null since subclasses should overwrite it', async () => {
const preEvaluateResult = instance.preEvaluate();
expect(preEvaluateResult).toBeNull();
});
it('postEvaluate returns null since subclasses should overwrite it', async () => {
const preEvaluateResult = instance.postEvaluate();
expect(preEvaluateResult).toBeNull();
});
it('checkId generates id if none exists', async () => {
// Test default value
expect(instance.id).toBe('');
instance.checkId();
// expect id is similar to py-78c3e696-a74f-df40-f82c-535f12c484ae
expect(instance.id).toMatch(/py-(\w+-){1,4}\w+/);
});
it('getSourceFromElement returns empty string', async () => {
const returnedGetSourceFromElement = instance.getSourceFromElement();
expect(returnedGetSourceFromElement).toBe('');
});
});