80 lines
3.2 KiB
JavaScript
80 lines
3.2 KiB
JavaScript
|
|
import { describe, it, expect, beforeAll } from 'vitest';
|
||
|
|
import * as Type from '../src/ox/core/Type.js';
|
||
|
|
import * as Collection from '../src/ox/core/Collection.js';
|
||
|
|
|
||
|
|
describe('Basic ES Module Tests', () => {
|
||
|
|
describe('Type utilities', () => {
|
||
|
|
it('should correctly identify types', () => {
|
||
|
|
expect(Type.typeOf([])).toBe('array');
|
||
|
|
expect(Type.typeOf({})).toBe('object');
|
||
|
|
expect(Type.typeOf('test')).toBe('string');
|
||
|
|
expect(Type.typeOf(123)).toBe('number');
|
||
|
|
expect(Type.typeOf(true)).toBe('boolean');
|
||
|
|
expect(Type.typeOf(null)).toBe('null');
|
||
|
|
expect(Type.typeOf(undefined)).toBe('undefined');
|
||
|
|
expect(Type.typeOf(new Date())).toBe('date');
|
||
|
|
expect(Type.typeOf(/test/)).toBe('regexp');
|
||
|
|
expect(Type.typeOf(NaN)).toBe('nan');
|
||
|
|
});
|
||
|
|
|
||
|
|
it('should check for empty values', () => {
|
||
|
|
expect(Type.isEmpty([])).toBe(true);
|
||
|
|
expect(Type.isEmpty({})).toBe(true);
|
||
|
|
expect(Type.isEmpty('')).toBe(true);
|
||
|
|
expect(Type.isEmpty(null)).toBe(true);
|
||
|
|
expect(Type.isEmpty(undefined)).toBe(true);
|
||
|
|
expect(Type.isEmpty([1])).toBe(false);
|
||
|
|
expect(Type.isEmpty({a: 1})).toBe(false);
|
||
|
|
expect(Type.isEmpty('test')).toBe(false);
|
||
|
|
});
|
||
|
|
|
||
|
|
it('should check equality', () => {
|
||
|
|
expect(Type.isEqual([1, 2, 3], [1, 2, 3])).toBe(true);
|
||
|
|
expect(Type.isEqual({a: 1, b: 2}, {b: 2, a: 1})).toBe(true);
|
||
|
|
expect(Type.isEqual(NaN, NaN)).toBe(true);
|
||
|
|
expect(Type.isEqual([1, 2], [1, 2, 3])).toBe(false);
|
||
|
|
expect(Type.isEqual({a: 1}, {a: 2})).toBe(false);
|
||
|
|
});
|
||
|
|
});
|
||
|
|
|
||
|
|
describe('Collection utilities', () => {
|
||
|
|
it('should iterate over arrays', () => {
|
||
|
|
const result = [];
|
||
|
|
Collection.forEach([1, 2, 3], (val, idx) => {
|
||
|
|
result.push(val * 2);
|
||
|
|
});
|
||
|
|
expect(result).toEqual([2, 4, 6]);
|
||
|
|
});
|
||
|
|
|
||
|
|
it('should iterate over objects', () => {
|
||
|
|
const result = {};
|
||
|
|
Collection.forEach({a: 1, b: 2, c: 3}, (val, key) => {
|
||
|
|
result[key] = val * 2;
|
||
|
|
});
|
||
|
|
expect(result).toEqual({a: 2, b: 4, c: 6});
|
||
|
|
});
|
||
|
|
|
||
|
|
it('should map over collections', () => {
|
||
|
|
expect(Collection.map([1, 2, 3], x => x * 2)).toEqual([2, 4, 6]);
|
||
|
|
expect(Collection.map('abc', x => x.toUpperCase())).toBe('ABC');
|
||
|
|
});
|
||
|
|
|
||
|
|
it('should filter collections', () => {
|
||
|
|
expect(Collection.filter([1, 2, 3, 4], x => x % 2 === 0)).toEqual([2, 4]);
|
||
|
|
expect(Collection.filter({a: 1, b: 2, c: 3}, x => x > 1)).toEqual({b: 2, c: 3});
|
||
|
|
});
|
||
|
|
|
||
|
|
it('should extend objects', () => {
|
||
|
|
const target = {a: 1};
|
||
|
|
const result = Collection.extend(target, {b: 2}, {c: 3});
|
||
|
|
expect(result).toEqual({a: 1, b: 2, c: 3});
|
||
|
|
expect(result).toBe(target); // Should modify in place
|
||
|
|
});
|
||
|
|
|
||
|
|
it('should deep extend objects', () => {
|
||
|
|
const target = {a: {x: 1}};
|
||
|
|
const result = Collection.extend(true, target, {a: {y: 2}});
|
||
|
|
expect(result).toEqual({a: {x: 1, y: 2}});
|
||
|
|
});
|
||
|
|
});
|
||
|
|
});
|