# # testing ruote # # Tue Oct 20 10:48:11 JST 2009 # require File.expand_path('../../test_helper', __FILE__) require_json require 'ruote/reader' class PdefReaderTest < Test::Unit::TestCase DEF0 = %{ Ruote.define :name => 'nada' do sequence do alpha bravo end end } TREE1 = Ruote::Reader.read(%{ Ruote.define :name => 'nada' do alpha participant 'bravo', :timeout => '2d', :on_board => true participant 'charly', :on_board => false, :whatever => nil doug :a => 'false', :b => 'true', :c => 'nil', :d => 4.5 dec 'v:x' end }) def test_from_string tree = Ruote::Reader.read(DEF0) assert_equal( ["define", {"name"=>"nada"}, [ ["sequence", {}, [["alpha", {}, []], ["bravo", {}, []]]] ]], tree) end def test_from_file fn = File.join(File.dirname(__FILE__), '_ut_16_def.rb') File.open(fn, 'w') { |f| f.write(DEF0) } tree = Ruote::Reader.read(fn) assert_equal( ["define", {"name"=>"nada"}, [ ["sequence", {}, [["alpha", {}, []], ["bravo", {}, []]]] ]], tree) FileUtils.rm_f(fn) # sooner or later, it will get erased end def test_to_xml assert_equal( %{ }.strip, Ruote::Reader.to_xml(TREE1, :indent => 2).strip) end def test_if_to_xml tree = Ruote.process_definition do _if 'nada' do participant 'nemo' end end assert_equal( %{ }.strip, Ruote::Reader.to_xml(tree, :indent => 2).strip) end def test_to_ruby assert_equal( %{ Ruote.process_definition :name => "nada" do alpha participant "bravo", :on_board => true, :timeout => "2d" participant "charly", :on_board => false, :whatever => nil doug :a => "false", :b => "true", :c => "nil", :d => 4.5 dec "v:x" end }.strip, Ruote::Reader.to_ruby(TREE1).strip) end def test_to_json require 'json' assert_equal TREE1.to_json, Ruote::Reader.to_json(TREE1) end def test_to_radial assert_equal( %{ define name: nada alpha participant bravo, on_board: true, timeout: 2d participant charly, on_board: false, whatever: nil doug a: "false", b: "true", c: "nil", d: 4.5 dec "v:x" }.strip, Ruote::Reader.to_radial(TREE1).strip) end def test_to_radial_back_and_forth rad = Ruote::Reader.to_radial(TREE1) assert_equal TREE1, Ruote::Reader.read(rad) end def test_to_radial_2 tree = Ruote.define do participant 'bob', 'message' => "hello my\ndear world" participant 'charly', 'message' => 'oh my' end rad = Ruote::Reader.to_radial(tree) assert_equal tree, Ruote::Reader.read(rad) end def test_to_expid_radial assert_equal( %{ 0 define name: nada 0_0 alpha 0_1 participant bravo, on_board: true, timeout: 2d 0_2 participant charly, on_board: false, whatever: nil 0_3 doug a: "false", b: "true", c: "nil", d: 4.5 0_4 dec "v:x"}, Ruote::Reader.to_expid_radial(TREE1)) end DEF1 = %{ Ruote.process_definition do sequence do alpha set :field => 'f', :value => 'v' bravo end end } def test_from_ruby_file fn = File.expand_path(File.join(File.dirname(__FILE__), '_ut_16_def1.rb')) File.open(fn, 'wb') { |f| f.write(DEF1) } assert_equal( ["define", {}, [["sequence", {}, [["alpha", {}, []], ["set", {"field"=>"f", "value"=>"v"}, []], ["bravo", {}, []]]]]], Ruote::Reader.read(fn)) FileUtils.rm(fn) end # Make sure that ruby method names like 'freeze' or 'clone' can be used # in process definitions. # def test_ruby_blank_slate t = Ruote::Reader.read(%{ Ruote.define do freeze clone untrust end }) assert_equal( [ 'define', {}, [ [ 'freeze', {}, [] ], [ 'clone', {}, [] ], [ 'untrust', {}, [] ] ] ], t) end def test_radial tree = Ruote::Reader.read(%{ define name: 'nada' sequence alpha participant bravo, timeout: 2d, on-board: true }) assert_equal( [ 'define', { 'name' => 'nada' }, [ [ 'sequence', {}, [ [ 'alpha', {}, [] ], [ 'participant', { 'bravo' => nil, 'timeout' => '2d', 'on_board' => true }, [] ] ] ] ] ], tree) end def test_parse_error__ruby err = nil begin Ruote::Reader.read(%{ Ruote.process_definition # missing "do" alpha end }) rescue => err end assert_equal Ruote::Reader::Error, err.class assert_equal Racc::ParseError, err.cause.class end def test_parse_error__radial err = nil begin Ruote::Reader.read(%{ process_definition [f:y] alpha }) rescue => err end assert_equal Ruote::Reader::Error, err.class assert_equal Parslet::UnconsumedInput, err.cause.class end def test_ruby_attributes pdef = Ruote.define do sequence :on_error => [ { /unknown participant/ => 'alpha' }, { nil => 'bravo' } ] do nada end end assert_equal( [ 'define', {}, [ [ 'sequence', { 'on_error' => [ { '/unknown participant/' => 'alpha' }, { nil => 'bravo' } ] }, [ [ 'nada', {}, [] ] ] ] ] ], pdef) end end