91 lines
2 KiB
Ruby
91 lines
2 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
require 'spec_helper'
|
|
|
|
describe 'Atom syntax' do
|
|
KEYWORDS = %w(
|
|
def
|
|
defp
|
|
defmodule
|
|
defprotocol
|
|
defimpl
|
|
defrecord
|
|
defrecordp
|
|
defmacro
|
|
defmacrop
|
|
defdelegate
|
|
defoverridable
|
|
defexception
|
|
defcallback
|
|
defstruct
|
|
)
|
|
|
|
it '`atom:` style keyword used as an atom' do
|
|
KEYWORDS.each do |kw|
|
|
expect(<<~EOF).to include_elixir_syntax('elixirAtom', kw), "expected #{kw} to be an elixirAtom"
|
|
defmodule XmlElement do
|
|
require Record
|
|
import Record, only: [#{kw}: 2, extract: 2]
|
|
end
|
|
EOF
|
|
end
|
|
end
|
|
|
|
it '`:atom =>` style keyword used as an atom' do
|
|
KEYWORDS.each do |kw|
|
|
expect(<<~EOF).to include_elixir_syntax('elixirAtom', kw), "expected #{kw} to be an elixirAtom"
|
|
defmodule XmlElement do
|
|
require Record
|
|
import Record, only: [:#{kw} => 2, :extract => 2]
|
|
end
|
|
EOF
|
|
end
|
|
end
|
|
|
|
it 'atoms as part of a comprehension' do
|
|
s = 'for kvp <- map, do: &atomize_key/1, into: %{}'
|
|
expect(s).to include_elixir_syntax('elixirAtom', 'do')
|
|
expect(s).to include_elixir_syntax('elixirAtom', 'into')
|
|
end
|
|
|
|
it 'defoverridable' do
|
|
expect(<<~EOF).to include_elixir_syntax('elixirAtom', 'init:')
|
|
defmodule Test do
|
|
defmacro __using__(_options) do
|
|
quote do
|
|
def init(args) do
|
|
{:ok, args}
|
|
end
|
|
defoverridable init: 1
|
|
end
|
|
end
|
|
end
|
|
EOF
|
|
expect(<<~EOF).to include_elixir_syntax('elixirAtom', 'init:')
|
|
defmodule Test do
|
|
defmacro __using__(_options) do
|
|
quote do
|
|
def init(args) do
|
|
{:ok, args}
|
|
end
|
|
defoverridable [init: 1]
|
|
end
|
|
end
|
|
end
|
|
EOF
|
|
end
|
|
|
|
it '`Atom:` style atoms used in keyword list' do
|
|
expect(<<~EOF).to include_elixir_syntax('elixirAtom', 'Protocols:')
|
|
def project do
|
|
[
|
|
docs: [
|
|
groups_for_modules: [
|
|
Protocols: [Enumerable],
|
|
]
|
|
]
|
|
]
|
|
end
|
|
EOF
|
|
end
|
|
end
|