TAP version 13
# as a function
# bad array/this value
ok 1 undefined is not an object
ok 2 null is not an object
# error cases
ok 3 target must be an object
ok 4 target must be an object
ok 5 target must be an object
ok 6 target must be an object
# non-object target, no sources
ok 7 bool is object
ok 8 bool coerces to `true`
ok 9 number is object
ok 10 number coerces to `1`
ok 11 number is object
ok 12 number coerces to `"1"`
# non-object target, with sources
# boolean
ok 13 bool is object
ok 14 bool coerces to `true`
ok 15 source properties copied
# number
ok 16 number is object
ok 17 number coerces to `1`
ok 18 source properties copied
# string
ok 19 number is object
ok 20 number coerces to `"1"`
ok 21 source properties copied
# non-object sources
ok 22 ignores null source
ok 23 ignores undefined source
# returns the modified target object
ok 24 returned object is the same reference as the target object
# has the right length
ok 25 length is 2 => 2 required arguments
# merge two objects
ok 26 returned object has properties from both
# works with functions
ok 27 returned object is target
ok 28 should be strictly equal
ok 29 should be strictly equal
# works with primitives
ok 30 returned is object form of number primitive
ok 31 returned and target have same valueOf
ok 32 should be strictly equal
# works with window.location
ok 33 ancestorOrigins is copied
ok 34 href is copied
ok 35 origin is copied
ok 36 protocol is copied
ok 37 host is copied
ok 38 hostname is copied
ok 39 port is copied
ok 40 pathname is copied
ok 41 search is copied
ok 42 hash is copied
ok 43 assign is copied
ok 44 reload is copied
ok 45 replace is copied
ok 46 toString is copied
# merge N objects
ok 47 returned object has properties from all sources
# only iterates over own keys
ok 48 returned object is the same reference as the target object
ok 49 returned object has only own properties from both
# includes enumerable symbols, after keys
ok 50 key is visited first, then symbol
ok 51 target.a is 42
ok 52 target[symbol] is Infinity
ok 53 target[nonEnumSymbol] is not -Infinity
# does not fail when symbols are not present
ok 54 assign visits expected keys
ok 55 target.a is 42
ok 56 should be strictly equal
# preserves correct property enumeration order
# run the next test 5 times
ok 57 property enumeration order should be followed
ok 58 property enumeration order should be followed
ok 59 property enumeration order should be followed
ok 60 property enumeration order should be followed
ok 61 property enumeration order should be followed
# checks enumerability and existence, in case of modification during [[Get]]
ok 62 sanity check: result is === target
ok 63 target key not overwritten by deleted source key
ok 64 target key not overwritten by non-enumerable source key

1..64
# tests 64
# pass  64

# ok