sequence_spec.cr
1 require "../spec_helper" 2 3 private class SequenceProject < Barista::Project; end 4 5 @[Barista::BelongsTo(SequenceProject)] 6 private class Gem1 < Barista::Task 7 sequence ["Gems", "Other"] 8 9 def execute 10 Barista::Log.info("gem1") { "start" } 11 sleep 0.3 12 Barista::Log.info("gem1") { "finish" } 13 end 14 end 15 16 @[Barista::BelongsTo(SequenceProject)] 17 private class Gem2 < Barista::Task 18 sequence ["Gems"] 19 20 def execute 21 Barista::Log.info("gem2") { "start" } 22 sleep 0.1 23 Barista::Log.info("gem2") { "finish" } 24 end 25 end 26 27 @[Barista::BelongsTo(SequenceProject)] 28 private class Gem3 < Barista::Task 29 dependency NonGem 30 sequence ["Gems"] 31 32 def execute 33 Barista::Log.info("gem3") { "start" } 34 sleep 0.2 35 Barista::Log.info("gem3") { "finish" } 36 end 37 end 38 39 @[Barista::BelongsTo(SequenceProject)] 40 private class NonGem < Barista::Task 41 sequence ["Other"] 42 43 def execute 44 Barista::Log.info("nongem") { "start" } 45 Barista::Log.info("nongem") { "finish" } 46 end 47 end 48 49 module Barista 50 describe "Sequence Groups" do 51 it "builds in order when providing sequences" do 52 project = SequenceProject.new 53 54 output = [] of String 55 56 project.tasks.map(&.new) 57 58 runner = Barista::Orchestrator.new(project.registry, workers: 4) 59 60 with_io do |io| 61 puts io 62 runner.execute 63 64 expected = [ 65 "gem1> start", 66 "gem1> finish", 67 "gem2> start", 68 "nongem> start", 69 "nongem> finish", 70 "gem2> finish", 71 "gem3> start", 72 "gem3> finish" 73 ] 74 75 regex = /#{expected.join("(.|\\n)*")}/m 76 io.to_s.should match(regex) 77 end 78 end 79 end 80 end