참고소스 수정본

This commit is contained in:
LASTA_DEV01\lasta
2026-05-12 19:40:31 +09:00
parent 0f34a451fc
commit 2e9204243d
8708 changed files with 3259488 additions and 869 deletions

View File

@@ -0,0 +1,26 @@
// @ts-check
const { test, expect } = require('@playwright/test');
test.beforeEach(async ({ page }) => {
await page.addInitScript(() => {
const mockBattery = {
level: 0.90,
charging: true,
chargingTime: 1800, // seconds
dischargingTime: Infinity,
addEventListener: () => { }
};
// application tries navigator.battery first
// so we delete this method
delete window.navigator.battery;
// Override the method to always return mock battery info.
window.navigator.getBattery = async () => mockBattery;
});
});
test('show battery status', async ({ page }) => {
await page.goto('/');
await expect(page.locator('.battery-percentage')).toHaveText('90%');
await expect(page.locator('.battery-status')).toHaveText('Adapter');
await expect(page.locator('.battery-fully')).toHaveText('00:30');
})

View File

@@ -0,0 +1,81 @@
// @ts-check
const { test, expect } = require('@playwright/test');
let log = [];
test.beforeEach(async ({page}) => {
log = [];
// Expose function for pushing messages to the Node.js script.
await page.exposeFunction('logCall', msg => log.push(msg));
await page.addInitScript(() => {
// for these tests, return the same mock battery status
class BatteryMock {
level = 0.10;
charging = false;
chargingTime = 1800;
dischargingTime = Infinity;
_chargingListeners = [];
_levelListeners = [];
addEventListener(eventName, listener) {
logCall(`addEventListener:${eventName}`);
if (eventName === 'chargingchange')
this._chargingListeners.push(listener);
if (eventName === 'levelchange')
this._levelListeners.push(listener);
}
_setLevel(value) {
this.level = value;
this._levelListeners.forEach(cb => cb());
}
_setCharging(value) {
this.charging = value;
this._chargingListeners.forEach(cb => cb());
}
};
const mockBattery = new BatteryMock();
// Override the method to always return mock battery info.
window.navigator.getBattery = async () => {
logCall('getBattery');
return mockBattery;
};
// Save the mock object on window for easier access.
window.mockBattery = mockBattery;
// application tries navigator.battery first
// so we delete this method
delete window.navigator.battery;
});
});
test('should update UI when battery status changes', async ({ page }) => {
await page.goto('/');
await expect(page.locator('.battery-percentage')).toHaveText('10%');
// Update level to 27.5%
await page.evaluate(() => window.mockBattery._setLevel(0.275));
await expect(page.locator('.battery-percentage')).toHaveText('27.5%');
await expect(page.locator('.battery-status')).toHaveText('Battery');
// Emulate connected adapter
await page.evaluate(() => window.mockBattery._setCharging(true));
await expect(page.locator('.battery-status')).toHaveText('Adapter');
await expect(page.locator('.battery-fully')).toHaveText('00:30');
});
test('verify API calls', async ({ page }) => {
await page.goto('/');
await expect(page.locator('.battery-percentage')).toHaveText('10%');
// Ensure expected method calls were made.
expect(log).toEqual([
'getBattery',
'addEventListener:chargingchange',
'addEventListener:levelchange'
]);
log = []; // reset the log
await page.evaluate(() => window.mockBattery._setLevel(0.275));
expect(log).toEqual([]); // getBattery is not called, cached version is used.
});

View File

@@ -0,0 +1,39 @@
// @ts-check
const { test, expect } = require('@playwright/test');
let log = [];
test.beforeEach(async ({page}) => {
log = [];
// Expose function for pushing messages to the Node.js script.
await page.exposeFunction('logCall', msg => log.push(msg));
await page.addInitScript(() => {
const mockBattery = {
level: 0.75,
charging: true,
chargingTime: 1800, // seconds
dischargingTime: Infinity,
addEventListener: (name, cb) => logCall(`addEventListener:${name}`)
};
// Override the method to always return mock battery info.
window.navigator.getBattery = async () => {
logCall('getBattery');
return mockBattery;
};
// application tries navigator.battery first
// so we delete this method
delete window.navigator.battery;
});
})
test('verify battery calls', async ({ page }) => {
await page.goto('/');
await expect(page.locator('.battery-percentage')).toHaveText('75%');
// Ensure expected method calls were made.
expect(log).toEqual([
'getBattery',
'addEventListener:chargingchange',
'addEventListener:levelchange'
]);
});