#
# Testing OpenWFE
#
# John Mettraux at openwfe.org
#
# Sun Oct 29 15:41:44 JST 2006
#
# Kita Yokohama
#

require 'rubygems'

require 'test/unit'

require 'openwfe/engine/engine'
require 'openwfe/def'
require 'openwfe/participants/storeparticipants'


class ConcurrenceAndParticipantTest < Test::Unit::TestCase

  def setup
    @engine = OpenWFE::Engine.new({
      :definition_in_launchitem_allowed => true })
  end

  #def teardown
  #end

  #
  # concurrence test

  class Hpc0 < OpenWFE::ProcessDefinition
    concurrence do
      #participant :alice
      #participant :bob
      alice
      bob
    end
  end

  def test_hpc_0

    @hpAlice = OpenWFE::HashParticipant.new
    @hpBob = OpenWFE::HashParticipant.new

    @engine.register_participant :alice, @hpAlice
    @engine.register_participant :bob, @hpBob

    @engine.launch Hpc0

    sleep 0.100

    assert_equal @hpAlice.size, 1
    assert_equal @hpBob.size, 1
  end

  def test_1

    @engine.register_participant :alice do |workitem|
      puts "alice in"
      sleep 0.100
      puts "alice out"
    end
    @engine.register_participant :bob do |workitem|
      puts "bob in"
      sleep 0.100
      puts "bob out"
    end

    @engine.launch Hpc0

    sleep 2
  end

end

