2015-03-06 12:22:11 +13:00
|
|
|
defmodule AcceptanceTest do
|
2015-03-06 11:22:23 +13:00
|
|
|
import TestHelpers
|
|
|
|
use ExUnit.Case, async: true
|
|
|
|
|
|
|
|
@tests [
|
2021-01-27 10:20:18 +13:00
|
|
|
{"''", generate_token(:simple_string, "")},
|
|
|
|
{"'hello'", generate_token(:simple_string, "hello")},
|
|
|
|
{"\"\"", generate_token(:string, "")},
|
|
|
|
{"\"hello\"", generate_token(:string, "hello")},
|
|
|
|
{"0", generate_token(:integer, 0)},
|
|
|
|
{"123", generate_token(:integer, 123)},
|
|
|
|
{"0x123", generate_token(:integer, 291)},
|
|
|
|
{"0b1011", generate_token(:integer, 11)},
|
|
|
|
{"0.0", generate_token(:float, 0.0)},
|
|
|
|
{"123.456", generate_token(:float, 123.456)}
|
2015-03-06 11:22:23 +13:00
|
|
|
]
|
|
|
|
|
2021-01-27 10:20:18 +13:00
|
|
|
Enum.each(@tests, fn
|
|
|
|
{source, token} ->
|
|
|
|
tname = Map.get(token, :name)
|
|
|
|
tvalue = Map.get(token, :value)
|
2015-03-06 11:22:23 +13:00
|
|
|
|
|
|
|
test "String #{inspect(source)} results in token #{inspect(token)}" do
|
2021-01-27 10:20:18 +13:00
|
|
|
result = ExampleLexer.lex(unquote(source))
|
2015-03-06 12:22:11 +13:00
|
|
|
{ok, result} = result
|
|
|
|
assert ok == :ok
|
|
|
|
|
|
|
|
result = Enum.at(result, 0)
|
2015-03-06 11:22:23 +13:00
|
|
|
|
2021-01-27 10:20:18 +13:00
|
|
|
rname = Map.get(result, :name)
|
|
|
|
rvalue = Map.get(result, :value)
|
|
|
|
assert rname == unquote(tname)
|
2015-03-06 11:22:23 +13:00
|
|
|
assert rvalue == unquote(tvalue)
|
|
|
|
end
|
2021-01-27 10:20:18 +13:00
|
|
|
end)
|
2015-03-06 11:22:23 +13:00
|
|
|
|
2021-01-27 10:20:18 +13:00
|
|
|
test "String #{inspect("'foo'\n'bar'")} has correct line numbers" do
|
|
|
|
{ok, tokens} = ExampleLexer.lex("'foo'\n'bar'")
|
2015-03-26 20:51:01 +13:00
|
|
|
assert ok == :ok
|
|
|
|
|
2021-01-27 10:20:18 +13:00
|
|
|
token = List.last(tokens)
|
2015-03-26 20:51:01 +13:00
|
|
|
assert token.line == 2
|
|
|
|
end
|
|
|
|
|
2021-01-27 10:20:18 +13:00
|
|
|
test "String #{inspect("'foo'\n'bar' 'baz'")} has correct column numbers" do
|
|
|
|
{ok, tokens} = ExampleLexer.lex("'foo'\n'bar' 'baz'")
|
2015-03-29 14:55:28 +13:00
|
|
|
assert ok == :ok
|
|
|
|
|
2021-01-27 10:20:18 +13:00
|
|
|
token = List.last(tokens)
|
2015-03-29 14:55:28 +13:00
|
|
|
assert token.value == "baz"
|
|
|
|
assert token.column == 8
|
|
|
|
end
|
2022-12-26 19:23:48 +13:00
|
|
|
|
|
|
|
test "String #{inspect("abc")} emits a tokens _and_ handles state changes" do
|
|
|
|
assert {:ok, tokens} = ExampleLexer.lex("abccba")
|
|
|
|
assert [%{name: :abc, value: "abc"}, %{name: :cba, value: "cba"}] = tokens
|
|
|
|
end
|
2015-03-06 11:22:23 +13:00
|
|
|
end
|