export default class RegressionTesting extends HTMLElement {
constructor() {
super();
this.regressions = [];
this.isRunning = false;
}
connectedCallback() {
this.render();
this.setupEventListeners();
}
render() {
this.innerHTML = `
Visual Regression Testing
Detect visual changes in design system components
`;
}
setupEventListeners() {
this.querySelector('#run-tests-btn').addEventListener('click', () => this.runTests());
}
async runTests() {
this.isRunning = true;
this.querySelector('#progress-container').style.display = 'block';
this.querySelector('#results-container').style.display = 'none';
const components = ['Buttons', 'Inputs', 'Cards', 'Modals'];
this.regressions = [];
for (let i = 0; i < components.length; i++) {
this.querySelector('#progress-count').textContent = (i + 1) + '/4';
this.querySelector('#progress-bar').style.width = ((i + 1) / 4 * 100) + '%';
await new Promise(resolve => setTimeout(resolve, 600));
if (Math.random() > 0.7) {
this.regressions.push({
component: components[i],
severity: Math.random() > 0.5 ? 'critical' : 'minor'
});
}
}
this.renderResults();
this.querySelector('#progress-container').style.display = 'none';
this.querySelector('#results-container').style.display = 'block';
}
renderResults() {
const container = this.querySelector('#results-container');
const passed = 4 - this.regressions.length;
let html = `
${this.regressions.length}
Regressions
`;
if (this.regressions.length === 0) {
html += ``;
} else {
html += `Regressions Found
`;
for (let reg of this.regressions) {
const color = reg.severity === 'critical' ? '#F44336' : '#FF9800';
html += `
${reg.component}
${reg.severity}
`;
}
}
container.innerHTML = html;
}
}
customElements.define('ds-regression-testing', RegressionTesting);