UNPKG

simple-json-order

Version:

A lightweight JavaScript utility to preserve the insertion order of top-level keys in JSON objects — ideal for config files, logs, or any use case where key order matters.

104 lines (83 loc) 2.33 kB
import { describe, it, expect } from 'vitest'; import { JSONOrder } from './index'; describe('JSONOrder', () => { it('should instantiate', () => { const jsonOrdered = new JSONOrder(); expect(jsonOrdered.size()).toBe(0); }); it('should add values to map', () => { const jsonOrdered = new JSONOrder(); jsonOrdered.add("20", "value 10"); jsonOrdered.add("a", "value a"); jsonOrdered.add("5", "value 5"); jsonOrdered.add("1", "value 1"); expect(jsonOrdered.size()).toBe(4); }); it('should get all values in the Map', () => { const jsonOrdered = new JSONOrder(); jsonOrdered.add("20", "value 10"); jsonOrdered.add("a", "value a"); expect(jsonOrdered.getAll()).toStrictEqual([ [ "20", "value 10", ], [ "a", "value a", ], ]); }); it('should get a single value', () => { const jsonOrdered = new JSONOrder(); jsonOrdered.add("20", "value 10"); jsonOrdered.add("a", "value a"); expect(jsonOrdered.get(20)).toBe("value 10"); }); it('should delete by id', () => { const jsonOrdered = new JSONOrder(); jsonOrdered.add("20", "value 10"); jsonOrdered.add("a", "value a"); jsonOrdered.add("5", "value 5"); jsonOrdered.add("1", "value 1"); jsonOrdered.delete(5) expect(jsonOrdered.getAll()).toStrictEqual([ [ "20", "value 10", ], [ "a", "value a", ], [ "1", "value 1", ], ]); }); it('should stringify and keep the order of inserction', () => { const jsonOrdered = new JSONOrder(); jsonOrdered.add("20", "value 10"); jsonOrdered.add("a", "value a"); expect(jsonOrdered.stringify()).toBe("{\"20\": \"value 10\",\"a\": \"value a\"}"); }); it('should parse and keep the order of the string', () => { const jsonOrdered = new JSONOrder(); jsonOrdered.parse('{"20": "value 20", "5": "value 5", "100": "value 100"}') expect(jsonOrdered.getAll()).toStrictEqual([ [ "20", "value 20", ], [ "5", "value 5", ], [ "100", "value 100", ], ]); }); });