lex_luthor/test/acceptance_test.exs

54 lines
1.5 KiB
Elixir
Raw Normal View History

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))
{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'")
assert ok == :ok
2021-01-27 10:20:18 +13:00
token = List.last(tokens)
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'")
assert ok == :ok
2021-01-27 10:20:18 +13:00
token = List.last(tokens)
assert token.value == "baz"
assert token.column == 8
end
2015-03-06 11:22:23 +13:00
end