benbjohnson / melomel

External ActionScript Interface.
https://github.com/benbjohnson/melomel/wiki
Other
42 stars 8 forks source link

Suggestions for cucumber step definitions #43

Open laran opened 13 years ago

laran commented 13 years ago

Cucumber steps right now are like this:

When I click the "foo" button

I have components which sometimes have an id, sometimes a label, sometimes a title, sometimes a name. The steps right now only support label or id.

So, I'd like to suggest a more descriptive format.

When I click the button named "foo"
When I click the button labeled "foo"
When I click the button identified by "foo"
When I click the button titled "foo"

I think this is much more explicit and easy to work with.

I've created steps similar to these locally and they help.

Also, I sometimes have trouble getting handles on components in windows. So I've added steps like this:

When I click the button named "foo" in the window titled "New Thing"

I'd like to suggest adding these steps as well.

laran commented 13 years ago

Here's some code for those steps if you want to integrate it:

When /^I click the (check box|button|radio button|pop up button|pop up menu button) (named|labeled|titled|identified by) "([^"]*)"$/ do |component_type, component_field_type, component_field_value|
  Melomel::Cucumber.run! do
    component = nil
    classes = Melomel::Flex.get_component_classes(component_type)
    case component_field_type
      when 'named'
        component = Melomel::Cucumber.find_by_name!(classes, component_field_value)
      when 'titled'
        component = Melomel::Cucumber.find_by_title!(classes, component_field_value)
      when 'identified by'
        component = Melomel::Cucumber.find_by_id!(classes, component_field_value)
      when 'labeled'
        component = Melomel::Cucumber.find_by_label!(classes, component_field_value)
    end
    Melomel.click(component)
  end
end

When /^I type "([^"]*)" in the (text field|text area) (named|labeled|titled|identified by) "([^"]*)"$/ do |text, component_type, component_field_type, component_field_value|
  Melomel::Cucumber.run! do
    component = nil
    classes = Melomel::Flex.get_component_classes(component_type)

    case component_field_type
      when 'named'
        component = Melomel::Cucumber.find_by_name!(classes, component_field_value)
      when 'titled'
        component = Melomel::Cucumber.find_by_title!(classes, component_field_value)
      when 'identified by'
        component = Melomel::Cucumber.find_by_id!(classes, component_field_value)
      when 'labeled'
        component = Melomel::Cucumber.find_labeled!(classes, component_field_value)
    end

    component.setFocus()
    component.text = text
  end
end

When /^I select "([^"]*)" on the (list|combo box) (named|titled|identified by|labeled) "([^"]*)" in the window (named|titled|identified by|labeled) "([^"]*)"$/ do |value, component_type, component_field_name, component_field_value, window_field_name, window_field_value|
  Melomel::Cucumber.run! do
    window = nil
    case window_field_name
      when 'named'
        window = Melomel.find!("mx.containers.TitleWindow", :name => window_field_value)
      when 'titled'
        window = Melomel.find!("mx.containers.TitleWindow", :title => window_field_value)
      when 'identified by'
        window = Melomel.find!("mx.containers.TitleWindow", :id => window_field_value)
      when 'labeled'
        window = Melomel.find!("mx.containers.TitleWindow", :label => window_field_value)
    end

    component = nil
    classes = Melomel::Flex.get_component_classes(component_type)

    case component_field_name
      when 'named'
        component = Melomel.find!(classes, window, :name => component_field_value)
      when 'titled'
        component = Melomel.find!(classes, window, :title => component_field_value)
      when 'identified by'
        component = Melomel.find!(classes, window, :id => component_field_value)
      when 'labeled'
        component = Melomel.find!(classes, window, :label => component_field_value)
    end

    component.setFocus()

    labels = Melomel.items_to_labels!(component, component.dataProvider)

    # Loop over labels and set the selected index when we find a match
    index = nil
    labels.length.times do |i|
      if labels[i] == value
        index = i
      end
    end
    raise "Cannot find '#{value}' on #{component_type}" if index.nil?

    component.selectedIndex = index
  end
end

When /^I click the (check box|button|radio button|pop up button|pop up menu button) (named|titled|identified by|labeled) "([^"]*)" in the window (named|titled|identified by|labeled) "([^"]*)"$/ do |component_type, component_field_name, component_field_value, window_field_name, window_field_value|
  Melomel::Cucumber.run! do
    window = nil
    case window_field_name
      when 'named'
        window = Melomel.find!("mx.containers.TitleWindow", :name => window_field_value)
      when 'titled'
        window = Melomel.find!("mx.containers.TitleWindow", :title => window_field_value)
      when 'identified by'
        window = Melomel.find!("mx.containers.TitleWindow", :id => window_field_value)
      when 'labeled'
        window = Melomel.find!("mx.containers.TitleWindow", :label => window_field_value)
    end

    component = nil
    classes = Melomel::Flex.get_component_classes(component_type)

    case component_field_name
      when 'named'
        component = Melomel::Cucumber.find_by_name!(classes, component_field_value, window)
      when 'titled'
        component = Melomel::Cucumber.find_by_title!(classes, component_field_value, window)
      when 'identified by'
        component = Melomel::Cucumber.find_by_id!(classes, component_field_value, window)
      when 'labeled'
        component = Melomel::Cucumber.find_by_label!(classes, component_field_value, window)
    end

    component.setFocus()
    Melomel.click(component)
  end
end