Skip to content

Commit 0cd01dd

Browse files
committedMay 21, 2025
Updated test logic to directly set input files using buffer data
1 parent b8a8f27 commit 0cd01dd

File tree

8 files changed

+187
-269
lines changed

8 files changed

+187
-269
lines changed
 

‎tests/gui/data/upload.test.js

Lines changed: 8 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,9 @@
1-
import fs from 'fs'
2-
import path from 'path'
3-
41
import { getPage } from '../helper/browser'
52

63
describe('classification', () => {
74
/** @type {Awaited<ReturnType<getPage>>} */
85
let page
6+
let buf
97
beforeEach(async () => {
108
page = await getPage()
119

@@ -27,24 +25,22 @@ describe('classification', () => {
2725
return canvas.toDataURL()
2826
})
2927
const data = dataURL.replace(/^data:image\/\w+;base64,/, '')
30-
const buf = Buffer.from(data, 'base64')
31-
await fs.promises.writeFile('image_upload.png', buf)
28+
buf = Buffer.from(data, 'base64')
3229
})
3330

3431
afterEach(async () => {
35-
await fs.promises.unlink('image_upload.png')
3632
await page?.close()
3733
})
3834

3935
test('initialize', async () => {
40-
const dataSelectBox = await page.waitForSelector('#ml_selector dl:first-child dd:nth-child(2) select')
36+
const dataSelectBox = page.locator('#ml_selector dl:first-child dd:nth-child(2) select')
4137
await dataSelectBox.selectOption('upload')
4238

43-
const uploadFileInput = await page.waitForSelector('#ml_selector #data_menu input[type=file]')
44-
await uploadFileInput.setInputFiles(path.resolve('image_upload.png'))
39+
const uploadFileInput = page.locator('#ml_selector #data_menu input[type=file]')
40+
await uploadFileInput.setInputFiles({ name: 'image_upload.png', mimeType: 'image/png', buffer: buf })
4541

46-
const svg = await page.waitForSelector('#plot-area svg')
47-
await svg.waitForSelector('.points .datas circle')
48-
expect((await svg.$$('.points .datas circle')).length).toBe(1)
42+
const svg = page.locator('#plot-area svg')
43+
await svg.locator('.points .datas circle').waitFor()
44+
await expect(svg.locator('.points .datas circle').count()).resolves.toBe(1)
4945
})
5046
})
Lines changed: 28 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,3 @@
1-
import fs from 'fs'
2-
import path from 'path'
3-
41
import { getPage } from '../helper/browser'
52

63
describe('segmentation', () => {
@@ -28,55 +25,47 @@ describe('segmentation', () => {
2825
})
2926
const data = dataURL.replace(/^data:image\/\w+;base64,/, '')
3027
const buf = Buffer.from(data, 'base64')
31-
await fs.promises.writeFile('image_adaptive_thresholding.png', buf)
28+
29+
const dataSelectBox = page.locator('#ml_selector dl:first-child dd:nth-child(2) select')
30+
await dataSelectBox.selectOption('upload')
31+
const uploadFileInput = page.locator('#ml_selector #data_menu input[type=file]')
32+
await uploadFileInput.setInputFiles({
33+
name: 'image_adaptive_thresholding.png',
34+
mimeType: 'image/png',
35+
buffer: buf,
36+
})
37+
38+
const taskSelectBox = page.locator('#ml_selector dl:first-child dd:nth-child(5) select')
39+
await taskSelectBox.selectOption('SG')
40+
const modelSelectBox = page.locator('#ml_selector .model_selection #mlDisp')
41+
await modelSelectBox.selectOption('adaptive_thresholding')
3242
})
3343

3444
afterEach(async () => {
35-
await fs.promises.unlink('image_adaptive_thresholding.png')
3645
await page?.close()
3746
})
3847

3948
test('initialize', async () => {
40-
const dataSelectBox = await page.waitForSelector('#ml_selector dl:first-child dd:nth-child(2) select')
41-
await dataSelectBox.selectOption('upload')
42-
43-
const uploadFileInput = await page.waitForSelector('#ml_selector #data_menu input[type=file]')
44-
await uploadFileInput.setInputFiles(path.resolve('image_adaptive_thresholding.png'))
49+
const methodMenu = page.locator('#ml_selector #method_menu')
50+
const buttons = methodMenu.locator('.buttons')
4551

46-
const taskSelectBox = await page.waitForSelector('#ml_selector dl:first-child dd:nth-child(5) select')
47-
await taskSelectBox.selectOption('SG')
48-
const modelSelectBox = await page.waitForSelector('#ml_selector .model_selection #mlDisp')
49-
await modelSelectBox.selectOption('adaptive_thresholding')
50-
const methodMenu = await page.waitForSelector('#ml_selector #method_menu')
51-
const buttons = await methodMenu.waitForSelector('.buttons')
52-
53-
const methods = await buttons.waitForSelector('[name=method]')
54-
await expect((await methods.getProperty('value')).jsonValue()).resolves.toBe('mean')
55-
const k = await buttons.waitForSelector('[name=k]')
56-
await expect((await k.getProperty('value')).jsonValue()).resolves.toBe('3')
57-
const c = await buttons.waitForSelector('[name=c]')
58-
await expect((await c.getProperty('value')).jsonValue()).resolves.toBe('2')
52+
const methods = buttons.locator('[name=method]')
53+
await expect(methods.inputValue()).resolves.toBe('mean')
54+
const k = buttons.locator('[name=k]')
55+
await expect(k.inputValue()).resolves.toBe('3')
56+
const c = buttons.locator('[name=c]')
57+
await expect(c.inputValue()).resolves.toBe('2')
5958
})
6059

6160
test('learn', async () => {
62-
const dataSelectBox = await page.waitForSelector('#ml_selector dl:first-child dd:nth-child(2) select')
63-
await dataSelectBox.selectOption('upload')
64-
65-
const uploadFileInput = await page.waitForSelector('#ml_selector #data_menu input[type=file]')
66-
await uploadFileInput.setInputFiles(path.resolve('image_adaptive_thresholding.png'))
67-
68-
const taskSelectBox = await page.waitForSelector('#ml_selector dl:first-child dd:nth-child(5) select')
69-
await taskSelectBox.selectOption('SG')
70-
const modelSelectBox = await page.waitForSelector('#ml_selector .model_selection #mlDisp')
71-
await modelSelectBox.selectOption('adaptive_thresholding')
72-
const methodMenu = await page.waitForSelector('#ml_selector #method_menu')
73-
const buttons = await methodMenu.waitForSelector('.buttons')
61+
const methodMenu = page.locator('#ml_selector #method_menu')
62+
const buttons = methodMenu.locator('.buttons')
7463

75-
await expect(page.$$('#image-area canvas')).resolves.toHaveLength(1)
64+
await expect(page.locator('#image-area canvas').count()).resolves.toBe(1)
7665

77-
const fitButton = await buttons.waitForSelector('input[value=Fit]')
78-
await fitButton.evaluate(el => el.click())
66+
const fitButton = buttons.locator('input[value=Fit]')
67+
await fitButton.dispatchEvent('click')
7968

80-
await expect(page.$$('#image-area canvas')).resolves.toHaveLength(2)
69+
await expect(page.locator('#image-area canvas').count()).resolves.toBe(2)
8170
})
8271
})
Lines changed: 22 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,3 @@
1-
import fs from 'fs'
2-
import path from 'path'
3-
41
import { getPage } from '../helper/browser'
52

63
describe('segmentation', () => {
@@ -28,52 +25,54 @@ describe('segmentation', () => {
2825
})
2926
const data = dataURL.replace(/^data:image\/\w+;base64,/, '')
3027
const buf = Buffer.from(data, 'base64')
31-
await fs.promises.writeFile('image_automatic_thresholding.png', buf)
3228

33-
const dataSelectBox = await page.waitForSelector('#ml_selector dl:first-child dd:nth-child(2) select')
29+
const dataSelectBox = page.locator('#ml_selector dl:first-child dd:nth-child(2) select')
3430
await dataSelectBox.selectOption('upload')
3531

36-
const uploadFileInput = await page.waitForSelector('#ml_selector #data_menu input[type=file]')
37-
await uploadFileInput.setInputFiles(path.resolve('image_automatic_thresholding.png'))
32+
const uploadFileInput = page.locator('#ml_selector #data_menu input[type=file]')
33+
await uploadFileInput.setInputFiles({
34+
name: 'image_automatic_thresholding.png',
35+
mimeType: 'image/png',
36+
buffer: buf,
37+
})
3838

39-
const taskSelectBox = await page.waitForSelector('#ml_selector dl:first-child dd:nth-child(5) select')
39+
const taskSelectBox = page.locator('#ml_selector dl:first-child dd:nth-child(5) select')
4040
await taskSelectBox.selectOption('SG')
41-
const modelSelectBox = await page.waitForSelector('#ml_selector .model_selection #mlDisp')
41+
const modelSelectBox = page.locator('#ml_selector .model_selection #mlDisp')
4242
await modelSelectBox.selectOption('automatic_thresholding')
4343
})
4444

4545
afterEach(async () => {
46-
await fs.promises.unlink('image_automatic_thresholding.png')
4746
await page?.close()
4847
})
4948

5049
test('initialize', async () => {
51-
const methodMenu = await page.waitForSelector('#ml_selector #method_menu')
52-
const buttons = await methodMenu.waitForSelector('.buttons')
50+
const methodMenu = page.locator('#ml_selector #method_menu')
51+
const buttons = methodMenu.locator('.buttons')
5352

54-
const epoch = await buttons.waitForSelector('[name=epoch]')
53+
const epoch = buttons.locator('[name=epoch]')
5554
await expect(epoch.textContent()).resolves.toBe('0')
5655
})
5756

5857
test('learn', async () => {
59-
const methodMenu = await page.waitForSelector('#ml_selector #method_menu')
60-
const buttons = await methodMenu.waitForSelector('.buttons')
58+
const methodMenu = page.locator('#ml_selector #method_menu')
59+
const buttons = methodMenu.locator('.buttons')
6160

62-
await expect(page.$$('#image-area canvas')).resolves.toHaveLength(1)
61+
await expect(page.locator('#image-area canvas').count()).resolves.toBe(1)
6362

64-
const epoch = await buttons.waitForSelector('[name=epoch]')
63+
const epoch = buttons.locator('[name=epoch]')
6564
await expect(epoch.textContent()).resolves.toBe('0')
66-
const threshold = await buttons.waitForSelector('span:last-child', { state: 'attached' })
65+
const threshold = buttons.locator('span:last-child', { state: 'attached' })
6766
await expect(threshold.textContent()).resolves.toBe('')
6867

69-
const initButton = await buttons.waitForSelector('input[value=Initialize]')
70-
await initButton.evaluate(el => el.click())
71-
const stepButton = await buttons.waitForSelector('input[value=Step]:enabled')
72-
await stepButton.evaluate(el => el.click())
68+
const initButton = buttons.locator('input[value=Initialize]')
69+
await initButton.dispatchEvent('click')
70+
const stepButton = buttons.locator('input[value=Step]:enabled')
71+
await stepButton.dispatchEvent('click')
7372

7473
await expect(epoch.textContent()).resolves.toBe('1')
7574
await expect(threshold.textContent()).resolves.toMatch(/^[0-9.]+$/)
7675

77-
await expect(page.$$('#image-area canvas')).resolves.toHaveLength(2)
76+
await expect(page.locator('#image-area canvas').count()).resolves.toBe(2)
7877
})
7978
})
Lines changed: 28 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,3 @@
1-
import fs from 'fs'
2-
import path from 'path'
3-
41
import { getPage } from '../helper/browser'
52

63
describe('segmentation', () => {
@@ -28,54 +25,47 @@ describe('segmentation', () => {
2825
})
2926
const data = dataURL.replace(/^data:image\/\w+;base64,/, '')
3027
const buf = Buffer.from(data, 'base64')
31-
await fs.promises.writeFile('image_balanced_histogram.png', buf)
32-
})
3328

34-
afterEach(async () => {
35-
await fs.promises.unlink('image_balanced_histogram.png')
36-
await page?.close()
37-
})
38-
39-
test('initialize', async () => {
40-
const dataSelectBox = await page.waitForSelector('#ml_selector dl:first-child dd:nth-child(2) select')
29+
const dataSelectBox = page.locator('#ml_selector dl:first-child dd:nth-child(2) select')
4130
await dataSelectBox.selectOption('upload')
4231

43-
const uploadFileInput = await page.waitForSelector('#ml_selector #data_menu input[type=file]')
44-
await uploadFileInput.setInputFiles(path.resolve('image_balanced_histogram.png'))
32+
const uploadFileInput = page.locator('#ml_selector #data_menu input[type=file]')
33+
await uploadFileInput.setInputFiles({
34+
name: 'image_balanced_histogram.png',
35+
mimeType: 'image/png',
36+
buffer: buf,
37+
})
4538

46-
const taskSelectBox = await page.waitForSelector('#ml_selector dl:first-child dd:nth-child(5) select')
39+
const taskSelectBox = page.locator('#ml_selector dl:first-child dd:nth-child(5) select')
4740
await taskSelectBox.selectOption('SG')
48-
const modelSelectBox = await page.waitForSelector('#ml_selector .model_selection #mlDisp')
41+
const modelSelectBox = page.locator('#ml_selector .model_selection #mlDisp')
4942
await modelSelectBox.selectOption('balanced_histogram')
50-
const methodMenu = await page.waitForSelector('#ml_selector #method_menu')
51-
const buttons = await methodMenu.waitForSelector('.buttons')
43+
})
5244

53-
const mincount = await buttons.waitForSelector('input:nth-of-type(1)')
54-
await expect((await mincount.getProperty('value')).jsonValue()).resolves.toBe('100')
45+
afterEach(async () => {
46+
await page?.close()
5547
})
5648

57-
test('learn', async () => {
58-
const dataSelectBox = await page.waitForSelector('#ml_selector dl:first-child dd:nth-child(2) select')
59-
await dataSelectBox.selectOption('upload')
49+
test('initialize', async () => {
50+
const methodMenu = page.locator('#ml_selector #method_menu')
51+
const buttons = methodMenu.locator('.buttons')
6052

61-
const uploadFileInput = await page.waitForSelector('#ml_selector #data_menu input[type=file]')
62-
await uploadFileInput.setInputFiles(path.resolve('image_balanced_histogram.png'))
53+
const mincount = buttons.locator('input:nth-of-type(1)')
54+
await expect(mincount.inputValue()).resolves.toBe('100')
55+
})
6356

64-
const taskSelectBox = await page.waitForSelector('#ml_selector dl:first-child dd:nth-child(5) select')
65-
await taskSelectBox.selectOption('SG')
66-
const modelSelectBox = await page.waitForSelector('#ml_selector .model_selection #mlDisp')
67-
await modelSelectBox.selectOption('balanced_histogram')
68-
const methodMenu = await page.waitForSelector('#ml_selector #method_menu')
69-
const buttons = await methodMenu.waitForSelector('.buttons')
57+
test('learn', async () => {
58+
const methodMenu = page.locator('#ml_selector #method_menu')
59+
const buttons = methodMenu.locator('.buttons')
7060

71-
await expect(page.$$('#image-area canvas')).resolves.toHaveLength(1)
72-
const threshold = await buttons.waitForSelector('span:last-child', { state: 'attached' })
73-
await expect(threshold.evaluate(el => el.textContent)).resolves.toBe('')
61+
await expect(page.locator('#image-area canvas').count()).resolves.toBe(1)
62+
const threshold = buttons.locator('span:last-child')
63+
await expect(threshold.textContent()).resolves.toBe('')
7464

75-
const fitButton = await buttons.waitForSelector('input[value=Fit]')
76-
await fitButton.evaluate(el => el.click())
65+
const fitButton = buttons.locator('input[value=Fit]')
66+
await fitButton.dispatchEvent('click')
7767

78-
await expect(threshold.evaluate(el => el.textContent)).resolves.toMatch(/^[0-9.]+$/)
79-
await expect(page.$$('#image-area canvas')).resolves.toHaveLength(2)
68+
await expect(threshold.textContent()).resolves.toMatch(/^[0-9.]+$/)
69+
await expect(page.locator('#image-area canvas').count()).resolves.toBe(2)
8070
})
8171
})

‎tests/gui/view/otsu.test.js

Lines changed: 24 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,3 @@
1-
import fs from 'fs'
2-
import path from 'path'
3-
41
import { getPage } from '../helper/browser'
52

63
describe('segmentation', () => {
@@ -28,54 +25,43 @@ describe('segmentation', () => {
2825
})
2926
const data = dataURL.replace(/^data:image\/\w+;base64,/, '')
3027
const buf = Buffer.from(data, 'base64')
31-
await fs.promises.writeFile('image_otsu.png', buf)
32-
})
3328

34-
afterEach(async () => {
35-
await fs.promises.unlink('image_otsu.png')
36-
await page?.close()
37-
})
38-
39-
test('initialize', async () => {
40-
const dataSelectBox = await page.waitForSelector('#ml_selector dl:first-child dd:nth-child(2) select')
29+
const dataSelectBox = page.locator('#ml_selector dl:first-child dd:nth-child(2) select')
4130
await dataSelectBox.selectOption('upload')
4231

43-
const uploadFileInput = await page.waitForSelector('#ml_selector #data_menu input[type=file]')
44-
await uploadFileInput.setInputFiles(path.resolve('image_otsu.png'))
32+
const uploadFileInput = page.locator('#ml_selector #data_menu input[type=file]')
33+
await uploadFileInput.setInputFiles({ name: 'image_otsu.png', mimeType: 'image/png', buffer: buf })
4534

46-
const taskSelectBox = await page.waitForSelector('#ml_selector dl:first-child dd:nth-child(5) select')
35+
const taskSelectBox = page.locator('#ml_selector dl:first-child dd:nth-child(5) select')
4736
await taskSelectBox.selectOption('SG')
48-
const modelSelectBox = await page.waitForSelector('#ml_selector .model_selection #mlDisp')
37+
const modelSelectBox = page.locator('#ml_selector .model_selection #mlDisp')
4938
await modelSelectBox.selectOption('otsu')
50-
const methodMenu = await page.waitForSelector('#ml_selector #method_menu')
51-
const buttons = await methodMenu.waitForSelector('.buttons')
39+
})
5240

53-
const threshold = await buttons.waitForSelector('span:last-child', { state: 'attached' })
54-
await expect(threshold.evaluate(el => el.textContent)).resolves.toBe('')
41+
afterEach(async () => {
42+
await page?.close()
5543
})
5644

57-
test('learn', async () => {
58-
const dataSelectBox = await page.waitForSelector('#ml_selector dl:first-child dd:nth-child(2) select')
59-
await dataSelectBox.selectOption('upload')
45+
test('initialize', async () => {
46+
const methodMenu = page.locator('#ml_selector #method_menu')
47+
const buttons = methodMenu.locator('.buttons')
6048

61-
const uploadFileInput = await page.waitForSelector('#ml_selector #data_menu input[type=file]')
62-
await uploadFileInput.setInputFiles(path.resolve('image_otsu.png'))
49+
const threshold = buttons.locator('span:last-child')
50+
await expect(threshold.textContent()).resolves.toBe('')
51+
})
6352

64-
const taskSelectBox = await page.waitForSelector('#ml_selector dl:first-child dd:nth-child(5) select')
65-
await taskSelectBox.selectOption('SG')
66-
const modelSelectBox = await page.waitForSelector('#ml_selector .model_selection #mlDisp')
67-
await modelSelectBox.selectOption('otsu')
68-
const methodMenu = await page.waitForSelector('#ml_selector #method_menu')
69-
const buttons = await methodMenu.waitForSelector('.buttons')
53+
test('learn', async () => {
54+
const methodMenu = page.locator('#ml_selector #method_menu')
55+
const buttons = methodMenu.locator('.buttons')
7056

71-
await expect(page.$$('#image-area canvas')).resolves.toHaveLength(1)
72-
const threshold = await buttons.waitForSelector('span:last-child', { state: 'attached' })
73-
await expect(threshold.evaluate(el => el.textContent)).resolves.toBe('')
57+
await expect(page.locator('#image-area canvas').count()).resolves.toBe(1)
58+
const threshold = buttons.locator('span:last-child')
59+
await expect(threshold.textContent()).resolves.toBe('')
7460

75-
const fitButton = await buttons.waitForSelector('input[value=Fit]')
76-
await fitButton.evaluate(el => el.click())
61+
const fitButton = buttons.locator('input[value=Fit]')
62+
await fitButton.dispatchEvent('click')
7763

78-
await expect(threshold.evaluate(el => el.textContent)).resolves.toMatch(/^[0-9.]+$/)
79-
await expect(page.$$('#image-area canvas')).resolves.toHaveLength(2)
64+
await expect(threshold.textContent()).resolves.toMatch(/^[0-9.]+$/)
65+
await expect(page.locator('#image-area canvas').count()).resolves.toBe(2)
8066
})
8167
})

0 commit comments

Comments
 (0)