| import { describe, it, expect } from 'vitest'; |
| import * as fixtures from '../__fixtures__/fixtures.js'; |
| import { load } from '../load-parse.js'; |
|
|
| interface RedSelObject { |
| red: string | undefined; |
| sel: string | undefined; |
| } |
|
|
| interface RedSelMultipleObject { |
| red: string[]; |
| sel: string[]; |
| } |
|
|
| describe('$.extract', () => { |
| it('() : should extract values for selectors', () => { |
| const $ = load(fixtures.eleven); |
| const $root = load(fixtures.eleven).root(); |
| |
|
|
| |
| const emptyExtract = $root.extract({}); |
| expect(emptyExtract).toStrictEqual({}); |
| |
|
|
| |
| const simpleExtract = $root.extract({ foo: 'bar' }); |
| expect(simpleExtract).toStrictEqual({ foo: undefined }); |
|
|
| |
| expect<{ red: string | undefined }>( |
| $root.extract({ red: '.red' }), |
| ).toStrictEqual({ |
| red: 'Four', |
| }); |
| expect<RedSelObject>( |
| $root.extract({ red: '.red', sel: '.sel' }), |
| ).toStrictEqual({ |
| red: 'Four', |
| sel: 'Three', |
| }); |
| |
| expect<RedSelObject>( |
| $root.extract({ |
| red: { selector: '.red' }, |
| sel: { selector: '.sel' }, |
| }), |
| ).toStrictEqual({ red: 'Four', sel: 'Three' }); |
| |
|
|
| |
| const multipleExtract = $root.extract({ |
| red: ['.red'], |
| sel: ['.sel'], |
| }); |
| expect<RedSelMultipleObject>(multipleExtract).toStrictEqual({ |
| red: ['Four', 'Five', 'Nine'], |
| sel: ['Three', 'Nine', 'Eleven'], |
| }); |
| |
| expect<RedSelObject>( |
| $root.extract({ |
| red: { selector: '.red', value: 'outerHTML' }, |
| sel: { selector: '.sel', value: 'tagName' }, |
| }), |
| ).toStrictEqual({ red: '<li class="red">Four</li>', sel: 'LI' }); |
| |
| expect<{ red: string[] }>( |
| $root.extract({ |
| red: [{ selector: '.red', value: 'outerHTML' }], |
| }), |
| ).toStrictEqual({ |
| red: [ |
| '<li class="red">Four</li>', |
| '<li class="red">Five</li>', |
| '<li class="red sel">Nine</li>', |
| ], |
| }); |
| |
| expect<{ red: string | undefined }>( |
| $root.extract({ |
| red: { |
| selector: '.red', |
| value: (el, key) => `${key}=${$(el).text()}`, |
| }, |
| }), |
| ).toStrictEqual({ red: 'red=Four' }); |
| |
| expect<{ red: string[] }>( |
| $root.extract({ |
| red: [ |
| { |
| selector: '.red', |
| value: (el, key) => `${key}=${$(el).text()}`, |
| }, |
| ], |
| }), |
| ).toStrictEqual({ red: ['red=Four', 'red=Five', 'red=Nine'] }); |
| |
|
|
| |
| const subExtractObject = $root.extract({ |
| section: { |
| selector: 'ul:nth(1)', |
| value: { |
| red: '.red', |
| sel: '.blue', |
| }, |
| }, |
| }); |
|
|
| expect<{ section: RedSelObject | undefined }>( |
| subExtractObject, |
| ).toStrictEqual({ |
| section: { |
| red: 'Five', |
| sel: 'Seven', |
| }, |
| }); |
| }); |
| }); |
|
|