echo_test.exs 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. #!/usr/bin/env elixir
  2. ExUnit.start
  3. defmodule EchoClientMacros do
  4. defmacro testcase(name, term) do
  5. quote do
  6. test unquote(name), %{socket: socket} do
  7. test_term(socket, unquote(name), unquote(term))
  8. end
  9. end
  10. end
  11. end
  12. defmodule EchoClient do
  13. @port 5001
  14. import EchoClientMacros
  15. use ExUnit.Case, async: false, seed: 0
  16. setup_all do
  17. opts = [:binary, active: false, packet: 4, nodelay: true]
  18. {:ok, socket} = :gen_tcp.connect('localhost', @port, opts)
  19. {:ok, %{socket: socket}}
  20. end
  21. def test_term(socket, name, term) do
  22. :ok = :gen_tcp.send(socket, :erlang.term_to_binary(name))
  23. {:ok, packet} = :gen_tcp.recv(socket, 0)
  24. binary = :erlang.term_to_binary(term)
  25. :ok = :gen_tcp.send(socket, binary)
  26. {:ok, packet} = :gen_tcp.recv(socket, 0)
  27. returned_term = :erlang.binary_to_term(packet)
  28. assert(term === returned_term, "Returned term doesn't match")
  29. end
  30. testcase "basic_atom", :hi
  31. testcase "empty_list", []
  32. testcase "empty_dictionary", {}
  33. testcase "string", "string"
  34. testcase "binary", <<"alsdjaljf">>
  35. testcase "int", 12345
  36. testcase "float", 123.45
  37. testcase "large_int", 127552384489488384
  38. testcase "kitchen_sink", [
  39. :someatom,
  40. {:some, :other, "tuple"},
  41. ["maybe", 1, []],
  42. {"with", {:embedded, ["tuples and lists"]}, nil},
  43. 127542384389482384,
  44. 5334.32,
  45. 102,
  46. -1394,
  47. -349.2,
  48. -498384595043,
  49. [%{a: "map", with: <<"binaries">>, also: {<<"tuples">>, ["and"], ["lists"]}},
  50. %{:a => "anotherone", 3 => "int keys"}],
  51. %{{:something} => "else"}
  52. ]
  53. # testcase "really large int", 12345678901234512309301923091 # Currently not supported
  54. end