109 lines
2.9 KiB
Ruby
109 lines
2.9 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
require 'spec_helper'
|
|
|
|
describe 'String syntax' do
|
|
describe 'binary' do
|
|
it 'double quoted string' do
|
|
expect('foo "test"').to include_elixir_syntax('elixirString', 'test')
|
|
end
|
|
|
|
it 'double quoted string with escaped quote' do
|
|
expect('"this \"test is all one string"').to include_elixir_syntax('elixirString', 'test')
|
|
end
|
|
|
|
it 'charlist with escaped quote' do
|
|
expect(<<-'EOF').to include_elixir_syntax('elixirCharList', 'test')
|
|
'this \'test is all one charlist'
|
|
EOF
|
|
end
|
|
|
|
it 'interpolation in string' do
|
|
expect('do_something "foo #{test}"').to include_elixir_syntax('elixirInterpolation', 'test')
|
|
end
|
|
end
|
|
|
|
describe 'heredoc' do
|
|
it 'heredoc must be string' do
|
|
ex = <<~EOF
|
|
def function do
|
|
"""
|
|
foo "test"
|
|
"""
|
|
end
|
|
EOF
|
|
expect(ex).to include_elixir_syntax('elixirString', 'foo')
|
|
expect(ex).to include_elixir_syntax('elixirString', 'test')
|
|
end
|
|
|
|
it 'interpolation in string in heredoc' do
|
|
expect(<<~'EOF').to include_elixir_syntax('elixirInterpolation', '#{')
|
|
def function do
|
|
"""
|
|
foo "#{test}"
|
|
"""
|
|
end
|
|
EOF
|
|
end
|
|
|
|
it 'interpolation in heredoc' do
|
|
expect(<<~'EOF').to include_elixir_syntax('elixirInterpolation', '#{')
|
|
def function do
|
|
"""
|
|
foo #{test}
|
|
"""
|
|
end
|
|
EOF
|
|
end
|
|
|
|
it 'correctly terminates heredocs with no spaces at the start of the line' do
|
|
expect(<<~'EOF'.gsub(/^\s+/, '')).to include_elixir_syntax('elixirAtom', ':bar')
|
|
"""
|
|
foo
|
|
"""
|
|
:bar
|
|
EOF
|
|
|
|
expect(<<~'EOF'.gsub(/^\s+/, '')).to include_elixir_syntax('elixirAtom', ':bar')
|
|
'''
|
|
foo
|
|
'''
|
|
:bar
|
|
EOF
|
|
end
|
|
|
|
it 'interpolation with a tuple' do
|
|
str = <<~'EOF'
|
|
"Failed sending tasks #{inspect {:unexpected_status_code, s}}"
|
|
EOF
|
|
expect(str).not_to include_elixir_syntax('elixirInterpolationDelimiter', '}}"$')
|
|
expect(str).to include_elixir_syntax('elixirInterpolationDelimiter', '}"$')
|
|
end
|
|
|
|
it 'interpolation with a tuple' do
|
|
str = <<~'EOF'
|
|
"Failed sending tasks #{inspect %{unexpected_status_code: s}}"
|
|
EOF
|
|
expect(str).not_to include_elixir_syntax('elixirInterpolationDelimiter', '}}"$')
|
|
expect(str).to include_elixir_syntax('elixirInterpolationDelimiter', '}"$')
|
|
end
|
|
|
|
it 'interpolation with a struct' do
|
|
str = <<~'EOF'
|
|
"Failed sending tasks #{inspect %ResponseStruct{unexpected_status_code: s}}"
|
|
EOF
|
|
expect(str).not_to include_elixir_syntax('elixirInterpolationDelimiter', '}}"$')
|
|
expect(str).to include_elixir_syntax('elixirInterpolationDelimiter', '}"$')
|
|
end
|
|
|
|
it 'strings with embedded braces' do
|
|
str = <<~EOF
|
|
x = [
|
|
{:text, "asd {"},
|
|
{:text, "qwe"},
|
|
]
|
|
EOF
|
|
expect(str).to include_elixir_syntax('elixirString', '{"}')
|
|
end
|
|
end
|
|
end
|