mirror of
https://github.com/github/codeql-action.git
synced 2025-12-29 02:30:11 +08:00
95 lines
2.2 KiB
TypeScript
95 lines
2.2 KiB
TypeScript
import { it, expect } from 'vitest'
|
|
import { cloneObject } from './cloneObject'
|
|
|
|
it('clones a shallow object', () => {
|
|
const original = { a: 1, b: 2, c: [1, 2, 3] }
|
|
const clone = cloneObject(original)
|
|
|
|
expect(clone).toEqual(original)
|
|
|
|
clone.a = 5
|
|
clone.b = 6
|
|
clone.c = [5, 6, 7]
|
|
|
|
expect(clone).toHaveProperty('a', 5)
|
|
expect(clone).toHaveProperty('b', 6)
|
|
expect(clone).toHaveProperty('c', [5, 6, 7])
|
|
expect(original).toHaveProperty('a', 1)
|
|
expect(original).toHaveProperty('b', 2)
|
|
expect(original).toHaveProperty('c', [1, 2, 3])
|
|
})
|
|
|
|
it('clones a nested object', () => {
|
|
const original = { a: { b: 1 }, c: { d: { e: 2 } } }
|
|
const clone = cloneObject(original)
|
|
|
|
expect(clone).toEqual(original)
|
|
|
|
clone.a.b = 10
|
|
clone.c.d.e = 20
|
|
|
|
expect(clone).toHaveProperty(['a', 'b'], 10)
|
|
expect(clone).toHaveProperty(['c', 'd', 'e'], 20)
|
|
expect(original).toHaveProperty(['a', 'b'], 1)
|
|
expect(original).toHaveProperty(['c', 'd', 'e'], 2)
|
|
})
|
|
|
|
it('clones a class instance', () => {
|
|
class Car {
|
|
public manufacturer: string
|
|
constructor() {
|
|
this.manufacturer = 'Audi'
|
|
}
|
|
getManufacturer() {
|
|
return this.manufacturer
|
|
}
|
|
}
|
|
|
|
const car = new Car()
|
|
const clone = cloneObject(car)
|
|
|
|
expect(clone).toHaveProperty('manufacturer', 'Audi')
|
|
expect(clone).toHaveProperty('getManufacturer')
|
|
expect(clone.getManufacturer).toBeInstanceOf(Function)
|
|
expect(clone.getManufacturer()).toEqual('Audi')
|
|
})
|
|
|
|
it('ignores nested class instances', () => {
|
|
class Car {
|
|
name: string
|
|
constructor(name: string) {
|
|
this.name = name
|
|
}
|
|
getName() {
|
|
return this.name
|
|
}
|
|
}
|
|
const original = {
|
|
a: 1,
|
|
car: new Car('Audi'),
|
|
}
|
|
const clone = cloneObject(original)
|
|
|
|
expect(clone).toEqual(original)
|
|
expect(clone.car).toBeInstanceOf(Car)
|
|
expect(clone.car.getName()).toEqual('Audi')
|
|
|
|
clone.car = new Car('BMW')
|
|
|
|
expect(clone.car).toBeInstanceOf(Car)
|
|
expect(clone.car.getName()).toEqual('BMW')
|
|
expect(original.car).toBeInstanceOf(Car)
|
|
expect(original.car.getName()).toEqual('Audi')
|
|
})
|
|
|
|
it('clones an object with null prototype', () => {
|
|
const original = {
|
|
key: Object.create(null),
|
|
}
|
|
const clone = cloneObject(original)
|
|
|
|
expect(clone).toEqual({
|
|
key: {},
|
|
})
|
|
})
|