symbiote 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 1ec0549216f3d55f7e16bd2b37aed307395e9f60
4
+ data.tar.gz: cf2d54e3824dcafa388cb6efa9539670f4bbb9b4
5
+ SHA512:
6
+ metadata.gz: 0539a73d3ee9cdd64a84dff6bec77b3ca78b648c4206be051c2839fd32bdaf5f4a33d8e053fe705b9532228ddd6fa39c2d0822e830db0ab64c7010f6ebd15eca
7
+ data.tar.gz: e84ee2e270ca6c58a3166cbe00f9eecbdb7ff30343156a42e74687f8ce9c80464b991c5e79f340f1db05992ab44f891b2d77aaa5c8f5b8f5c6bae89c01d71e31
data/.gitignore ADDED
@@ -0,0 +1,19 @@
1
+ *.gem
2
+ *.rbc
3
+ .idea
4
+ .bundle
5
+ .config
6
+ .yardoc
7
+ Gemfile.lock
8
+ InstalledFiles
9
+ _yardoc
10
+ coverage
11
+ doc/
12
+ output/
13
+ lib/bundler/man
14
+ pkg
15
+ rdoc
16
+ spec/reports
17
+ test/tmp
18
+ test/version_tmp
19
+ tmp
data/.travis.yml ADDED
@@ -0,0 +1,14 @@
1
+ script: "rake"
2
+
3
+ rvm:
4
+ - 1.9.3
5
+ - 2.0.0
6
+
7
+ branches:
8
+ only:
9
+ - master
10
+ - develop
11
+
12
+ notifications:
13
+ recipients:
14
+ - jeffnyman@gmail.com
data/Gemfile ADDED
@@ -0,0 +1,6 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in symbiote.gemspec
4
+ gemspec
5
+
6
+ gem 'coveralls', require: false
data/HISTORY.md ADDED
@@ -0,0 +1,7 @@
1
+ Change Log and History
2
+ ======================
3
+
4
+ Version 0.1.0 / 2013-10-06
5
+ --------------------------
6
+
7
+ Initial development release of Symbiote. This initial release handles browser drivers, platform objects, and the start of the generators mechanism. Support is in place for both Watir-WebDriver and Selenium-WebDriver.
data/LICENSE.txt ADDED
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2013 Jeff Nyman
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,46 @@
1
+ Symbiote
2
+ ========
3
+
4
+ [![Build Status](https://secure.travis-ci.org/jnyman/symbiote.png)](http://travis-ci.org/jnyman/symbiote)
5
+ [![Dependency Status](https://gemnasium.com/jnyman/symbiote.png)](https://gemnasium.com/jnyman/symbiote)
6
+ [![Gem Version](https://badge.fury.io/rb/symbiote.png)](http://badge.fury.io/rb/symbiote)
7
+ [![Coverage Status](https://coveralls.io/repos/jnyman/symbiote/badge.png?branch=master)](https://coveralls.io/r/jnyman/symbiote)
8
+
9
+ Description
10
+ -----------
11
+
12
+ Symbiote is designed to be a more streamlined version of Symbiont. Specifically, it will be streamlined in terms of its feature set, based on lessons I learned during the development of Symbiont. The general interface that Symbiont exposed will still be available.
13
+
14
+ Installation
15
+ ------------
16
+
17
+ Add this line to your application's Gemfile:
18
+
19
+ gem 'symbiote'
20
+
21
+ And then execute:
22
+
23
+ $ bundle
24
+
25
+ Or install it yourself as:
26
+
27
+ $ gem install symbiote
28
+
29
+ Using Symbiote
30
+ --------------
31
+
32
+ See the [Symbiote wiki](https://github.com/jnyman/symbiote/wiki) for details on how to use the tool.
33
+
34
+ Contributing
35
+ ------------
36
+
37
+ 1. Fork the project.
38
+ 2. Create a branch for your change.
39
+ 3. Make your feature additions or bug fixes in your branch.
40
+ 4. Create unit tests (in spec) for your changes.
41
+ 5. Create acceptance tests (in specs) for your changes.
42
+ 6. Commit your changes.
43
+ 7. Push to the branch.
44
+ 8. Create a new [pull request](https://help.github.com/articles/using-pull-requests).
45
+
46
+ Do note that pull requests are very welcome and are considered better than bug reports. Please create a topic branch for every separate change that you make. When you make commits, do not change the rakefile, version or history information.
data/Rakefile ADDED
@@ -0,0 +1,22 @@
1
+ #!/usr/bin/env rake
2
+ require 'bundler/gem_tasks'
3
+ require 'rspec/core/rake_task'
4
+
5
+ namespace :spec do
6
+ desc 'Get file output for spec execution'
7
+ RSpec::Core::RakeTask.new('detail') do |config|
8
+ options = %w(--color)
9
+ options += %w(--format documentation)
10
+ options += %w(--format nested --out output/rspec-report.txt)
11
+ options += %w(--format html --out output/rspec-report.html)
12
+ config.rspec_opts = options
13
+ end
14
+ end
15
+
16
+ RSpec::Core::RakeTask.new do |config|
17
+ options = %w(--color)
18
+ options += %w(--format documentation)
19
+ config.rspec_opts = options
20
+ end
21
+
22
+ task :default => :spec
@@ -0,0 +1,8 @@
1
+ module Symbiote
2
+ module Errors
3
+
4
+ class UnableToCreatePlatform < StandardError; end
5
+ class TitleNotMatched < StandardError; end
6
+
7
+ end
8
+ end
@@ -0,0 +1,21 @@
1
+ module Symbiote
2
+ module Generators
3
+
4
+ def url_is(url)
5
+ define_method('view') do
6
+ platform.visit(url)
7
+ end
8
+ end
9
+
10
+ def title_is(title)
11
+ define_method('has_title?') do
12
+ validation_msg = "Expected title: '#{title}'; Actual title: '#{browser.title}'"
13
+ valid_title = title == browser.title if title.kind_of?(String)
14
+ valid_title = title =~ browser.title if title.kind_of?(Regexp)
15
+ raise Errors::TitleNotMatched, validation_msg unless valid_title
16
+ valid_title
17
+ end
18
+ end
19
+
20
+ end
21
+ end
@@ -0,0 +1,5 @@
1
+ module Symbiote
2
+ def self.trace(message, level=1)
3
+ puts('*' * level + " #{message}") if ENV['TRACE'] == 'on'
4
+ end
5
+ end
@@ -0,0 +1,21 @@
1
+ module Symbiote
2
+ module Platforms
3
+ module SeleniumWebDriver
4
+ class PlatformObject
5
+
6
+ attr_reader :browser
7
+
8
+ def initialize(browser)
9
+ @browser = browser
10
+ end
11
+
12
+ ## Browser-Level Actions ##
13
+
14
+ def visit(url)
15
+ browser.navigate.to(url)
16
+ end
17
+
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,18 @@
1
+ module Symbiote
2
+ module Platforms
3
+ module SeleniumWebDriver
4
+
5
+ def self.create_platform_object_for(browser)
6
+ require 'symbiote/platform_selenium/platform_object'
7
+ return SeleniumWebDriver::PlatformObject.new(browser)
8
+ end
9
+
10
+ def self.works_with(browser)
11
+ browser.is_a?(::Selenium::WebDriver::Driver)
12
+ end
13
+
14
+ end
15
+ end
16
+ end
17
+
18
+ Symbiote::Platforms.register(:selenium_webdriver, Symbiote::Platforms::SeleniumWebDriver)
@@ -0,0 +1,21 @@
1
+ module Symbiote
2
+ module Platforms
3
+ module WatirWebDriver
4
+ class PlatformObject
5
+
6
+ attr_reader :browser
7
+
8
+ def initialize(browser)
9
+ @browser = browser
10
+ end
11
+
12
+ ## Browser-Level Actions ##
13
+
14
+ def visit(url)
15
+ browser.goto(url)
16
+ end
17
+
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,18 @@
1
+ module Symbiote
2
+ module Platforms
3
+ module WatirWebDriver
4
+
5
+ def self.create_platform_object_for(browser)
6
+ require 'symbiote/platform_watir/platform_object'
7
+ return WatirWebDriver::PlatformObject.new(browser)
8
+ end
9
+
10
+ def self.works_with(browser)
11
+ browser.is_a?(::Watir::Browser)
12
+ end
13
+
14
+ end
15
+ end
16
+ end
17
+
18
+ Symbiote::Platforms.register(:watir_webdriver, Symbiote::Platforms::WatirWebDriver)
@@ -0,0 +1,31 @@
1
+ module Symbiote
2
+ module Platforms
3
+
4
+ @drivers = {}
5
+
6
+ def self.list
7
+ @drivers
8
+ end
9
+
10
+ def self.register(driver, platform)
11
+ @drivers[driver] = platform
12
+ end
13
+
14
+ # This module determines what execution platform Symbiote will use.
15
+ # The decision is based on the browser that has been established for
16
+ # the execution profile.
17
+ #
18
+ # @param [Object] browser the browser to establish the platform for
19
+ # @returns [Object] a platform object to execute tests against
20
+ def get_platform_for(browser)
21
+ Symbiote::Platforms.list.each_value do |driver|
22
+ return driver.create_platform_object_for(browser) if driver.works_with(browser)
23
+ end
24
+ raise Errors::UnableToCreatePlatform, "Unable to create a platform object for #{browser}"
25
+ end
26
+
27
+ end
28
+ end
29
+
30
+ require 'symbiote/platform_watir'
31
+ require 'symbiote/platform_selenium'
@@ -0,0 +1,3 @@
1
+ module Symbiote
2
+ VERSION = '0.1.0'
3
+ end
data/lib/symbiote.rb ADDED
@@ -0,0 +1,65 @@
1
+ require 'symbiote/version'
2
+ require 'symbiote/logger'
3
+ require 'symbiote/errors'
4
+ require 'symbiote/platforms'
5
+ require 'symbiote/generators'
6
+
7
+ require 'watir-webdriver'
8
+ require 'selenium-webdriver'
9
+
10
+ module Symbiote
11
+ include Platforms
12
+
13
+ # @return [Object] platform reference
14
+ # [Symbiont::Platforms::WatirWebDriver::PlatformObject]
15
+ # [Symbiont::Platforms::SeleniumWebDriver::PlatformObject]
16
+ attr_reader :platform
17
+
18
+ # @return [Object] browser reference
19
+ # [Watir::Browser]
20
+ # [Selenium::WebDriver::Driver]
21
+ attr_reader :browser
22
+
23
+ def self.version
24
+ "Symbiote v#{Symbiote::VERSION}"
25
+ end
26
+
27
+ # The included callback is used to provide the core functionality of the
28
+ # library to any class or module that includes the Symbiote library. The
29
+ # calling class or module is extended with logic that the library makes
30
+ # available as class methods. Those methods will be available only in
31
+ # the context of the class (definition) that included Symbiote.
32
+ def self.included(caller)
33
+ Symbiote.trace("#{caller.class} #{caller} attached the Symbiote")
34
+ caller.extend Symbiote::Generators
35
+ end
36
+
37
+ # The initialize method will be invoked when a page definition includes
38
+ # Symbiote. A few key things are happening here that are critical to
39
+ # everything working properly:
40
+ # (1) A browser instance is being created.
41
+ # (2) A platform object is created for that browser.
42
+ #
43
+ # @param [Object] browser a browser instance with a tool driver
44
+ def initialize(browser=nil)
45
+ @browser = browser
46
+ @browser = Watir::Browser.new if browser.nil? or browser == :watir
47
+ @browser = Selenium::WebDriver.for :firefox if browser == :selenium
48
+
49
+ Symbiote::trace("Symbiote attached to browser: #{@browser}")
50
+
51
+ establish_platform_object_for(@browser)
52
+ end
53
+
54
+ private
55
+
56
+ # This method is crucial in that it sets up the platform instance that
57
+ # will be used by just about every module that makes calls to any
58
+ # platform-specific functionality.
59
+ #
60
+ # @param [Object] browser a browser instance with a tool driver
61
+ def establish_platform_object_for(browser)
62
+ @platform = get_platform_for(browser)
63
+ end
64
+
65
+ end
@@ -0,0 +1,33 @@
1
+ # coding: utf-8
2
+ $LOAD_PATH.unshift(File.expand_path('../lib', File.dirname(__FILE__)))
3
+
4
+ require 'coveralls'
5
+ Coveralls.wear!
6
+
7
+ unless ENV['CI']
8
+ require 'simplecov'
9
+
10
+ SimpleCov.formatter = SimpleCov::Formatter::MultiFormatter[
11
+ SimpleCov::Formatter::HTMLFormatter,
12
+ Coveralls::SimpleCov::Formatter
13
+ ]
14
+ SimpleCov.start
15
+ end
16
+
17
+ require 'symbiote'
18
+ require 'watir-webdriver'
19
+ require 'selenium-webdriver'
20
+
21
+ def mock_browser_for_watir
22
+ watir_browser = double('watir')
23
+ watir_browser.stub(:is_a?).with(Watir::Browser).and_return(true)
24
+ watir_browser.stub(:is_a?).with(Selenium::WebDriver::Driver).and_return(false)
25
+ watir_browser
26
+ end
27
+
28
+ def mock_browser_for_selenium
29
+ selenium_browser = double('selenium')
30
+ selenium_browser.stub(:is_a?).with(Watir::Browser).and_return(false)
31
+ selenium_browser.stub(:is_a?).with(Selenium::WebDriver::Driver).and_return(true)
32
+ selenium_browser
33
+ end
@@ -0,0 +1,63 @@
1
+ require_relative '../spec_helper'
2
+
3
+ class PageGenerators
4
+ include Symbiote
5
+
6
+ url_is 'http://localhost:4567'
7
+ title_is 'Symbiote'
8
+ end
9
+
10
+ describe Symbiote::Generators do
11
+ let(:watir_browser) { mock_browser_for_watir }
12
+ let(:watir_definition) { PageGenerators.new(watir_browser) }
13
+
14
+ let(:selenium_browser) { mock_browser_for_selenium }
15
+ let(:selenium_definition) { PageGenerators.new(selenium_browser) }
16
+
17
+ context 'any page definition' do
18
+ context 'providing a page title to be verified' do
19
+ it 'should specify and verify the page title' do
20
+ watir_browser.should_receive(:title).twice.and_return('Symbiote')
21
+ watir_definition.has_title?
22
+
23
+ selenium_browser.should_receive(:title).twice.and_return('Symbiote')
24
+ selenium_definition.has_title?
25
+ end
26
+
27
+ it 'should raise an error if the page title is not verified' do
28
+ msg = "Expected title: 'Symbiote'; Actual title: 'Testing'"
29
+ watir_browser.should_receive(:title).twice.and_return('Testing')
30
+ expect { watir_definition.has_title? }.to raise_error(Symbiote::Errors::TitleNotMatched, msg)
31
+ end
32
+
33
+ it 'should validate the title if provided a regular expression' do
34
+ class QuickDefinition
35
+ include Symbiote
36
+ title_is (/\w+/)
37
+ end
38
+
39
+ selenium_browser.should_receive(:title).twice.and_return('Symbiote')
40
+ QuickDefinition.new(selenium_browser).has_title?
41
+ end
42
+ end
43
+ end
44
+
45
+ context 'a definition using watir-webdriver' do
46
+ context 'providing a url' do
47
+ it 'should navigate to the page when viewed' do
48
+ watir_browser.should_receive(:goto)
49
+ watir_definition.view
50
+ end
51
+ end
52
+ end
53
+
54
+ context 'a definition using selenium-webdriver' do
55
+ context 'providing a url' do
56
+ it 'should navigate to the page when viewed' do
57
+ selenium_browser.should_receive(:navigate).and_return(selenium_browser)
58
+ selenium_browser.should_receive(:to)
59
+ selenium_definition.view
60
+ end
61
+ end
62
+ end
63
+ end
@@ -0,0 +1,31 @@
1
+ require_relative '../spec_helper'
2
+
3
+ class PageDefinition
4
+ include Symbiote
5
+ end
6
+
7
+ describe Symbiote do
8
+ let(:watir_browser) { mock_browser_for_watir }
9
+ let(:selenium_browser) { mock_browser_for_selenium }
10
+ let(:watir_definition) { PageDefinition.new(watir_browser) }
11
+ let(:selenium_definition) { PageDefinition.new(selenium_browser) }
12
+
13
+ context 'a definition using watir-webdriver' do
14
+ it 'should return a watir platform object' do
15
+ watir_definition.platform.should be_kind_of Symbiote::Platforms::WatirWebDriver::PlatformObject
16
+ end
17
+ end
18
+
19
+ context 'a definition using selenium-webdriver' do
20
+ it 'should return a selenium platform object' do
21
+ selenium_definition.platform.should be_kind_of Symbiote::Platforms::SeleniumWebDriver::PlatformObject
22
+ end
23
+ end
24
+
25
+ context 'a definition using an unrecognized driver' do
26
+ it 'should raise an exception' do
27
+ msg = 'Unable to create a platform object for unknown_browser'
28
+ expect { PageDefinition.new(:unknown_browser) }.to raise_error(Symbiote::Errors::UnableToCreatePlatform, msg)
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,7 @@
1
+ require_relative '../spec_helper'
2
+
3
+ describe Symbiote do
4
+ it 'should return version information' do
5
+ Symbiote.version.should == "Symbiote v#{Symbiote::VERSION}"
6
+ end
7
+ end
data/symbiote.gemspec ADDED
@@ -0,0 +1,31 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'symbiote/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = 'symbiote'
8
+ spec.version = Symbiote::VERSION
9
+ spec.platform = Gem::Platform::RUBY
10
+ spec.author = 'Jeff Nyman'
11
+ spec.email = 'jeffnyman@gmail.com'
12
+ spec.description = 'Provides a DSL to construct a fluent interface for test execution libraries.'
13
+ spec.summary = 'An endosymbiotic facultative library for web application testing.'
14
+ spec.homepage = 'https://github.com/jnyman/symbiote'
15
+ spec.license = 'MIT'
16
+
17
+ spec.files = `git ls-files`.split($/)
18
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
19
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
20
+ spec.require_paths = %w(lib)
21
+
22
+ spec.required_ruby_version = '>= 1.9.3'
23
+
24
+ spec.add_development_dependency 'bundler', '~> 1.3'
25
+ spec.add_development_dependency 'rake'
26
+ spec.add_development_dependency 'rspec', '~> 2.14.1'
27
+ spec.add_development_dependency 'simplecov', '~> 0.7'
28
+
29
+ spec.add_runtime_dependency 'watir-webdriver', '0.6.4'
30
+ spec.add_runtime_dependency 'selenium-webdriver', '2.35.1'
31
+ end
metadata ADDED
@@ -0,0 +1,154 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: symbiote
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Jeff Nyman
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2013-10-06 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ~>
18
+ - !ruby/object:Gem::Version
19
+ version: '1.3'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ~>
25
+ - !ruby/object:Gem::Version
26
+ version: '1.3'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - '>='
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - '>='
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rspec
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ~>
46
+ - !ruby/object:Gem::Version
47
+ version: 2.14.1
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ~>
53
+ - !ruby/object:Gem::Version
54
+ version: 2.14.1
55
+ - !ruby/object:Gem::Dependency
56
+ name: simplecov
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ~>
60
+ - !ruby/object:Gem::Version
61
+ version: '0.7'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ~>
67
+ - !ruby/object:Gem::Version
68
+ version: '0.7'
69
+ - !ruby/object:Gem::Dependency
70
+ name: watir-webdriver
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - '='
74
+ - !ruby/object:Gem::Version
75
+ version: 0.6.4
76
+ type: :runtime
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - '='
81
+ - !ruby/object:Gem::Version
82
+ version: 0.6.4
83
+ - !ruby/object:Gem::Dependency
84
+ name: selenium-webdriver
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - '='
88
+ - !ruby/object:Gem::Version
89
+ version: 2.35.1
90
+ type: :runtime
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - '='
95
+ - !ruby/object:Gem::Version
96
+ version: 2.35.1
97
+ description: Provides a DSL to construct a fluent interface for test execution libraries.
98
+ email: jeffnyman@gmail.com
99
+ executables: []
100
+ extensions: []
101
+ extra_rdoc_files: []
102
+ files:
103
+ - .gitignore
104
+ - .travis.yml
105
+ - Gemfile
106
+ - HISTORY.md
107
+ - LICENSE.txt
108
+ - README.md
109
+ - Rakefile
110
+ - lib/symbiote.rb
111
+ - lib/symbiote/errors.rb
112
+ - lib/symbiote/generators.rb
113
+ - lib/symbiote/logger.rb
114
+ - lib/symbiote/platform_selenium.rb
115
+ - lib/symbiote/platform_selenium/platform_object.rb
116
+ - lib/symbiote/platform_watir.rb
117
+ - lib/symbiote/platform_watir/platform_object.rb
118
+ - lib/symbiote/platforms.rb
119
+ - lib/symbiote/version.rb
120
+ - spec/spec_helper.rb
121
+ - spec/symbiote/generators_spec.rb
122
+ - spec/symbiote/platform_object_spec.rb
123
+ - spec/symbiote/symbiote_spec.rb
124
+ - symbiote.gemspec
125
+ homepage: https://github.com/jnyman/symbiote
126
+ licenses:
127
+ - MIT
128
+ metadata: {}
129
+ post_install_message:
130
+ rdoc_options: []
131
+ require_paths:
132
+ - lib
133
+ required_ruby_version: !ruby/object:Gem::Requirement
134
+ requirements:
135
+ - - '>='
136
+ - !ruby/object:Gem::Version
137
+ version: 1.9.3
138
+ required_rubygems_version: !ruby/object:Gem::Requirement
139
+ requirements:
140
+ - - '>='
141
+ - !ruby/object:Gem::Version
142
+ version: '0'
143
+ requirements: []
144
+ rubyforge_project:
145
+ rubygems_version: 2.0.2
146
+ signing_key:
147
+ specification_version: 4
148
+ summary: An endosymbiotic facultative library for web application testing.
149
+ test_files:
150
+ - spec/spec_helper.rb
151
+ - spec/symbiote/generators_spec.rb
152
+ - spec/symbiote/platform_object_spec.rb
153
+ - spec/symbiote/symbiote_spec.rb
154
+ has_rdoc: