Test corner case 1
parent
0200787b17
commit
2cd7cda0cb
|
@ -13,7 +13,7 @@ module CeleryScript
|
|||
end
|
||||
|
||||
class AstNode < AbstractNode
|
||||
attr_reader :args, :body, :comments, :kind, :parent
|
||||
attr_reader :args, :body, :comment, :kind, :parent
|
||||
|
||||
def initialize(parent = nil, args:, body: nil, comment: "", kind:)
|
||||
@comment, @kind, @parent = comment, kind, parent
|
||||
|
|
|
@ -0,0 +1,68 @@
|
|||
{
|
||||
"kind": "sequence",
|
||||
"comment": "Properly formatted, syntactically valid sequence.",
|
||||
"args": {},
|
||||
"body": [
|
||||
{
|
||||
"kind": "move_absolute",
|
||||
"args": {
|
||||
"x": 1,
|
||||
"y": 2,
|
||||
"z": 3,
|
||||
"speed": 4
|
||||
}
|
||||
},
|
||||
{
|
||||
"kind": "move_relative",
|
||||
"args": {
|
||||
"x": 1,
|
||||
"y": 2,
|
||||
"z": 3,
|
||||
"speed": 4
|
||||
}
|
||||
},
|
||||
{
|
||||
"kind": "write_pin",
|
||||
"args": {
|
||||
"pin_number": 1,
|
||||
"pin_value": 128,
|
||||
"pin_mode": 1
|
||||
}
|
||||
},
|
||||
{
|
||||
"kind": "read_pin",
|
||||
"args": {
|
||||
"pin_number": 1,
|
||||
"data_label": "my_pin",
|
||||
"pin_mode": 1
|
||||
}
|
||||
},
|
||||
{
|
||||
"kind": "wait",
|
||||
"args": {
|
||||
"milliseconds": 500
|
||||
}
|
||||
},
|
||||
{
|
||||
"kind": "send_message",
|
||||
"args": {
|
||||
"message": "Bot at coord {{ x }} {{ y }} {{ z }}."
|
||||
}
|
||||
},
|
||||
{
|
||||
"kind": "if_statement",
|
||||
"args": {
|
||||
"lhs": "x",
|
||||
"rhs": 300,
|
||||
"op": "is",
|
||||
"sub_sequence_id": 456
|
||||
}
|
||||
},
|
||||
{
|
||||
"kind": "execute",
|
||||
"args": {
|
||||
"sub_sequence_id": 123
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
|
@ -1,35 +1,50 @@
|
|||
require 'spec_helper'
|
||||
|
||||
describe CeleryScript::Checker do
|
||||
file = File.read("./spec/lib/celery_script/ast_fixture2.json")
|
||||
file = File.read("./spec/lib/celery_script/ast_fixture3.json")
|
||||
|
||||
let(:tree) do
|
||||
CeleryScript::AstNode.new(JSON.parse(file).deep_symbolize_keys)
|
||||
end
|
||||
|
||||
let (:corpus) do
|
||||
steps = [ :var_set, :var_get, :move_absolute, :move_relative, :write_pin,
|
||||
:read_pin, :wait, :send_message, :execute, :if_statement]
|
||||
CeleryScript::Corpus
|
||||
.new
|
||||
.defineArg(:data_label, [String])
|
||||
.defineArg(:data_type, [String])
|
||||
.defineArg(:data_value, [String, :var_get])
|
||||
.defineArg(:x, [Fixnum, :blah]) do |node|
|
||||
node.invalidate!("NO NO NOE!!!") if node.value < 0
|
||||
end
|
||||
.defineNode(:sequence, [:x], [:other, :whatever])
|
||||
.defineNode(:blah, [:data_value, :data_type])
|
||||
.defineNode(:var_get, [:data_label])
|
||||
.defineNode(:whatever, [:data_type, :data_value])
|
||||
.defineNode(:var_get, [:data_label])
|
||||
.defineNode(:other, [:data_type, :data_value])
|
||||
.new
|
||||
.defineArg(:x, [Fixnum])
|
||||
.defineArg(:y, [Fixnum])
|
||||
.defineArg(:z, [Fixnum])
|
||||
.defineArg(:speed, [Fixnum])
|
||||
.defineArg(:pin_number, [Fixnum])
|
||||
.defineArg(:pin_value, [Fixnum])
|
||||
.defineArg(:pin_mode, [Fixnum])
|
||||
.defineArg(:data_label, [String])
|
||||
.defineArg(:data_value, [String])
|
||||
.defineArg(:data_type, [String])
|
||||
.defineArg(:milliseconds, [Fixnum])
|
||||
.defineArg(:message, [String])
|
||||
.defineArg(:sub_sequence_id, [Fixnum])
|
||||
.defineArg(:lhs, [String])
|
||||
.defineArg(:op, [String])
|
||||
.defineArg(:rhs, [Fixnum])
|
||||
.defineNode(:var_set, [:data_label, :data_type])
|
||||
.defineNode(:var_get, [:data_label, :data_type, :data_value],)
|
||||
.defineNode(:move_absolute, [:x, :y, :z, :speed],)
|
||||
.defineNode(:move_relative, [:x, :y, :z, :speed],)
|
||||
.defineNode(:write_pin, [:pin_number, :pin_value, :pin_mode ],)
|
||||
.defineNode(:read_pin, [:pin_number, :data_label, :pin_mode])
|
||||
.defineNode(:wait, [:milliseconds])
|
||||
.defineNode(:send_message, [:message])
|
||||
.defineNode(:execute, [:sub_sequence_id])
|
||||
.defineNode(:if_statement, [:lhs, :op, :rhs, :sub_sequence_id])
|
||||
.defineNode(:sequence, [], steps)
|
||||
end
|
||||
|
||||
it "runs" do
|
||||
begin
|
||||
it "runs through a syntactically valid program" do
|
||||
checker = CeleryScript::Checker.new(tree, corpus)
|
||||
outcome = checker.run!
|
||||
rescue CeleryScript::TypeCheckError => e
|
||||
binding.pry
|
||||
end
|
||||
expect(outcome).to be_kind_of(CeleryScript::AstNode)
|
||||
expect(outcome.comment).to eq("Properly formatted, syntactically valid sequence.")
|
||||
end
|
||||
end
|
Loading…
Reference in New Issue