-
Notifications
You must be signed in to change notification settings - Fork 3.6k
To Python bytes #370
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Open
edhinard
wants to merge
10
commits into
gchq:master
Choose a base branch
from
edhinard:master
base: master
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
Open
To Python bytes #370
Changes from all commits
Commits
Show all changes
10 commits
Select commit
Hold shift + click to select a range
bf31f48
To Python bytes
harry1234eer 3dcea28
correct warnings
harry1234eer 9f8dd0f
tests added
harry1234eer ea7a9a9
generalization: 'To Byte String Literal'. Python implemented. More to…
edhinard 6e216fe
C and Go added
edhinard 3357cad
Merge remote-tracking branch 'upstream/master'
edhinard 6bd0fd1
syncing
edhinard 5c96871
move test - remove comma
edhinard 2743c99
TestRegister has moved
edhinard 484bebe
consistent indentation
edhinard File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,140 @@ | ||
/** | ||
* @author edouard hinard [] | ||
* @copyright Crown Copyright 2018 | ||
* @license Apache-2.0 | ||
*/ | ||
|
||
import Operation from "../Operation"; | ||
|
||
const LANGUAGES = { | ||
"C": "c", | ||
"Go": "go", | ||
"Python": "python", | ||
}; | ||
|
||
/** | ||
* To Byte String Literal operation | ||
*/ | ||
class ToByteStringLiteral extends Operation { | ||
|
||
/** | ||
* ToByteStringLiteral constructor | ||
*/ | ||
constructor() { | ||
super(); | ||
|
||
this.name = "To Byte String Literal"; | ||
this.module = "Default"; | ||
this.description = "Converts the input data to byte string literal in common languages.<br><br>e.g. for python, the UTF-8 encoded string <code>ça ma couté 20€</code> becomes <code>b'\\xc3\\xa7a ma cout\\xc3\\xa9 20\\xe2\\x82\\xac'</code>"; | ||
this.inputType = "ArrayBuffer" ; | ||
this.outputType = "string";this.infoURL = "https://en.wikipedia.org/wiki/String_(computer_science)#Non-text_strings"; | ||
|
||
this.args = [ | ||
{ | ||
"name": "Language", | ||
"type": "option", | ||
"value": Object.keys(LANGUAGES) | ||
}, | ||
]; | ||
} | ||
|
||
/** | ||
* @param {ArrayBuffer} input | ||
* @param {Object[]} args | ||
* @returns {string} | ||
*/ | ||
run(input, args) { | ||
const data = new Uint8Array(input); | ||
const language = LANGUAGES[args[0]]; | ||
if (language === "c") { | ||
const sequences = Object.assign(DOUBLEQUOTE_SEQUENCE, COMMON_SEQUENCES, C_EXTRA_SEQUENCES); | ||
// regex is here to replace \xa7a by \xa7""a since escape sequence can have more than 2 digit | ||
return '"' + this.escape(data, sequences).replace(/(\\x[0-9a-f]{2})([0-9a-f])/gi, '$1""$2') + '"'; | ||
} else if (language === "go") { | ||
const sequences = Object.assign(DOUBLEQUOTE_SEQUENCE, COMMON_SEQUENCES, GO_EXTRA_SEQUENCES); | ||
return '([]byte)("' + this.escape(data, sequences) + '")'; | ||
} else if (language === "python") { | ||
const [quote, quoteSequence] = this.preferedQuote(data); | ||
const sequences = Object.assign(quoteSequence, COMMON_SEQUENCES, PYTHON_EXTRA_SEQUENCES); | ||
return "b" + quote + this.escape(data, sequences) + quote; | ||
} | ||
return ""; | ||
} | ||
|
||
/** | ||
* @param {Uint8Array} data | ||
* @returns {bool} | ||
* python and javascript can use single or double quote equally | ||
* better use the variant that reduce quote escape | ||
*/ | ||
preferedQuote(data) { | ||
let onlySingleQuoteInData = false; | ||
for (let i = 0; i < data.length; i++) { | ||
if (data[i] === '"'.charCodeAt(0)) { | ||
onlySingleQuoteInData = false; | ||
break; | ||
} | ||
if (data[i] === "'".charCodeAt(0)) { | ||
onlySingleQuoteInData = true; | ||
} | ||
} | ||
if (onlySingleQuoteInData) { | ||
return ['"', DOUBLEQUOTE_SEQUENCE]; | ||
} | ||
return ["'", SINGLEQUOTE_SEQUENCE]; | ||
} | ||
|
||
/** | ||
* @param {Uint8Array} data | ||
* @param {object} sequences | ||
* @returns {string} | ||
*/ | ||
escape(data, sequences) { | ||
let output = ""; | ||
for (let i = 0; i < data.length; i++) { | ||
output += | ||
sequences[data[i]] || | ||
( | ||
(data[i] < 0x20 || data[i] > 0x7e) ? | ||
"\\x" + data[i].toString(16).padStart(2, 0) : | ||
String.fromCharCode(data[i]) | ||
); | ||
} | ||
return output; | ||
} | ||
} | ||
|
||
const SINGLEQUOTE_SEQUENCE = { | ||
edhinard marked this conversation as resolved.
Show resolved
Hide resolved
|
||
0x27: "\\'" | ||
}; | ||
|
||
const DOUBLEQUOTE_SEQUENCE = { | ||
0x22: '\\"' | ||
}; | ||
|
||
const COMMON_SEQUENCES = { | ||
0x08: "\\b", | ||
0x09: "\\t", | ||
0x0a: "\\n", | ||
0x0b: "\\v", | ||
0x0c: "\\f", | ||
0x0d: "\\r", | ||
0x5c: "\\\\" | ||
}; | ||
|
||
// https://en.wikipedia.org/wiki/Escape_sequences_in_C | ||
const C_EXTRA_SEQUENCES = { | ||
0x07: "\\a" | ||
}; | ||
|
||
// https://golang.org/ref/spec#Rune_literals | ||
const GO_EXTRA_SEQUENCES = { | ||
0x07: "\\a" | ||
}; | ||
|
||
// https://docs.python.org/3/reference/lexical_analysis.html#string-and-bytes-literals | ||
const PYTHON_EXTRA_SEQUENCES = { | ||
0x07: "\\a" | ||
}; | ||
|
||
export default ToByteStringLiteral; |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,215 @@ | ||
/** | ||
* Literal tests. | ||
* | ||
* @author edouard hinard [] | ||
* @copyright Crown Copyright 2018 | ||
* @license Apache-2.0 | ||
*/ | ||
import TestRegister from "../../lib/TestRegister.mjs"; | ||
|
||
TestRegister.addTests([ | ||
{ | ||
name: "Literal: python - empty", | ||
input: "", | ||
expectedOutput: "b''", | ||
recipeConfig: [ | ||
{ | ||
"op": "To Byte String Literal", | ||
"args": ["Python"] | ||
}, | ||
], | ||
}, | ||
{ | ||
name: "Literal: python - single quote", | ||
input: "'", | ||
expectedOutput: "b\"'\"", | ||
recipeConfig: [ | ||
{ | ||
"op": "To Byte String Literal", | ||
"args": ["Python"] | ||
}, | ||
], | ||
}, | ||
{ | ||
name: "Literal: python - single quote and data", | ||
input: "aaa'bbb", | ||
expectedOutput: "b\"aaa'bbb\"", | ||
recipeConfig: [ | ||
{ | ||
"op": "To Byte String Literal", | ||
"args": ["Python"] | ||
}, | ||
], | ||
}, | ||
{ | ||
name: "Literal: python - double quote", | ||
input: "\"", | ||
expectedOutput: "b'\"'", | ||
recipeConfig: [ | ||
{ | ||
"op": "To Byte String Literal", | ||
"args": ["Python"] | ||
}, | ||
], | ||
}, | ||
{ | ||
name: "Literal: python - double quote and data", | ||
input: "aaa\"bbb", | ||
expectedOutput: "b'aaa\"bbb'", | ||
recipeConfig: [ | ||
{ | ||
"op": "To Byte String Literal", | ||
"args": ["Python"] | ||
}, | ||
], | ||
}, | ||
{ | ||
name: "Literal: python - single + double", | ||
input: "'\"", | ||
expectedOutput: "b'\\'\"'", | ||
recipeConfig: [ | ||
{ | ||
"op": "To Byte String Literal", | ||
"args": ["Python"] | ||
}, | ||
], | ||
}, | ||
{ | ||
name: "Literal: python - double + single", | ||
input: "\"'", | ||
expectedOutput: "b'\"\\''", | ||
recipeConfig: [ | ||
{ | ||
"op": "To Byte String Literal", | ||
"args": ["Python"] | ||
}, | ||
], | ||
}, | ||
{ | ||
name: "Literal: python - UTF-8 encoded string", | ||
input: "Il m'a dit : \"ça ma couté 20€\".", | ||
expectedOutput: "b'Il m\\'a dit : \"\\xc3\\xa7a ma cout\\xc3\\xa9 20\\xe2\\x82\\xac\".'", | ||
recipeConfig: [ | ||
{ | ||
"op": "To Byte String Literal", | ||
"args": ["Python"] | ||
}, | ||
], | ||
}, | ||
{ | ||
/* | ||
>>> a=b'\x00\x01\x02\x03\x04\x05\x06\a\b\t\n\v\f\r\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f !"#$%&\'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\x7f\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab\xac\xad\xae\xaf\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff' | ||
>>> open('testp','wb').write(a) | ||
*/ | ||
name: "Literal: python - all 256 byte values", | ||
input: "00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f 10 11 12 13 14 15 16 17 18 19 1a 1b 1c 1d 1e 1f 20 21 22 23 24 25 26 27 28 29 2a 2b 2c 2d 2e 2f 30 31 32 33 34 35 36 37 38 39 3a 3b 3c 3d 3e 3f 40 41 42 43 44 45 46 47 48 49 4a 4b 4c 4d 4e 4f 50 51 52 53 54 55 56 57 58 59 5a 5b 5c 5d 5e 5f 60 61 62 63 64 65 66 67 68 69 6a 6b 6c 6d 6e 6f 70 71 72 73 74 75 76 77 78 79 7a 7b 7c 7d 7e 7f 80 81 82 83 84 85 86 87 88 89 8a 8b 8c 8d 8e 8f 90 91 92 93 94 95 96 97 98 99 9a 9b 9c 9d 9e 9f a0 a1 a2 a3 a4 a5 a6 a7 a8 a9 aa ab ac ad ae af b0 b1 b2 b3 b4 b5 b6 b7 b8 b9 ba bb bc bd be bf c0 c1 c2 c3 c4 c5 c6 c7 c8 c9 ca cb cc cd ce cf d0 d1 d2 d3 d4 d5 d6 d7 d8 d9 da db dc dd de df e0 e1 e2 e3 e4 e5 e6 e7 e8 e9 ea eb ec ed ee ef f0 f1 f2 f3 f4 f5 f6 f7 f8 f9 fa fb fc fd fe ff", | ||
expectedOutput: "b'\\x00\\x01\\x02\\x03\\x04\\x05\\x06\\a\\b\\t\\n\\v\\f\\r\\x0e\\x0f\\x10\\x11\\x12\\x13\\x14\\x15\\x16\\x17\\x18\\x19\\x1a\\x1b\\x1c\\x1d\\x1e\\x1f !\"#$%&\\'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\\x7f\\x80\\x81\\x82\\x83\\x84\\x85\\x86\\x87\\x88\\x89\\x8a\\x8b\\x8c\\x8d\\x8e\\x8f\\x90\\x91\\x92\\x93\\x94\\x95\\x96\\x97\\x98\\x99\\x9a\\x9b\\x9c\\x9d\\x9e\\x9f\\xa0\\xa1\\xa2\\xa3\\xa4\\xa5\\xa6\\xa7\\xa8\\xa9\\xaa\\xab\\xac\\xad\\xae\\xaf\\xb0\\xb1\\xb2\\xb3\\xb4\\xb5\\xb6\\xb7\\xb8\\xb9\\xba\\xbb\\xbc\\xbd\\xbe\\xbf\\xc0\\xc1\\xc2\\xc3\\xc4\\xc5\\xc6\\xc7\\xc8\\xc9\\xca\\xcb\\xcc\\xcd\\xce\\xcf\\xd0\\xd1\\xd2\\xd3\\xd4\\xd5\\xd6\\xd7\\xd8\\xd9\\xda\\xdb\\xdc\\xdd\\xde\\xdf\\xe0\\xe1\\xe2\\xe3\\xe4\\xe5\\xe6\\xe7\\xe8\\xe9\\xea\\xeb\\xec\\xed\\xee\\xef\\xf0\\xf1\\xf2\\xf3\\xf4\\xf5\\xf6\\xf7\\xf8\\xf9\\xfa\\xfb\\xfc\\xfd\\xfe\\xff'", | ||
recipeConfig: [ | ||
{ | ||
"op": "From Hex", | ||
"args": ["Auto"] | ||
}, | ||
{ | ||
"op": "To Byte String Literal", | ||
"args": ["Python"] | ||
}, | ||
], | ||
}, | ||
{ | ||
name: "Literal: C - empty", | ||
input: "", | ||
expectedOutput: '""', | ||
recipeConfig: [ | ||
{ | ||
"op": "To Byte String Literal", | ||
"args": ["C"] | ||
}, | ||
], | ||
}, | ||
{ | ||
name: "Literal: C - UTF-8 encoded string", | ||
input: "Il m'a dit : \"ça ma couté 20€\".", | ||
expectedOutput: '"Il m\'a dit : \\"\\xc3\\xa7""a ma cout\\xc3\\xa9 20\\xe2\\x82\\xac\\"."', | ||
recipeConfig: [ | ||
{ | ||
"op": "To Byte String Literal", | ||
"args": ["C"] | ||
}, | ||
], | ||
}, | ||
{ | ||
/* | ||
#include <stdio.h> | ||
int main(int argc, char**argv) | ||
{ | ||
const char s[] = "\x00\x01\x02\x03\x04\x05\x06\a\b\t\n\v\f\r\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\x7f\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab\xac\xad\xae\xaf\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff"; | ||
FILE* f=fopen("testc", "wb"); | ||
fwrite(s, 1, sizeof(s)-1, f); | ||
fclose(f); | ||
return(0); | ||
} | ||
*/ | ||
name: "Literal: C - all 256 byte values", | ||
input: "00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f 10 11 12 13 14 15 16 17 18 19 1a 1b 1c 1d 1e 1f 20 21 22 23 24 25 26 27 28 29 2a 2b 2c 2d 2e 2f 30 31 32 33 34 35 36 37 38 39 3a 3b 3c 3d 3e 3f 40 41 42 43 44 45 46 47 48 49 4a 4b 4c 4d 4e 4f 50 51 52 53 54 55 56 57 58 59 5a 5b 5c 5d 5e 5f 60 61 62 63 64 65 66 67 68 69 6a 6b 6c 6d 6e 6f 70 71 72 73 74 75 76 77 78 79 7a 7b 7c 7d 7e 7f 80 81 82 83 84 85 86 87 88 89 8a 8b 8c 8d 8e 8f 90 91 92 93 94 95 96 97 98 99 9a 9b 9c 9d 9e 9f a0 a1 a2 a3 a4 a5 a6 a7 a8 a9 aa ab ac ad ae af b0 b1 b2 b3 b4 b5 b6 b7 b8 b9 ba bb bc bd be bf c0 c1 c2 c3 c4 c5 c6 c7 c8 c9 ca cb cc cd ce cf d0 d1 d2 d3 d4 d5 d6 d7 d8 d9 da db dc dd de df e0 e1 e2 e3 e4 e5 e6 e7 e8 e9 ea eb ec ed ee ef f0 f1 f2 f3 f4 f5 f6 f7 f8 f9 fa fb fc fd fe ff", | ||
expectedOutput: '"\\x00\\x01\\x02\\x03\\x04\\x05\\x06\\a\\b\\t\\n\\v\\f\\r\\x0e\\x0f\\x10\\x11\\x12\\x13\\x14\\x15\\x16\\x17\\x18\\x19\\x1a\\x1b\\x1c\\x1d\\x1e\\x1f !\\"#$%&\'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\\x7f\\x80\\x81\\x82\\x83\\x84\\x85\\x86\\x87\\x88\\x89\\x8a\\x8b\\x8c\\x8d\\x8e\\x8f\\x90\\x91\\x92\\x93\\x94\\x95\\x96\\x97\\x98\\x99\\x9a\\x9b\\x9c\\x9d\\x9e\\x9f\\xa0\\xa1\\xa2\\xa3\\xa4\\xa5\\xa6\\xa7\\xa8\\xa9\\xaa\\xab\\xac\\xad\\xae\\xaf\\xb0\\xb1\\xb2\\xb3\\xb4\\xb5\\xb6\\xb7\\xb8\\xb9\\xba\\xbb\\xbc\\xbd\\xbe\\xbf\\xc0\\xc1\\xc2\\xc3\\xc4\\xc5\\xc6\\xc7\\xc8\\xc9\\xca\\xcb\\xcc\\xcd\\xce\\xcf\\xd0\\xd1\\xd2\\xd3\\xd4\\xd5\\xd6\\xd7\\xd8\\xd9\\xda\\xdb\\xdc\\xdd\\xde\\xdf\\xe0\\xe1\\xe2\\xe3\\xe4\\xe5\\xe6\\xe7\\xe8\\xe9\\xea\\xeb\\xec\\xed\\xee\\xef\\xf0\\xf1\\xf2\\xf3\\xf4\\xf5\\xf6\\xf7\\xf8\\xf9\\xfa\\xfb\\xfc\\xfd\\xfe\\xff"', | ||
recipeConfig: [ | ||
{ | ||
"op": "From Hex", | ||
"args": ["Auto"] | ||
}, | ||
{ | ||
"op": "To Byte String Literal", | ||
"args": ["C"] | ||
}, | ||
], | ||
}, | ||
{ | ||
name: "Literal: Go - empty", | ||
input: "", | ||
expectedOutput: '([]byte)("")', | ||
recipeConfig: [ | ||
{ | ||
"op": "To Byte String Literal", | ||
"args": ["Go"] | ||
}, | ||
], | ||
}, | ||
{ | ||
name: "Literal: Go - UTF-8 encoded string", | ||
input: "Il m'a dit : \"ça ma couté 20€\".", | ||
expectedOutput: '([]byte)("Il m\'a dit : \\"\\xc3\\xa7a ma cout\\xc3\\xa9 20\\xe2\\x82\\xac\\".")', | ||
recipeConfig: [ | ||
{ | ||
"op": "To Byte String Literal", | ||
"args": ["Go"] | ||
}, | ||
], | ||
}, | ||
{ | ||
/* | ||
package main | ||
|
||
import "os" | ||
|
||
func main() { | ||
a := ([]byte)("\x00\x01\x02\x03\x04\x05\x06\a\b\t\n\v\f\r\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\x7f\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab\xac\xad\xae\xaf\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff") | ||
f,_ := os.Create("testg"); | ||
f.Write(a); | ||
f.Close(); | ||
} | ||
*/ | ||
name: "Literal: Go - all 256 byte values", | ||
input: "00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f 10 11 12 13 14 15 16 17 18 19 1a 1b 1c 1d 1e 1f 20 21 22 23 24 25 26 27 28 29 2a 2b 2c 2d 2e 2f 30 31 32 33 34 35 36 37 38 39 3a 3b 3c 3d 3e 3f 40 41 42 43 44 45 46 47 48 49 4a 4b 4c 4d 4e 4f 50 51 52 53 54 55 56 57 58 59 5a 5b 5c 5d 5e 5f 60 61 62 63 64 65 66 67 68 69 6a 6b 6c 6d 6e 6f 70 71 72 73 74 75 76 77 78 79 7a 7b 7c 7d 7e 7f 80 81 82 83 84 85 86 87 88 89 8a 8b 8c 8d 8e 8f 90 91 92 93 94 95 96 97 98 99 9a 9b 9c 9d 9e 9f a0 a1 a2 a3 a4 a5 a6 a7 a8 a9 aa ab ac ad ae af b0 b1 b2 b3 b4 b5 b6 b7 b8 b9 ba bb bc bd be bf c0 c1 c2 c3 c4 c5 c6 c7 c8 c9 ca cb cc cd ce cf d0 d1 d2 d3 d4 d5 d6 d7 d8 d9 da db dc dd de df e0 e1 e2 e3 e4 e5 e6 e7 e8 e9 ea eb ec ed ee ef f0 f1 f2 f3 f4 f5 f6 f7 f8 f9 fa fb fc fd fe ff", | ||
expectedOutput: '([]byte)("\\x00\\x01\\x02\\x03\\x04\\x05\\x06\\a\\b\\t\\n\\v\\f\\r\\x0e\\x0f\\x10\\x11\\x12\\x13\\x14\\x15\\x16\\x17\\x18\\x19\\x1a\\x1b\\x1c\\x1d\\x1e\\x1f !\\"#$%&\'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\\x7f\\x80\\x81\\x82\\x83\\x84\\x85\\x86\\x87\\x88\\x89\\x8a\\x8b\\x8c\\x8d\\x8e\\x8f\\x90\\x91\\x92\\x93\\x94\\x95\\x96\\x97\\x98\\x99\\x9a\\x9b\\x9c\\x9d\\x9e\\x9f\\xa0\\xa1\\xa2\\xa3\\xa4\\xa5\\xa6\\xa7\\xa8\\xa9\\xaa\\xab\\xac\\xad\\xae\\xaf\\xb0\\xb1\\xb2\\xb3\\xb4\\xb5\\xb6\\xb7\\xb8\\xb9\\xba\\xbb\\xbc\\xbd\\xbe\\xbf\\xc0\\xc1\\xc2\\xc3\\xc4\\xc5\\xc6\\xc7\\xc8\\xc9\\xca\\xcb\\xcc\\xcd\\xce\\xcf\\xd0\\xd1\\xd2\\xd3\\xd4\\xd5\\xd6\\xd7\\xd8\\xd9\\xda\\xdb\\xdc\\xdd\\xde\\xdf\\xe0\\xe1\\xe2\\xe3\\xe4\\xe5\\xe6\\xe7\\xe8\\xe9\\xea\\xeb\\xec\\xed\\xee\\xef\\xf0\\xf1\\xf2\\xf3\\xf4\\xf5\\xf6\\xf7\\xf8\\xf9\\xfa\\xfb\\xfc\\xfd\\xfe\\xff")', | ||
recipeConfig: [ | ||
{ | ||
"op": "From Hex", | ||
"args": ["Auto"] | ||
}, | ||
{ | ||
"op": "To Byte String Literal", | ||
"args": ["Go"] | ||
}, | ||
], | ||
}, | ||
]); |
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Uh oh!
There was an error while loading. Please reload this page.