Skip to content

Commit

Permalink
Fixed dom tests
Browse files Browse the repository at this point in the history
  • Loading branch information
Şerban Ghiţă committed Dec 19, 2023
1 parent 91c9387 commit 3134fe6
Show file tree
Hide file tree
Showing 7 changed files with 110 additions and 33 deletions.
49 changes: 42 additions & 7 deletions build/bundle/formToObject.min.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

10 changes: 10 additions & 0 deletions build/src/FormToObject.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,16 @@ export declare class FormToObject {
$formElements: HTMLFormField[];
settings: {
includeEmptyValuedElements: boolean;
/**
* It doesn't make sense to include submit buttons,
* but if the use-case requires, we keep this option open.
*/
includeSubmitButton: boolean;
/**
* By default, we don't include key:value pair from disabled fields.
*
*/
includeDisabledFields: boolean;
w3cSuccessfulControlsOnly: boolean;
/**
* In case of a multiple select, e.g. <select name="multiple[]" multiple>
Expand Down
7 changes: 7 additions & 0 deletions build/src/dom.d.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,11 @@
import { HTMLFormField } from "./types";
/**
* Extract an array with all the DOM fields representing form fields.
* Make sure we are backward compatible with older browsers.
*
* @param $form
*/
export declare function getAllFormElementsAsArray($form: HTMLFormElement): any[];
/**
* Check to see if the object is an HTML node.
*
Expand Down
2 changes: 1 addition & 1 deletion src/dom.ts
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ export function getAllFormElementsAsArray($form: HTMLFormElement) {
// @ts-expect-error for older browsers
...$form.getElementsByTagName('input'),
// @ts-expect-error for older browsers
[...$form.getElementsByTagName('textarea')],
...$form.getElementsByTagName('textarea'),
// @ts-expect-error for older browsers
...$form.getElementsByTagName('select')
];
Expand Down
44 changes: 44 additions & 0 deletions test/unit/dom.test.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
import {getAllFormElementsAsArray, isDomElementNode} from "../../src/dom";
describe('dom', () => {

describe('getAllFormElementsAsArray', () => {
it('querySelectorAll', () => {
const $form = {querySelectorAll: () => ['a','b','c']};
// @ts-ignore
expect(getAllFormElementsAsArray($form)).toEqual(['a', 'b', 'c']);
});
it('getElementsByTagName', () => {
const $form = {getElementsByTagName: (tagName: string) => [tagName, tagName]};
// @ts-ignore
expect(getAllFormElementsAsArray($form)).toEqual(['input', 'input', 'textarea', 'textarea', 'select', 'select']);
});
it('invalid DOM element', () => {
expect(() => {
const $form = {};
// @ts-ignore
getAllFormElementsAsArray($form)
}).toThrowError('The <form> is either not a valid DOM element or the browser is very old.');
});
});

describe('isDomElementNode', () => {
it('returns true for real DOM element nodes', () => {
expect(isDomElementNode(<HTMLFormElement>document.body)).toBe(true);
expect(isDomElementNode(<HTMLFormElement><unknown>document.createElement('div'))).toBe(true);
expect(isDomElementNode(document.createElement('form'))).toBe(true);
});

it('returns false for real DOM nodes that are not elements', () => {
expect(isDomElementNode(document as never)).toBe(false);
expect(isDomElementNode(window as never)).toBe(false);
});

it('returns false for falsy nodes', () => {
expect(isDomElementNode(null as never)).toBe(false);
expect(isDomElementNode(false as never)).toBe(false);
expect(isDomElementNode(true as never)).toBe(false);
expect(isDomElementNode({} as never)).toBe(false);
expect(isDomElementNode([] as never)).toBe(false);
});
});
});
9 changes: 6 additions & 3 deletions test/unit/getObjLength.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ describe('getObjLength', function() {
expect(getObjLength(obj)).toBe(1);
});

it.skip('when Object.keys is missing, it only includes values from the object', function() {
it('when Object.keys is missing, it only includes values from the object', function() {
const objParent = { p: 'p' };
const obj = { a: 'a' };
Object.setPrototypeOf(obj, objParent);
Expand All @@ -40,8 +40,11 @@ describe('getObjLength', function() {
// @ts-expect-error Exception test
delete Object.keys;

expect(getObjLength(obj)).toBe(1);

// expect is using Object.keys :D, that's why we have to restore it in advance.
// node_modules/expect/build/index.js:114
const result = getObjLength(obj);
Object.keys = k;

expect(result).toBe(1);
});
});
22 changes: 0 additions & 22 deletions test/unit/isDomElementNode.test.ts

This file was deleted.

0 comments on commit 3134fe6

Please sign in to comment.