diff --git a/go.mod b/go.mod index cdfb67b4..5b6ed004 100644 --- a/go.mod +++ b/go.mod @@ -8,7 +8,7 @@ require ( github.com/pmezard/go-difflib v1.0.0 // fork of github.com/itchyny/gojq - github.com/wader/gojq v0.12.1-0.20210914125041-9eeeec0df5fe + github.com/wader/gojq v0.12.1-0.20210915224505-36925d096b12 // fork of github.com/chzyer/readline github.com/wader/readline v0.0.0-20210817095433-c868eb04b8b2 diff --git a/go.sum b/go.sum index c1957953..56fb15a0 100644 --- a/go.sum +++ b/go.sum @@ -13,8 +13,8 @@ github.com/nbutton23/zxcvbn-go v0.0.0-20210217022336-fa2cb2858354/go.mod h1:KSVJ github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/stretchr/testify v1.1.4/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= -github.com/wader/gojq v0.12.1-0.20210914125041-9eeeec0df5fe h1:tBWT7YPf1jEc3/9M3NwCB600ttjcMmqOrEa3TmCSDHM= -github.com/wader/gojq v0.12.1-0.20210914125041-9eeeec0df5fe/go.mod h1:RYeLRsFp5ABZ5Wr7Tuerp01wOdzZr0kmpnCU/6uPyTw= +github.com/wader/gojq v0.12.1-0.20210915224505-36925d096b12 h1:Exa1LxzPhle8KKnJRxAaOJoVfbVSmubFyHOWRnJfUMU= +github.com/wader/gojq v0.12.1-0.20210915224505-36925d096b12/go.mod h1:RYeLRsFp5ABZ5Wr7Tuerp01wOdzZr0kmpnCU/6uPyTw= github.com/wader/readline v0.0.0-20210817095433-c868eb04b8b2 h1:MGg7fsdEsoi7rattHGyU21wpOPeL3FonbUbJibpPBxc= github.com/wader/readline v0.0.0-20210817095433-c868eb04b8b2/go.mod h1:jYXyt9wQg3DifxQ8FM5M/ZoskO23GIwmo05QLHtO9CQ= golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= diff --git a/pkg/interp/testdata/value.fqtest b/pkg/interp/testdata/value.fqtest index f6aa5b1e..ec5c080b 100644 --- a/pkg/interp/testdata/value.fqtest +++ b/pkg/interp/testdata/value.fqtest @@ -1,654 +1,12 @@ /test.mp3: # ffmpeg -f lavfi -i sine -t 10ms test.mp3 -$ fq -d mp3 '.frames[0].xing | ., .frames, .toc, .header, .present_flags.toc, .missing' /test.mp3 - |00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f| |.frames[0].xing: {} (xing) -0x40| 49 6e 66 6f | Info | header: "Info" -0x40| 00 00 00 0f | .... | present_flags: {} -0x40| 00 00 00 02 | .... | frames: 2 -0x40| 00 00| ..| bytes: 599 -0x50|02 57 |.W | -0x50| 00 a6 a6 a6 a6 a6 a6 a6 a6 a6 a6 a6 a6 a6| ..............| toc: [100] -0x60|a6 a6 a6 a6 a6 a6 a6 a6 a6 a6 a6 a6 a6 a6 a6 a6|................| -* |until 0xb5.7 (100) | | -0xb0| 00 00 00 00 | .... | quality: 0 -0xb0| 4c 61 76 63 35 38| Lavc58| lame_extension: {} -0xc0|2e 39 31 00 00 00 00 00 00 00 00 00 00 00 00 24|.91............$| -0xd0|05 07 00 00 00 00 00 00 02 57 62 f0 5a 35 |.........Wb.Z5 | +# test alt // +$ fq -d mp3 '.headers[].frames[0].flags.unsync // 123' /test.mp3 +123 +$ fq -d mp3 '.headers[].frames[0].size // 123' /test.mp3 |00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f| | -0x40| 00 00 00 02 | .... |.frames[0].xing.frames: 2 - |00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f| |.frames[0].xing.toc: [100] -0x50| 00 | . | [0]: 0 -0x50| a6 | . | [1]: 166 -0x50| a6 | . | [2]: 166 -0x50| a6 | . | [3]: 166 -0x50| a6 | . | [4]: 166 -0x50| a6 | . | [5]: 166 -0x50| a6 | . | [6]: 166 -0x50| a6 | . | [7]: 166 -0x50| a6 | . | [8]: 166 -0x50| a6 | . | [9]: 166 -0x50| a6 | . | [10]: 166 -0x50| a6 | . | [11]: 166 -0x50| a6 | . | [12]: 166 -0x50| a6| .| [13]: 166 -0x60|a6 |. | [14]: 166 -0x60| a6 | . | [15]: 166 -0x60| a6 | . | [16]: 166 -0x60| a6 | . | [17]: 166 -0x60| a6 | . | [18]: 166 -0x60| a6 | . | [19]: 166 -0x60| a6 | . | [20]: 166 -0x60| a6 | . | [21]: 166 -0x60| a6 | . | [22]: 166 -0x60| a6 | . | [23]: 166 -0x60| a6 | . | [24]: 166 -0x60| a6 | . | [25]: 166 -0x60| a6 | . | [26]: 166 -0x60| a6 | . | [27]: 166 -0x60| a6 | . | [28]: 166 -0x60| a6| .| [29]: 166 -0x70|a6 |. | [30]: 166 -0x70| a6 | . | [31]: 166 -0x70| a6 | . | [32]: 166 -0x70| a6 | . | [33]: 166 -0x70| a6 | . | [34]: 166 -0x70| a6 | . | [35]: 166 -0x70| a6 | . | [36]: 166 -0x70| a6 | . | [37]: 166 -0x70| a6 | . | [38]: 166 -0x70| a6 | . | [39]: 166 -0x70| a6 | . | [40]: 166 -0x70| a6 | . | [41]: 166 -0x70| a6 | . | [42]: 166 -0x70| a6 | . | [43]: 166 -0x70| a6 | . | [44]: 166 -0x70| a6| .| [45]: 166 -0x80|a6 |. | [46]: 166 -0x80| a6 | . | [47]: 166 -0x80| a6 | . | [48]: 166 -0x80| a6 | . | [49]: 166 - | | | [50:99]: ... - |00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f| | -0x40| 49 6e 66 6f | Info |.frames[0].xing.header: "Info" - |00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f| | -0x40| 0f | . |.frames[0].xing.present_flags.toc: true -null -$ fq -d mp3 '.frames[0].xing | ., .frames, .toc, .header, .present_flags.toc, .missing | tovalue' /test.mp3 -{ - "bytes": 599, - "frames": 2, - "header": "Info", - "lame_extension": { - "abr_vbr": 0, - "audiophile_replay_gain": 0, - "encoder": "Lavc58.91", - "encoder_delay": 576, - "encoder_padding": 1287, - "lame_ath_type": 0, - "lame_flags": 0, - "length": 599, - "lowpass_filter": 0, - "misc": 0, - "mp3_gain": 0, - "music_crc": 25328, - "preset": 0, - "radio_replay_gain": 0, - "replay_gain_peak": 0, - "tag_crc": 23093, - "tag_revision": 0, - "vbr_method": 0 - }, - "present_flags": { - "bytes": true, - "frames": true, - "quality": true, - "toc": true, - "unused": 0 - }, - "quality": 0, - "toc": [ - 0, - 166, - 166, - 166, - 166, - 166, - 166, - 166, - 166, - 166, - 166, - 166, - 166, - 166, - 166, - 166, - 166, - 166, - 166, - 166, - 166, - 166, - 166, - 166, - 166, - 166, - 166, - 166, - 166, - 166, - 166, - 166, - 166, - 166, - 166, - 166, - 166, - 166, - 166, - 166, - 166, - 166, - 166, - 166, - 166, - 166, - 166, - 166, - 166, - 166, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255 - ] -} -2 -[ - 0, - 166, - 166, - 166, - 166, - 166, - 166, - 166, - 166, - 166, - 166, - 166, - 166, - 166, - 166, - 166, - 166, - 166, - 166, - 166, - 166, - 166, - 166, - 166, - 166, - 166, - 166, - 166, - 166, - 166, - 166, - 166, - 166, - 166, - 166, - 166, - 166, - 166, - 166, - 166, - 166, - 166, - 166, - 166, - 166, - 166, - 166, - 166, - 166, - 166, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255 -] -"Info" -true -null -$ fq -d mp3 '.frames[0].xing | ., .frames, .toc, .header, .present_flags.toc, .missing | tovalue' /test.mp3 -{ - "bytes": 599, - "frames": 2, - "header": "Info", - "lame_extension": { - "abr_vbr": 0, - "audiophile_replay_gain": 0, - "encoder": "Lavc58.91", - "encoder_delay": 576, - "encoder_padding": 1287, - "lame_ath_type": 0, - "lame_flags": 0, - "length": 599, - "lowpass_filter": 0, - "misc": 0, - "mp3_gain": 0, - "music_crc": 25328, - "preset": 0, - "radio_replay_gain": 0, - "replay_gain_peak": 0, - "tag_crc": 23093, - "tag_revision": 0, - "vbr_method": 0 - }, - "present_flags": { - "bytes": true, - "frames": true, - "quality": true, - "toc": true, - "unused": 0 - }, - "quality": 0, - "toc": [ - 0, - 166, - 166, - 166, - 166, - 166, - 166, - 166, - 166, - 166, - 166, - 166, - 166, - 166, - 166, - 166, - 166, - 166, - 166, - 166, - 166, - 166, - 166, - 166, - 166, - 166, - 166, - 166, - 166, - 166, - 166, - 166, - 166, - 166, - 166, - 166, - 166, - 166, - 166, - 166, - 166, - 166, - 166, - 166, - 166, - 166, - 166, - 166, - 166, - 166, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255 - ] -} -2 -[ - 0, - 166, - 166, - 166, - 166, - 166, - 166, - 166, - 166, - 166, - 166, - 166, - 166, - 166, - 166, - 166, - 166, - 166, - 166, - 166, - 166, - 166, - 166, - 166, - 166, - 166, - 166, - 166, - 166, - 166, - 166, - 166, - 166, - 166, - 166, - 166, - 166, - 166, - 166, - 166, - 166, - 166, - 166, - 166, - 166, - 166, - 166, - 166, - 166, - 166, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255 -] -"Info" -true -null -$ fq -d mp3 '.frames[0].xing | ., .frames, .toc, .header, .present_flags.toc, .missing | type' /test.mp3 -"object" -"number" -"array" -"string" -"boolean" -"null" -$ fq -d mp3 '.headers | length, type' /test.mp3 -1 -"array" -$ fq -d mp3 '.headers | tostring' /test.mp3 -exitcode: 5 -stderr: -error: tostring cannot be applied to: array -$ fq -d mp3 '.headers | tonumber' /test.mp3 -exitcode: 5 -stderr: -error: tonumber cannot be applied to: array -$ fq -d mp3 '.headers[0] | tostring' /test.mp3 -exitcode: 5 -stderr: -error: tostring cannot be applied to: object -$ fq -d mp3 '.headers[0] | tonumber' /test.mp3 -exitcode: 5 -stderr: -error: tonumber cannot be applied to: object -$ fq -d mp3 '.headers[0].version | tonumber' /test.mp3 -4 -$ fq -d mp3 '.headers[0].version | tostring' /test.mp3 -"4" -$ fq -d mp3 '.headers[0].magic | tonumber' /test.mp3 -exitcode: 5 -stderr: -error: invalid number: "ID3" -$ fq -d mp3 '.headers[0].magic | tovalue, length, tostring, type' /test.mp3 -"ID3" -3 -"ID3" -"string" -$ fq -d mp3 '.headers[0].magic[4]' /test.mp3 -"" -$ fq -d mp3 '.headers[0].magic[4:10]' /test.mp3 -"" -$ fq -d mp3 '.headers[10]' /test.mp3 -null -$ fq -d mp3 '.headers[10:20]' /test.mp3 -[] -$ fq -d mp3 '.headers[0].padding | tovalue, length, tostring, type' /test.mp3 -null -0 -"null" -"null" -$ fq -d mp3 '.headers[0].flags.unsynchronisation | tovalue, tostring, type' /test.mp3 -false -"false" -"boolean" -# regresison null value (padding) -$ fq -d mp3 '.headers[0] | tovalue' /test.mp3 -{ - "flags": { - "experimental_indicator": false, - "extended_header": false, - "unsynchronisation": false, - "unused": 0 - }, - "frames": [ - { - "flags": { - "compression": false, - "data_length_indicator": false, - "encryption": false, - "file_alter_preservation": false, - "grouping_identity": false, - "read_only": false, - "tag_alter_preservation": false, - "unsync": false, - "unused0": 0, - "unused1": 0, - "unused2": 0 - }, - "id": "TSSE", - "size": 15, - "text": "Lavf58.45.100", - "text_encoding": 3 - } - ], - "magic": "ID3", - "padding": null, - "revision": 0, - "size": 35, - "version": 4 -} +0x00| 00 00| ..|.headers[0].frames[0].size: 15 +0x10|00 0f |.. | # test each in decoded order $ fq -d mp3 '.headers[0][]' /test.mp3 |00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f| |