146 lines
4.9 KiB
Ruby
146 lines
4.9 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
require 'spec_helper'
|
|
|
|
describe 'Sigil syntax' do
|
|
it 'as function argument' do
|
|
expect('def f(~s(")), do: true').to include_elixir_syntax('elixirSigilDelimiter', '\~s(')
|
|
expect('def f(~s(")), do: true').to include_elixir_syntax('elixirSigil', '"')
|
|
expect("def f(~s(')), do: true").to include_elixir_syntax('elixirSigil', "'")
|
|
expect('def f(~s(")), do: true').not_to include_elixir_syntax('elixirSigilDelimiter', '"')
|
|
end
|
|
|
|
it 'as function argument multiline content' do
|
|
ex = <<~'EOF'
|
|
f(
|
|
~S"""
|
|
foo
|
|
""",
|
|
bar
|
|
)
|
|
EOF
|
|
|
|
expect(ex).to include_elixir_syntax('elixirSigilDelimiter', 'S"""')
|
|
expect(ex).to include_elixir_syntax('elixirSigil', 'foo')
|
|
end
|
|
|
|
describe 'upper case' do
|
|
it 'string' do
|
|
expect('~S(string)').to include_elixir_syntax('elixirSigilDelimiter', 'S')
|
|
expect('~S(string)').to include_elixir_syntax('elixirSigil', 'string')
|
|
end
|
|
|
|
it 'character list' do
|
|
expect('~C(charlist)').to include_elixir_syntax('elixirSigilDelimiter', 'C')
|
|
expect('~C(charlist)').to include_elixir_syntax('elixirSigil', 'charlist')
|
|
end
|
|
|
|
it 'regular expression' do
|
|
expect('~R(regex)').to include_elixir_syntax('elixirSigilDelimiter', 'R')
|
|
expect('~R(regex)').to include_elixir_syntax('elixirSigil', 'regex')
|
|
end
|
|
|
|
it 'list of words' do
|
|
expect('~W(list of words)').to include_elixir_syntax('elixirSigilDelimiter', 'W')
|
|
expect('~W(list of words)').to include_elixir_syntax('elixirSigil', 'list')
|
|
end
|
|
|
|
it 'delimited with parenthesis' do
|
|
expect('~S(foo bar)').to include_elixir_syntax('elixirSigilDelimiter', '(')
|
|
expect('~S(foo bar)').to include_elixir_syntax('elixirSigilDelimiter', ')')
|
|
end
|
|
|
|
it 'delimited with braces' do
|
|
expect('~S{foo bar}').to include_elixir_syntax('elixirSigilDelimiter', '{')
|
|
expect('~S{foo bar}').to include_elixir_syntax('elixirSigilDelimiter', '}')
|
|
end
|
|
|
|
it 'delimited with brackets' do
|
|
expect('~S[foo bar]').to include_elixir_syntax('elixirSigilDelimiter', '[')
|
|
expect('~S[foo bar]').to include_elixir_syntax('elixirSigilDelimiter', ']')
|
|
end
|
|
|
|
it 'escapes double quotes unless only preceded by whitespace' do
|
|
expect(<<~EOF).to include_elixir_syntax('elixirSigilDelimiter', %q(^\s*\zs"""))
|
|
~r"""
|
|
foo """
|
|
"""
|
|
EOF
|
|
end
|
|
|
|
it 'escapes single quotes unless only preceded by whitespace' do
|
|
expect(<<~EOF).to include_elixir_syntax('elixirSigilDelimiter', %q(^\s*\zs'''))
|
|
~r'''
|
|
foo '''
|
|
'''
|
|
EOF
|
|
end
|
|
|
|
it 'without escapes' do
|
|
expect('~S(foo \n bar)').not_to include_elixir_syntax('elixirRegexEscape', '\\')
|
|
end
|
|
|
|
it 'without interpolation' do
|
|
expect('~S(foo #{bar})').not_to include_elixir_syntax('elixirInterpolation', 'bar')
|
|
end
|
|
|
|
it 'without escaped parenthesis' do
|
|
expect('~S(\( )').not_to include_elixir_syntax('elixirRegexEscapePunctuation', '( ')
|
|
end
|
|
|
|
it 'Live EEx' do
|
|
expect('~L"""liveview template"""').to include_elixir_syntax('elixirSigilDelimiter', '"""')
|
|
end
|
|
|
|
it 'Surface EEx' do
|
|
expect('~H"""surface template"""').to include_elixir_syntax('elixirSigilDelimiter', '"""')
|
|
end
|
|
|
|
it 'EEx' do
|
|
expect('~E"""Phoenix.HTML template"""').to include_elixir_syntax('elixirSigilDelimiter', '"""')
|
|
expect('~e"""Phoenix.HTML template"""').to include_elixir_syntax('elixirSigilDelimiter', '"""')
|
|
end
|
|
end
|
|
|
|
describe 'lower case' do
|
|
it 'string' do
|
|
expect('~s(string)').to include_elixir_syntax('elixirSigilDelimiter', 's')
|
|
expect('~s(string)').to include_elixir_syntax('elixirSigil', 'string')
|
|
end
|
|
|
|
it 'character list' do
|
|
expect('~c(charlist)').to include_elixir_syntax('elixirSigilDelimiter', 'c')
|
|
expect('~c(charlist)').to include_elixir_syntax('elixirSigil', 'charlist')
|
|
end
|
|
|
|
it 'regular expression' do
|
|
expect('~r(regex)').to include_elixir_syntax('elixirSigilDelimiter', 'r')
|
|
expect('~r(regex)').to include_elixir_syntax('elixirSigil', 'regex')
|
|
end
|
|
|
|
it 'list of words' do
|
|
expect('~w(list of words)').to include_elixir_syntax('elixirSigilDelimiter', 'w')
|
|
expect('~w(list of words)').to include_elixir_syntax('elixirSigil', 'list')
|
|
end
|
|
|
|
it 'with escapes' do
|
|
expect('~s(foo \n bar)').to include_elixir_syntax('elixirRegexEscapePunctuation', '\\')
|
|
end
|
|
|
|
it 'with interpolation' do
|
|
expect('~s(foo #{bar})').to include_elixir_syntax('elixirInterpolation', 'bar')
|
|
end
|
|
|
|
it 'with escaped parenthesis' do
|
|
expect('~s(\( )').to include_elixir_syntax('elixirRegexEscapePunctuation', '( ')
|
|
end
|
|
|
|
it 'interpolation with slashes' do
|
|
expect('~s/foo #{bar}/').to include_elixir_syntax('elixirInterpolation', 'bar')
|
|
end
|
|
|
|
it 'escapes with slashes' do
|
|
expect('~s/foo \n bar/').to include_elixir_syntax('elixirRegexEscapePunctuation', '\\')
|
|
end
|
|
end
|
|
end
|