Current section

Files

Jump to
mysql test mysql_encode_tests.erl
Raw

test/mysql_encode_tests.erl

%% @doc This test suite does not require an actual MySQL connection.
-module(mysql_encode_tests).
-include_lib("eunit/include/eunit.hrl").
encode_test() ->
lists:foreach(
fun ({Term, Sql}) ->
?assertEqual(iolist_to_binary(Sql),
iolist_to_binary(mysql_encode:encode(Term)))
end,
[{null, "NULL"},
{42, "42"},
{3.14, "3.14"},
{"isn't didn't", "'isn''t didn''t'"}, %% Escape single quotes.
{"\\n", "'\\n'"}, %% Don't escape backslash.
%% BIT(N)
{<<255, 2:3>>, "b'11111111010'"},
%% DATE
{{2014, 11, 03}, "'2014-11-03'"},
{{0, 0, 0}, "'0000-00-00'"},
%% TIME
{{0, {10, 11, 12}}, "'10:11:12'"},
{{5, {0, 0, 1}}, "'120:00:01'"},
{{-1, {23, 59, 59}}, "'-00:00:01'"},
{{-1, {23, 59, 0}}, "'-00:01:00'"},
{{-1, {23, 0, 0}}, "'-01:00:00'"},
{{-1, {0, 0, 0}}, "'-24:00:00'"},
{{-5, {10, 0, 0}}, "'-110:00:00'"},
{{0, {0, 0, 0}}, "'00:00:00'"},
%% TIME with microseconds
{{0, {23, 59, 57.654321}}, "'23:59:57.654321'"},
{{5, {0, 0, 1.1}}, "'120:00:01.100000'"},
{{-1, {23, 59, 57.654321}}, "'-00:00:02.345679'"},
{{-1, {23, 59, 0.0}}, "'-00:01:00.000000'"},
{{-6, {23, 59, 57.0}}, "'-120:00:03.000000'"},
%% DATETIME
{{{2014, 12, 14}, {19, 39, 20}}, "'2014-12-14 19:39:20'"},
{{{2014, 12, 14}, {0, 0, 0}}, "'2014-12-14 00:00:00'"},
{{{0, 0, 0}, {0, 0, 0}}, "'0000-00-00 00:00:00'"},
%% DATETIME with microseconds
{{{2014, 11, 23}, {23, 59, 57.654321}}, "'2014-11-23 23:59:57.654321'"}]
).
backslash_escape_test() ->
?assertEqual(<<"a'b\\\\c'd\\\\e">>,
iolist_to_binary(mysql_encode:backslash_escape("a'b\\c'd\\e"))).