# Run a Zucchini feature Zucchini = (featureText, orientation) ->

rotateTo(orientation)

sections = featureText.trim().split(/\n\s*\n/)

for section in sections
  lines = section.split(/\n/)

  screenMatch = lines[0].match(/.+ on the "([^"]*)" screen:$/)
  raise "Line '#{lines[0]}' doesn't define a screen context" unless screenMatch

  screenName = screenMatch[1]
  try
    screen = eval("new #{screenName.camelCase()}Screen")
  catch e
    raise "Screen '#{screenName}' not defined"

  if screen.anchor
    if wait(screen.anchor)
      $.log "Found anchor for screen '#{screenName}'"
    else
      raise "Could not find anchor for screen '#{screenName}'"

  for line in lines.slice(1)
     functionFound = false
     for regExpText, func of screen.actions
        match = line.trim().match(new RegExp(regExpText))
        if match
          functionFound = true
          func.bind(screen)(match[1],match[2])
     raise "Action for line '#{line}' not defined" unless functionFound