1
1
mirror of https://github.com/wader/fq.git synced 2024-12-26 15:02:28 +03:00
fq/pkg/interp/testdata/value_null.fqtest
Mattias Wadman af35b2848d gojq: Preserve keys order for to_entries when used with JQValue
Feels like what one would expect when doing to_entries on a decode value struct etc,
that is get the pairs in same order as decoder wants.

Quite sure this used to the case but was change to sorted key order when
to_entries was move from bein implemented in jq to be internal for performance
reasons. Now internal gojq to_entries has a special case for JQValue objects.

Also use new gojq.JQType* constants for type strings and switch binary type
to look more like strings. Can still use _exttype to get "binary".
2022-07-26 15:55:58 +02:00

120 lines
3.6 KiB
Plaintext

$ fq -i -d mp3 . test.mp3
mp3> .headers[0].padding | ., tovalue, type, length?
|00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f|0123456789abcdef|
0x20| 00 00 00 00 00 00 00 00 00 00 | .......... |.headers[0].padding: raw bits (all zero)
"<10>AAAAAAAAAAAAAA=="
"string"
10
mp3> .headers[0].padding[0] | ., type, length?
"\u0000"
"string"
1
mp3> .headers[0].padding[-1000] | ., type, length?
""
"string"
0
mp3> .headers[0].padding[1000] | ., type, length?
""
"string"
0
mp3> .headers[0].padding[1:3] | ., type, length?
"\u0000\u0000"
"string"
2
mp3> .headers[0].padding[0:-1] | ., type, length?
"\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"
"string"
9
mp3> .headers[0].padding[-1000:2000] | ., type, length?
"\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"
"string"
10
mp3> .headers[0].padding["test"] | ., type, length?
error: expected an object with key "test" but got: string
mp3> [.headers[0].padding[]] | type, length?
error: cannot iterate over: string
mp3> .headers[0].padding | keys
error: keys cannot be applied to: string
mp3> .headers[0].padding | has("a")
error: has cannot be applied to: string
mp3> .headers[0].padding | has(0)
error: has cannot be applied to: string
mp3> .headers[0].padding | type
"string"
mp3> .headers[0].padding | tonumber
error: invalid number: "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
mp3> .headers[0].padding | tostring
"\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"
mp3> .headers[0].padding + ""
"\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"
mp3> .headers[0].padding + 1
error: cannot add: string ("\u0000\u0000\u0000\u0000 ...") and number (1)
mp3> .headers[0].padding._start | ., type, length?
280
"number"
280
mp3> .headers[0].padding._stop | ., type, length?
360
"number"
360
mp3> .headers[0].padding._len | ., type, length?
80
"number"
80
mp3> .headers[0].padding._name | ., type, length?
"padding"
"string"
7
mp3> .headers[0].padding._sym | ., type, length?
null
"null"
0
mp3> .headers[0].padding._description | ., type, length?
"all zero"
"string"
8
mp3> .headers[0].padding._path | ., type, length?
[
"headers",
0,
"padding"
]
"array"
3
mp3> .headers[0].padding._bits | ., type, length?
|00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f|0123456789abcdef|
0x20| 00 00 00 00 00 00 00 00 00 00 | .......... |.: raw bits 0x23-0x2c.7 (10)
"string"
80
mp3>
mp3> .headers[0].padding._bytes | ., type, length?
|00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f|0123456789abcdef|
0x20| 00 00 00 00 00 00 00 00 00 00 | .......... |.: raw bits 0x23-0x2c.7 (10)
"string"
10
mp3>
mp3> .headers[0].padding._error | ., type, length?
null
"null"
0
mp3> .headers[0].padding._unknown | ., type, length?
false
"boolean"
mp3> .headers[0].padding.a = 1
error: expected an object but got: string ("\u0000\u0000\u0000\u0000 ...")
mp3> .headers[0].padding[0] = 1
error: expected an array but got: string ("\u0000\u0000\u0000\u0000 ...")
mp3> .headers[0].padding.a |= empty
error: expected an object with key "a" but got: string
mp3> .headers[0].padding[0] |= empty
error: expected an array but got: string ("\u0000\u0000\u0000\u0000 ...")
mp3> .headers[0].padding | setpath(["a"]; 1)
error: expected an object but got: string ("\u0000\u0000\u0000\u0000 ...")
mp3> .headers[0].padding | setpath([0]; 1)
error: expected an array but got: string ("\u0000\u0000\u0000\u0000 ...")
mp3> .headers[0].padding | delpaths([["a"]])
error: expected an object but got: string ("\u0000\u0000\u0000\u0000 ...")
mp3> .headers[0].padding | delpaths([[0]])
error: expected an array but got: string ("\u0000\u0000\u0000\u0000 ...")
mp3> ^D