From c34aa56e170b633ef5f2e8e2714f2bba1038489d Mon Sep 17 00:00:00 2001 From: Rick Carlino Date: Fri, 3 Apr 2020 16:00:27 -0500 Subject: [PATCH] [56.5%] Tests for factory.ex --- ...eleryScript.SysCalls.Stubs-20193.coverdata | Bin 0 -> 5206 bytes ...eleryScript.SysCalls.Stubs-20534.coverdata | Bin 0 -> 5206 bytes ...CeleryScript.SysCalls.Stubs-4978.coverdata | Bin 0 -> 5206 bytes ...CeleryScript.SysCalls.Stubs-9685.coverdata | Bin 0 -> 5206 bytes .../lib/farmbot_celery_script/ast/factory.ex | 157 +++++++++++++++--- .../ast/factory_test.exs | 2 +- 6 files changed, 131 insertions(+), 28 deletions(-) create mode 100644 farmbot_celery_script/Elixir.FarmbotCeleryScript.SysCalls.Stubs-20193.coverdata create mode 100644 farmbot_celery_script/Elixir.FarmbotCeleryScript.SysCalls.Stubs-20534.coverdata create mode 100644 farmbot_celery_script/Elixir.FarmbotCeleryScript.SysCalls.Stubs-4978.coverdata create mode 100644 farmbot_celery_script/Elixir.FarmbotCeleryScript.SysCalls.Stubs-9685.coverdata diff --git a/farmbot_celery_script/Elixir.FarmbotCeleryScript.SysCalls.Stubs-20193.coverdata b/farmbot_celery_script/Elixir.FarmbotCeleryScript.SysCalls.Stubs-20193.coverdata new file mode 100644 index 0000000000000000000000000000000000000000..0364ec117eed631b5f2496de831de7ed71aea6b9 GIT binary patch literal 5206 zcmb_gYfuws6y1cEs0dc9mh#q#V3pStP^2Kw6dyc{Ad0wrY&OYivR~NU1mdIOfDBlm zh>F&rRxRk%N2^t-T08Aj2g*>2B1NmUEkaeMGF4_^P_+GaBg*e=e(s+$=bn4+x%b=R zl5`Bit`^l-RsZ1pW60zrm&ajOvJ*;;64$(WIWm7Hcec}huPDy1p?Pt&&%I5fBP;Hn zKbv0AbopO%S8Q#>KZL*E@9|k5x%fnwYs*JMvd&%Gk~dJbcwunOCcopc&U1~=KiM~& zcZ&?viMBYzJH2$Yv@{>mR~ARE8Q&iyTS2b6c^cxKlyZL0YEbd24=PjDH#y-li_tr(f8GkZuzZo@$fM>sF zN<-Y{vx#dj*GRsYIdDc!hu(6IzOBx6cZD^f4?~wKW$j<*)$M&y5aPY8vZW`$y}TzZ zRU?lp@7wCtdpb0$d`@0vz$M3=@SvL=8DDBUnveLjI8^BMj%ykVI?hB?-G8Z>sfgd? zf4ytyyC*WEUiBz`byGmzau2gd>ZJuQ<;w=A21i}ZjjL>%nP~oLQCZlY!pUS%UzGn# z@6OQ;cfx0tw#d_@E(Ie;i21EIkIRNnOv;OS@LtdF|Y`Ke=#7HvMFbE7guS9iG19 z*|V4#ruBjE91W^6FRU{U_}*xF`)lFCLPCIjRd}eL% zf7w9`uCo!3bnSZ_o}7gGG!X9@Fq+)pyw-PbD~J`244 z?S*c$qJQ&qO}#NE>g=v=`;{*)7R5DoAKm&wlDvBG?-j^68b>8&pKs9Vl~`bsmMWr{ zpk%=4@*$T%YDvbVAQ(!|1u0By0?=yNAO&a0XO);ML$c7o5F~EUD*;CWJ0Jm@0hVn& z8U}@H4P3B1wfY6Xi+=Q?s zAQ50otjBYrA*Z2ewE%?!OiW8yM2#gGBg6r%){;Pq*p-N{mL&@eBu$VAO#+sP!(&NW ziR(y~1!{|Bip7;|F(0l%jx7X?g<_!1%p&2NSb>!8;iub1x*>TVJu+yS@RHAsn7|bQo?5P zJMi)^w_df01cZ!|qQ^4S3t)2V(d-KW#R&$h5r?ypWT1evSKNTAD9dEx44DrhC&XNs z&BT}T;^WrKx)Aylp|TJ4O&4Y4hw0LVKtOqI1grs z({g;gY!oVw5oaW{FHkz8(c>4TR-DfTtXFpd56SOJ2(T3EHFO*|F-78XbllB?kPx#t zagoJAHM%bZ>G(PsfGxAWPG@0BYM{=ty@SPp5kO1jGklox%%%Y>)p}-=gr=f^;0&xF zn?W46LWbfjs`1D2ZgBxE2*w*X17OM4*J#HNJP$L`cEf4$*aC6&u_hWVX+*3_+>npE z{p}H+jV`4_;+&v|g(QPR6}kdZg_OAI=Fffuy8CgGHVUoWA+D7=Xe4ov&qA#MjgdVf zm~FEbIPonIwf~Gjivt#w%Tdsh+-7mf&C7=p8>b+ygG$S*sZ3mZX`n;T!?De>R$P0> zg|}tv$;GYaHy4C~etkpC68Fw|eM1mXr`M7w<;Ly^H*xJ&X#uO@ud_GLyKr%cWD!Xq WU*oLsUqhG|nXOXcpsj$80PKI>l1!ce literal 0 HcmV?d00001 diff --git a/farmbot_celery_script/Elixir.FarmbotCeleryScript.SysCalls.Stubs-20534.coverdata b/farmbot_celery_script/Elixir.FarmbotCeleryScript.SysCalls.Stubs-20534.coverdata new file mode 100644 index 0000000000000000000000000000000000000000..5e7b8047ff0c526f75094bad29e9202af5caef5d GIT binary patch literal 5206 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 FarmbotCeleryScript.AST.Factory.new() + Create an empty AST WITH ARG SET TO `nil`. + + iex> new() %FarmbotCeleryScript.AST{ args: nil, body: [], @@ -20,6 +21,19 @@ defmodule FarmbotCeleryScript.AST.Factory do %AST{body: []} end + @doc """ + Create a new AST to work with. Strings `kind`s are + converted to symbols. + + iex> new("foo") + %FarmbotCeleryScript.AST{ + args: %{}, + body: [], + comment: nil, + kind: :foo, + meta: nil + } + """ def new(kind, args \\ %{}, body \\ []) do AST.new(kind, Map.new(args), body) end @@ -35,59 +49,148 @@ defmodule FarmbotCeleryScript.AST.Factory do ) end + @doc """ + iex> (new() |> rpc_request("x") |> set_pin_io_mode(13, 1)).body + [%FarmbotCeleryScript.AST{ + kind: :set_pin_io_mode, + args: %{ pin_io_mode: 1, pin_number: 13 }, + body: [], + comment: nil, + meta: nil + }] + """ def set_pin_io_mode(%AST{} = ast, pin_number, pin_io_mode) do - ast - |> add_body_node( - new(:set_pin_io_mode, %{pin_number: pin_number, pin_io_mode: pin_io_mode}) - ) + args = %{pin_number: pin_number, pin_io_mode: pin_io_mode} + ast |> add_body_node(new(:set_pin_io_mode, args)) end + @doc """ + iex> (new() |> rpc_request("x") |> emergency_lock()).body + [%FarmbotCeleryScript.AST{ + body: [], + comment: nil, + meta: nil, + args: %{}, + kind: :emergency_lock + }] + """ def emergency_lock(%AST{} = ast) do - ast - |> add_body_node(new(:emergency_lock)) + ast |> add_body_node(new(:emergency_lock)) end + @doc """ + iex> (new() |> rpc_request("x") |> emergency_unlock()).body + [%FarmbotCeleryScript.AST{ + body: [], + comment: nil, + meta: nil, + args: %{}, + kind: :emergency_unlock + }] + """ def emergency_unlock(%AST{} = ast) do - ast - |> add_body_node(new(:emergency_unlock)) + ast |> add_body_node(new(:emergency_unlock)) end + @doc """ + iex> (new() |> rpc_request("x") |> read_status()).body + [%FarmbotCeleryScript.AST{ + body: [], + comment: nil, + meta: nil, + args: %{}, + kind: :read_status + }] + """ def read_status(%AST{} = ast) do - ast - |> add_body_node(new(:read_status)) + ast |> add_body_node(new(:read_status)) end + @doc """ + iex> (new() |> rpc_request("x") |> power_off()).body + [%FarmbotCeleryScript.AST{ + body: [], + comment: nil, + meta: nil, + args: %{}, + kind: :power_off + }] + """ def power_off(%AST{} = ast) do - ast - |> add_body_node(new(:power_off)) + ast |> add_body_node(new(:power_off)) end + @doc """ + iex> (new() |> rpc_request("x") |> reboot()).body + [%FarmbotCeleryScript.AST{ + body: [], + comment: nil, + meta: nil, + args: %{}, + kind: :reboot + }] + """ def reboot(%AST{} = ast) do - ast - |> add_body_node(new(:reboot)) + ast |> add_body_node(new(:reboot)) end + @doc """ + iex> (new() |> rpc_request("x") |> sync()).body + [%FarmbotCeleryScript.AST{ + body: [], + comment: nil, + meta: nil, + args: %{}, + kind: :sync + }] + """ def sync(%AST{} = ast) do - ast - |> add_body_node(new(:sync)) + ast |> add_body_node(new(:sync)) end + @doc """ + iex> (new() |> rpc_request("x") |> take_photo()).body + [%FarmbotCeleryScript.AST{ + body: [], + comment: nil, + meta: nil, + args: %{}, + kind: :take_photo + }] + """ def take_photo(%AST{} = ast) do - ast - |> add_body_node(new(:take_photo)) + ast |> add_body_node(new(:take_photo)) end + @doc """ + iex> (new() |> rpc_request("x") |> flash_firmware("arduino")).body + [%FarmbotCeleryScript.AST{ + kind: :flash_firmware, + comment: nil, + meta: nil, + args: %{package: "arduino"}, + body: [], + }] + """ def flash_firmware(%AST{} = ast, package) when is_binary(package) do - ast - |> add_body_node(new(:flash_firmware, %{package: package})) + ast |> add_body_node(new(:flash_firmware, %{package: package})) + end + + @doc """ + iex> (new() |> rpc_request("x") |> factory_reset("arduino")).body + [%FarmbotCeleryScript.AST{ + kind: :factory_reset, + comment: nil, + meta: nil, + args: %{package: "arduino"}, + body: [], + }] + """ + def factory_reset(%AST{} = ast, package) do + ast |> add_body_node(new(:factory_reset, %{package: package})) end def add_body_node(%AST{body: body} = ast, %AST{} = body_node) do %{ast | body: body ++ [body_node]} end - - def factory_reset(%AST{} = ast, package) do - ast - |> add_body_node(new(:factory_reset, %{package: package})) - end end diff --git a/farmbot_celery_script/test/farmbot_celery_script/ast/factory_test.exs b/farmbot_celery_script/test/farmbot_celery_script/ast/factory_test.exs index 547f12fd..22dcdf40 100644 --- a/farmbot_celery_script/test/farmbot_celery_script/ast/factory_test.exs +++ b/farmbot_celery_script/test/farmbot_celery_script/ast/factory_test.exs @@ -1,4 +1,4 @@ defmodule FarmbotCeleryScript.AST.FactoryTest do use ExUnit.Case, async: true - doctest FarmbotCeleryScript.AST.Factory + doctest FarmbotCeleryScript.AST.Factory, import: true end