Revision 3e489a5ed13519fd8a99ac1c31af5ab82ad2ef9e authored by Jeff Bezanson on 29 March 2017, 00:07:13 UTC, committed by Jeff Bezanson on 29 March 2017, 00:07:13 UTC
1 parent 78afb6a
io.jl
# This file is a part of Julia. License is MIT: http://julialang.org/license
# string escaping & unescaping
cx = Any[
0x00000000 '\0' "\\0"
0x00000001 '\x01' "\\x01"
0x00000006 '\x06' "\\x06"
0x00000007 '\a' "\\a"
0x00000008 '\b' "\\b"
0x00000009 '\t' "\\t"
0x0000000a '\n' "\\n"
0x0000000b '\v' "\\v"
0x0000000c '\f' "\\f"
0x0000000d '\r' "\\r"
0x0000000e '\x0e' "\\x0e"
0x0000001a '\x1a' "\\x1a"
0x0000001b '\e' "\\e"
0x0000001c '\x1c' "\\x1c"
0x0000001f '\x1f' "\\x1f"
0x00000020 ' ' " "
0x0000002f '/' "/"
0x00000030 '0' "0"
0x00000039 '9' "9"
0x0000003a ':' ":"
0x00000040 '@' "@"
0x00000041 'A' "A"
0x0000005a 'Z' "Z"
0x0000005b '[' "["
0x00000060 '`' "`"
0x00000061 'a' "a"
0x0000007a 'z' "z"
0x0000007b '{' "{"
0x0000007e '~' "~"
0x0000007f '\x7f' "\\x7f"
0x000000bf '\ubf' "\\ubf"
0x000000ff '\uff' "\\uff"
0x00000100 '\u100' "\\u100"
0x000001ff '\u1ff' "\\u1ff"
0x00000fff '\ufff' "\\ufff"
0x00001000 '\u1000' "\\u1000"
0x00001fff '\u1fff' "\\u1fff"
0x0000ffff '\uffff' "\\uffff"
0x00010000 '\U10000' "\\U10000"
0x0001ffff '\U1ffff' "\\U1ffff"
0x0002ffff '\U2ffff' "\\U2ffff"
0x00030000 '\U30000' "\\U30000"
0x000dffff '\Udffff' "\\Udffff"
0x000e0000 '\Ue0000' "\\Ue0000"
0x000effff '\Ueffff' "\\Ueffff"
0x000f0000 '\Uf0000' "\\Uf0000"
0x000fffff '\Ufffff' "\\Ufffff"
0x00100000 '\U100000' "\\U100000"
0x0010ffff '\U10ffff' "\\U10ffff"
]
for i = 1:size(cx,1)
cp, ch, st = cx[i,:]
@test cp == convert(UInt32, ch)
@test string(ch) == unescape_string(st)
if isascii(ch) || !isprint(ch)
@test st == escape_string(string(ch))
end
for j = 1:size(cx,1)
str = string(ch, cx[j,2])
@test str == unescape_string(escape_string(str))
end
@test repr(ch) == "'$(isprint(ch) ? ch : st)'"
end
for i = 0:0x7f, p = ["","\0","x","xxx","\x7f","\uFF","\uFFF",
"\uFFFF","\U10000","\U10FFF","\U10FFFF"]
c = Char(i)
cp = string(c,p)
op = string(Char(div(i,8)), oct(i%8), p)
hp = string(Char(div(i,16)), hex(i%16), p)
@test string(unescape_string(string("\\",oct(i,1),p))) == cp
@test string(unescape_string(string("\\",oct(i,2),p))) == cp
@test string(unescape_string(string("\\",oct(i,3),p))) == cp
@test string(unescape_string(string("\\",oct(i,4),p))) == op
@test string(unescape_string(string("\\x",hex(i,1),p))) == cp
@test string(unescape_string(string("\\x",hex(i,2),p))) == cp
@test string(unescape_string(string("\\x",hex(i,3),p))) == hp
end
@test "\z" == unescape_string("\z") == "z"
@test "\X" == unescape_string("\X") == "X"
@test "\AbC" == unescape_string("\AbC") == "AbC"
@test "\0" == unescape_string("\\0")
@test "\1" == unescape_string("\\1")
@test "\7" == unescape_string("\\7")
@test "\0x" == unescape_string("\\0x")
@test "\1x" == unescape_string("\\1x")
@test "\7x" == unescape_string("\\7x")
@test "\00" == unescape_string("\\00")
@test "\01" == unescape_string("\\01")
@test "\07" == unescape_string("\\07")
@test "\70" == unescape_string("\\70")
@test "\71" == unescape_string("\\71")
@test "\77" == unescape_string("\\77")
@test "\00x" == unescape_string("\\00x")
@test "\01x" == unescape_string("\\01x")
@test "\07x" == unescape_string("\\07x")
@test "\70x" == unescape_string("\\70x")
@test "\71x" == unescape_string("\\71x")
@test "\77x" == unescape_string("\\77x")
@test "\000" == unescape_string("\\000")
@test "\001" == unescape_string("\\001")
@test "\007" == unescape_string("\\007")
@test "\070" == unescape_string("\\070")
@test "\071" == unescape_string("\\071")
@test "\077" == unescape_string("\\077")
@test "\170" == unescape_string("\\170")
@test "\171" == unescape_string("\\171")
@test "\177" == unescape_string("\\177")
@test "\0001" == unescape_string("\\0001")
@test "\0011" == unescape_string("\\0011")
@test "\0071" == unescape_string("\\0071")
@test "\0701" == unescape_string("\\0701")
@test "\0711" == unescape_string("\\0711")
@test "\0771" == unescape_string("\\0771")
@test "\1701" == unescape_string("\\1701")
@test "\1711" == unescape_string("\\1711")
@test "\1771" == unescape_string("\\1771")
@test "\x0" == unescape_string("\\x0")
@test "\x1" == unescape_string("\\x1")
@test "\xf" == unescape_string("\\xf")
@test "\xF" == unescape_string("\\xF")
@test "\x0x" == unescape_string("\\x0x")
@test "\x1x" == unescape_string("\\x1x")
@test "\xfx" == unescape_string("\\xfx")
@test "\xFx" == unescape_string("\\xFx")
@test "\x00" == unescape_string("\\x00")
@test "\x01" == unescape_string("\\x01")
@test "\x0f" == unescape_string("\\x0f")
@test "\x0F" == unescape_string("\\x0F")
# Tests of join()
@test join([]) == ""
@test join(["a"],"?") == "a"
@test join("HELLO",'-') == "H-E-L-L-O"
@test join(1:5, ", ", " and ") == "1, 2, 3, 4 and 5"
@test join(["apples", "bananas", "pineapples"], ", ", " and ") == "apples, bananas and pineapples"
# issue #9178 `join` calls `done()` twice on the iterables
mutable struct i9178
nnext::Int64
ndone::Int64
end
Base.start(jt::i9178) = (jt.nnext=0 ; jt.ndone=0 ; 0)
Base.done(jt::i9178, n) = (jt.ndone += 1 ; n > 3)
Base.next(jt::i9178, n) = (jt.nnext += 1 ; ("$(jt.nnext),$(jt.ndone)", n+1))
@test join(i9178(0,0), ";") == "1,1;2,2;3,3;4,4"
# quotes + interpolation (issue #455)
@test "$("string")" == "string"
arr = ["a","b","c"]
@test "[$(join(arr, " - "))]" == "[a - b - c]"
# join with empty input
myio = IOBuffer()
join(myio, "", "", 1)
@test isempty(take!(myio))
# unescape_chars
@test Base.unescape_chars("\\t","t") == "t"
@test_throws ArgumentError unescape_string(IOBuffer(), string('\\',"xZ"))
@test_throws ArgumentError unescape_string(IOBuffer(), string('\\',"777"))
# 11659
# The indentation code was not correctly counting tab stops
@test Base.indentation(" \t") == (8, true)
@test Base.indentation(" \tfoob") == (8, false)
@test Base.indentation(" \t \t") == (16, true)
@test Base.unindent("\tfoo",0) == "\tfoo"
@test Base.unindent("\tfoo",4) == " foo"
@test Base.unindent(" \tfoo",4) == " foo"
@test Base.unindent("\t\n \tfoo",4) == " \n foo"
@test Base.unindent("\tfoo\tbar",4) == " foo bar"
@test Base.unindent("\n\tfoo",4) == "\n foo"
@test Base.unindent("\n \tfoo",4) == "\n foo"
@test Base.unindent("\n\t\n \tfoo",4) == "\n \n foo"
@test Base.unindent("\n\tfoo\tbar",4) == "\n foo bar"
# Tests of raw_str macro
@test raw"$" == "\$"
@test raw"\n" == "\\n"
@test raw"\t" == "\\t"
s1 = raw"""
lorem ipsum\n
$x = 1$
"""
s2 = """
lorem ipsum\\n
\$x = 1\$
"""
@test s1 == s2
![swh spinner](/static/img/swh-spinner.gif)
Computing file changes ...