Ifd_Mobile 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (52) hide show
  1. checksums.yaml +7 -0
  2. data/bin/Ifd_Mobile +25 -0
  3. data/bin/generate.rb +20 -0
  4. data/bin/helper.rb +51 -0
  5. data/lib/Ifd_Mobile.rb +1 -0
  6. data/lib/Ifd_Mobile/methods/IFD_Assertion.rb +44 -0
  7. data/lib/Ifd_Mobile/methods/core.rb +128 -0
  8. data/lib/Ifd_Mobile/methods/lib_var.rb +54 -0
  9. data/lib/Ifd_Mobile/methods/required_files.rb +18 -0
  10. data/lib/Ifd_Mobile/version.rb +5 -0
  11. data/project/Gemfile +7 -0
  12. data/project/Gemfile.lock +182 -0
  13. data/project/apps/TestApp/Default-568h@2x.png +0 -0
  14. data/project/apps/TestApp/Test App 2/GestureTestViewController.h +18 -0
  15. data/project/apps/TestApp/Test App 2/GestureTestViewController.m +48 -0
  16. data/project/apps/TestApp/Test App 2/GestureTestViewController.xib +47 -0
  17. data/project/apps/TestApp/Test App 2/MyViewControllerViewController.h +42 -0
  18. data/project/apps/TestApp/Test App 2/MyViewControllerViewController.m +193 -0
  19. data/project/apps/TestApp/Test App 2/TA2AppDelegate.h +28 -0
  20. data/project/apps/TestApp/Test App 2/TA2AppDelegate.m +85 -0
  21. data/project/apps/TestApp/Test App 2/TestApp-Info.plist +40 -0
  22. data/project/apps/TestApp/Test App 2/TestApp-Prefix.pch +29 -0
  23. data/project/apps/TestApp/Test App 2/en.lproj/InfoPlist.strings +21 -0
  24. data/project/apps/TestApp/Test App 2/en.lproj/Localizable.strings +0 -0
  25. data/project/apps/TestApp/Test App 2/en.lproj/MyViewControllerViewController.xib +175 -0
  26. data/project/apps/TestApp/Test App 2/main.m +31 -0
  27. data/project/apps/TestApp/TestApp.xcodeproj/project.pbxproj +336 -0
  28. data/project/apps/TestApp/TestApp.xcodeproj/project.xcworkspace/contents.xcworkspacedata +7 -0
  29. data/project/apps/TestApp/TestApp.xcodeproj/project.xcworkspace/xcuserdata/anhpham.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
  30. data/project/apps/TestApp/TestApp.xcodeproj/xcuserdata/anhpham.xcuserdatad/xcschemes/TestApp.xcscheme +88 -0
  31. data/project/apps/TestApp/TestApp.xcodeproj/xcuserdata/anhpham.xcuserdatad/xcschemes/xcschememanagement.plist +22 -0
  32. data/project/apps/TestApp/build/release-iphonesimulator/TestApp.app/Default-568h@2x.png +0 -0
  33. data/project/apps/TestApp/build/release-iphonesimulator/TestApp.app/GestureTestViewController.nib/objects-8.0+.nib +0 -0
  34. data/project/apps/TestApp/build/release-iphonesimulator/TestApp.app/GestureTestViewController.nib/objects.nib +0 -0
  35. data/project/apps/TestApp/build/release-iphonesimulator/TestApp.app/GestureTestViewController.nib/runtime.nib +0 -0
  36. data/project/apps/TestApp/build/release-iphonesimulator/TestApp.app/Info.plist +0 -0
  37. data/project/apps/TestApp/build/release-iphonesimulator/TestApp.app/PkgInfo +1 -0
  38. data/project/apps/TestApp/build/release-iphonesimulator/TestApp.app/TestApp +0 -0
  39. data/project/apps/TestApp/build/release-iphonesimulator/TestApp.app/en.lproj/InfoPlist.strings +0 -0
  40. data/project/apps/TestApp/build/release-iphonesimulator/TestApp.app/en.lproj/Localizable.strings +0 -0
  41. data/project/apps/TestApp/build/release-iphonesimulator/TestApp.app/en.lproj/MyViewControllerViewController.nib/objects-8.0+.nib +0 -0
  42. data/project/apps/TestApp/build/release-iphonesimulator/TestApp.app/en.lproj/MyViewControllerViewController.nib/objects.nib +0 -0
  43. data/project/apps/TestApp/build/release-iphonesimulator/TestApp.app/en.lproj/MyViewControllerViewController.nib/runtime.nib +0 -0
  44. data/project/apps/selendroid-test-app.apk +0 -0
  45. data/project/features/android/Android_test.feature +10 -0
  46. data/project/features/iOS/iOS_test.feature +11 -0
  47. data/project/features/step_definitions/repositories/android_ob_test.rb +2 -0
  48. data/project/features/step_definitions/repositories/ios_ob_test.rb +3 -0
  49. data/project/features/support/env.rb +7 -0
  50. data/project/features/support/hooks.rb +24 -0
  51. data/project/features/support/project_env.rb +38 -0
  52. metadata +155 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 75300afffa75f08d742347b89ebbe42b5e93a182
4
+ data.tar.gz: 8c78f077195b76b79b36cf13de67679a3dcbfd10
5
+ SHA512:
6
+ metadata.gz: d866778a69376b908f9c6c89a44ad7d02670f2f544a0a18df06d3fd6e1accb2f89c78f108feb1eb6bb57aab39f48ca36ba2e6b638787caea3b97846ce707fa7b
7
+ data.tar.gz: 88f04e329e02a5077cabc8b2c247924282eb4e7e6734313bcd7b13d23e8731ebeb702feaae4cb5689fb25085bf5e8f06ec871f7cd629dde937518e922d17ec81
data/bin/Ifd_Mobile ADDED
@@ -0,0 +1,25 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require_relative 'helper.rb'
4
+ require_relative 'generate.rb'
5
+ require 'Ifd_Mobile/version'
6
+
7
+ @features_dir = File.join(FileUtils.pwd, "project")
8
+ @source_dir = File.join(File.dirname(__FILE__), '..', 'project')
9
+
10
+ if (ARGV.length == 0)
11
+ print_usage
12
+ else
13
+ cmd = ARGV.shift
14
+
15
+ if cmd == "help"
16
+ print_help
17
+ elsif cmd == "gen"
18
+ ifd_mobile_scaffold
19
+ elsif cmd == "version"
20
+ puts Ifd::Mobile::VERSION
21
+ else
22
+ print_usage
23
+ end
24
+ end
25
+
data/bin/generate.rb ADDED
@@ -0,0 +1,20 @@
1
+
2
+ def ifd_mobile_scaffold
3
+ if File.exists?(@features_dir)
4
+ puts "A features directory already exists. Stopping..."
5
+ exit 1
6
+ end
7
+ msg("Question") do
8
+ puts "I'm about to create a subdirectory called features."
9
+ puts "features will contain all your project tests."
10
+ puts "Please hit return to confirm that's what you want."
11
+ end
12
+ exit 2 unless STDIN.gets.chomp == ''
13
+
14
+ FileUtils.cp_r(@source_dir, @features_dir)
15
+
16
+ msg("Info") do
17
+ puts "features subdirectory created. \n"
18
+ end
19
+
20
+ end
data/bin/helper.rb ADDED
@@ -0,0 +1,51 @@
1
+ require 'tempfile'
2
+ require 'json'
3
+ require "rubygems"
4
+
5
+ def msg(title, &block)
6
+ puts "\n" + "-"*10 + title + "-"*10
7
+ block.call
8
+ puts "-"*10 + "-------" + "-"*10 + "\n"
9
+ end
10
+
11
+ def print_usage
12
+ puts <<EOF
13
+
14
+ Usage: Ifd_Mobile <command-name> [parameters] [options]
15
+
16
+ <command-name> can be one of
17
+ help
18
+ prints more detailed help information.
19
+ gen
20
+ generate a features folder structure.
21
+ version
22
+ prints the gem version
23
+
24
+ <options> can be
25
+ -v, --verbose Turns on verbose logging
26
+ EOF
27
+ end
28
+
29
+ def print_help
30
+ puts <<EOF
31
+
32
+ Usage: Ifd_Mobile <command-name> [parameters] [options]
33
+
34
+ <command-name> can be one of
35
+ help
36
+ gen
37
+ version
38
+
39
+ Commands:
40
+ help : prints more detailed help information.
41
+
42
+ gen : creates a features dir. This is usually used once when
43
+ setting up ifd-mobile to ensure that the features folder contains
44
+ the right step definitions and environment to run with cucumber.
45
+
46
+ version : prints the gem version
47
+
48
+ <Options>
49
+ -v, --verbose Turns on verbose logging
50
+ EOF
51
+ end
data/lib/Ifd_Mobile.rb ADDED
@@ -0,0 +1 @@
1
+ Dir[File.dirname(__FILE__) + '/Ifd_Mobile/*.rb'].each { |file| require file }
@@ -0,0 +1,44 @@
1
+ # include Test::Unit::Assertions
2
+ class IFD_Assertion
3
+ # Assert 2 values
4
+ def self.reg_compare sActual, regValue, isSpecialChar=false
5
+ begin
6
+ if !isSpecialChar
7
+ sActual = sActual.strip
8
+ regValue = regValue.strip.gsub("[", "\\[").gsub("]", "\\]").gsub("(", "\\(").gsub(")", "\\)").gsub(">", "\\>")
9
+ end
10
+ rescue StandardError => myStandardError
11
+ put_log "\n>>> Error: #{myStandardError}"
12
+ end
13
+
14
+ # put_log "\nsActual:#{sActual}, regValue:#{regValue}"
15
+ if ((sActual.nil? and regValue.nil?) or (!sActual.nil? and sActual.empty? and !regValue.nil? and regValue.empty?))
16
+ return true
17
+ end
18
+
19
+ if ((sActual.nil? and !regValue.nil?) or (!sActual.nil? and regValue.nil?))
20
+ return false
21
+ end
22
+
23
+ if (!sActual.nil? and !sActual.empty?)
24
+ sCookActual = sActual.gsub(/\n|\r/, " ")
25
+ if (sCookActual == regValue or (isSpecialChar and sCookActual.include? regValue) or (!isSpecialChar and sCookActual =~ /^.*#{regValue}.*$/))
26
+ return true
27
+ end
28
+ end
29
+
30
+ return false
31
+ end
32
+
33
+ def self.assert_string_contain(expected, actual)
34
+ unless (actual.to_s).include? (expected.to_s)
35
+ raise ("*** ASSERTION ERROR: \nExpected: #{expected}. \nGot: #{actual}.")
36
+ end
37
+ end
38
+
39
+ def self.assert_string_equal(expected, actual)
40
+ if expected.to_s != actual.to_s
41
+ raise ("*** ASSERTION ERROR: \nExpected: #{expected}. \nGot: #{actual}.")
42
+ end
43
+ end
44
+ end
@@ -0,0 +1,128 @@
1
+ $_RP_OBJECT = {}
2
+
3
+ def call_step str_step
4
+ put_log "\n-=> call step: #{str_step}"
5
+ step %{#{str_step}}
6
+ end
7
+
8
+ def put_log str
9
+ puts str if $_CONFIG['Print Log'] == true
10
+ end
11
+
12
+ def find_object string_object
13
+ startTime = Time.new.to_i
14
+ string_object = string_object.gsub(/"/, "'")
15
+ # puts string_object
16
+ locator_matching = /(.*?)(\{.*?\})/.match(string_object)
17
+ # puts "locator_matching : #{locator_matching}"
18
+ dyn_pros = {}
19
+ if locator_matching != nil
20
+ string_object = locator_matching[1]
21
+ eval(locator_matching[2].gsub(/['][\s,\t]*?:[\s,\t]*?[']?/, "'=>'")).each { |k, v|
22
+ dyn_pros[k.to_s.upcase] = v
23
+ }
24
+ end
25
+ hash_object = $_RP_OBJECT[string_object]
26
+ puts hash_object
27
+ if hash_object == nil
28
+ put_log ">>> OBJECT NAME MAYBE NOT FOUND!!!"
29
+ true.should eq false
30
+ end
31
+ attribute = {}
32
+ if hash_object != nil
33
+ hash_object.each { |k, v|
34
+ k = k.to_s
35
+ if k =~ /ph_/i
36
+ if dyn_pros[k] != nil
37
+ # Assign place holder value to place holder property, also remove prefix ph_ from property key,
38
+ # also remove this pl from dyn_pros <= should be consider to continue transfer into inner object in relation
39
+ if v =~ /<ph_value>/i
40
+ attribute[k[3..k.size-1]] = v.gsub(/<ph_value>/i, dyn_pros[k])
41
+ else
42
+ attribute[k[3..k.size-1]] = dyn_pros[k]
43
+ end
44
+ dyn_pros.delete(k)
45
+ end
46
+ else
47
+ attribute[k.to_s] = v
48
+ end
49
+ }
50
+ end
51
+ # put_log string_object
52
+ put_log "\nattribute: #{attribute}"
53
+
54
+ attribute.each { |key, value|
55
+ $element_tag = key
56
+ $element_value = value
57
+ }
58
+ return selenium.find_element($element_tag, $element_value)
59
+ end
60
+
61
+ def execute_click element
62
+ found_element = find_object element
63
+ if found_element != nil
64
+ begin
65
+ found_element.click
66
+ rescue StandardError => myStandardError
67
+ put_log "\nERROR: *** #{myStandardError}"
68
+ end
69
+ else
70
+ put_log "\nERROR: *** not found object: #{element}"
71
+ end
72
+ end
73
+
74
+ def execute_settext element, text
75
+ found_element = find_object element
76
+ if found_element != nil
77
+ begin
78
+ found_element.send_keys(text)
79
+ rescue StandardError => myStandardError
80
+ put_log "\nERROR: *** #{myStandardError}"
81
+ end
82
+ else
83
+ put_log "\nERROR: *** not found object: #{element}"
84
+ exit
85
+ end
86
+ end
87
+
88
+ def execute_checkproperty element, property, negate, value
89
+ found_element = find_object element
90
+ check = false
91
+ if found_element == nil and value == ""
92
+ check = true
93
+ expect(check).to eq true
94
+ else
95
+ put_log "\n*** Execute_CheckProperty: finish to found element"
96
+ if found_element != nil
97
+ if property.upcase == 'VALUE'
98
+ actual_value = found_element.attribute("value")
99
+ elsif property.upcase == 'NAME'
100
+ actual_value = found_element.attribute("name")
101
+ elsif property.upcase == 'LABEL'
102
+ actual_value = found_element.attribute("label")
103
+ elsif property.upcase == 'TYPE'
104
+ actual_value = found_element.attribute("type")
105
+ elsif property.upcase == 'ENABLE'
106
+ actual_value = found_element.attribute("enable")
107
+ else
108
+ actual_value = found_element.attribute("#{property}")
109
+ end
110
+ if actual_value == nil
111
+ actual_value = ''
112
+ end
113
+ else
114
+ put_log "ERROR: *** Not found object: #{element}"
115
+ end
116
+
117
+ if IFD_Assertion.reg_compare(actual_value, value)
118
+ check = true
119
+ end
120
+
121
+ put_log "\n#{property} :: Actual Result Is '#{actual_value}' -- Expected Result Is '#{value}'"
122
+
123
+ if negate == " not"
124
+ expect(check).not_to eql true
125
+ elsif expect(check).to eq true
126
+ end
127
+ end
128
+ end
@@ -0,0 +1,54 @@
1
+ def var_collect string_var
2
+ if string_var =~ /^.*{year}.*$/
3
+ string_var = replace_year(string_var)
4
+ end
5
+
6
+ if string_var =~ /^.*{month}.*$/
7
+ string_var = replace_month(string_var)
8
+ end
9
+
10
+ if string_var =~ /^.*{day}.*$/
11
+ string_var = replace_day(string_var)
12
+ end
13
+
14
+ if string_var =~ /^.*{store_value}.*$/
15
+ string_var = $context_value
16
+ end
17
+
18
+ return string_var
19
+ end
20
+
21
+ def replace_year str
22
+ t = Time.now()
23
+ return str.gsub("{year}", t.year.to_s)
24
+ end
25
+
26
+ def replace_month str
27
+ t = Time.now()
28
+ _month = t.month
29
+ if _month < 10
30
+ return str.gsub("{month}", "0#{_month.to_s}")
31
+ else
32
+ return str.gsub("{month}", "#{_month.to_s}")
33
+ end
34
+ return str
35
+ end
36
+
37
+ def replace_day str
38
+ t = Time.now()
39
+ _day = t.day
40
+ if _day < 10
41
+ return str.gsub("{day}", "0#{_day.to_s}")
42
+ else
43
+ return str.gsub("{day}", "#{_day.to_s}")
44
+ end
45
+ return str
46
+ end
47
+
48
+ def replace_pipe str_pipe
49
+ put_log ">>>> #{str_pipe}"
50
+ if str_pipe =~ /^.*{pipe}.*$/
51
+ return str_pipe.gsub("{pipe}", "|")
52
+ end
53
+ return str_pipe
54
+ end
@@ -0,0 +1,18 @@
1
+ require 'rubygems'
2
+ require 'selenium-webdriver'
3
+ require 'open-uri'
4
+ require 'rbconfig'
5
+ require 'appium_lib'
6
+ require 'rubygems'
7
+ require 'yaml'
8
+ require 'cucumber'
9
+ require 'rack/utf8_sanitizer'
10
+ require 'net/https'
11
+ require 'rspec/expectations'
12
+ include RbConfig
13
+
14
+ require_relative 'core'
15
+ require_relative 'IFD_Assertion'
16
+ require_relative 'lib_var'
17
+
18
+
@@ -0,0 +1,5 @@
1
+ module Ifd
2
+ module Mobile
3
+ VERSION = '0.1.0'
4
+ end
5
+ end
data/project/Gemfile ADDED
@@ -0,0 +1,7 @@
1
+ source "https://www.rubygems.org"
2
+
3
+ gem "rest-client"
4
+ gem "rspec"
5
+ gem "selenium-webdriver"
6
+ gem "cucumber"
7
+ gem "rspec-expectations"
@@ -0,0 +1,182 @@
1
+ GEM
2
+ remote: http://rubygems.org/
3
+ specs:
4
+ actionmailer (4.2.4)
5
+ actionpack (= 4.2.4)
6
+ actionview (= 4.2.4)
7
+ activejob (= 4.2.4)
8
+ mail (~> 2.5, >= 2.5.4)
9
+ rails-dom-testing (~> 1.0, >= 1.0.5)
10
+ actionpack (4.2.4)
11
+ actionview (= 4.2.4)
12
+ activesupport (= 4.2.4)
13
+ rack (~> 1.6)
14
+ rack-test (~> 0.6.2)
15
+ rails-dom-testing (~> 1.0, >= 1.0.5)
16
+ rails-html-sanitizer (~> 1.0, >= 1.0.2)
17
+ actionview (4.2.4)
18
+ activesupport (= 4.2.4)
19
+ builder (~> 3.1)
20
+ erubis (~> 2.7.0)
21
+ rails-dom-testing (~> 1.0, >= 1.0.5)
22
+ rails-html-sanitizer (~> 1.0, >= 1.0.2)
23
+ activejob (4.2.4)
24
+ activesupport (= 4.2.4)
25
+ globalid (>= 0.3.0)
26
+ activemodel (4.2.4)
27
+ activesupport (= 4.2.4)
28
+ builder (~> 3.1)
29
+ activerecord (4.2.4)
30
+ activemodel (= 4.2.4)
31
+ activesupport (= 4.2.4)
32
+ arel (~> 6.0)
33
+ activesupport (4.2.4)
34
+ i18n (~> 0.7)
35
+ json (~> 1.7, >= 1.7.7)
36
+ minitest (~> 5.1)
37
+ thread_safe (~> 0.3, >= 0.3.4)
38
+ tzinfo (~> 1.1)
39
+ addressable (2.3.8)
40
+ arel (6.0.3)
41
+ builder (3.2.2)
42
+ capybara (2.4.4)
43
+ mime-types (>= 1.16)
44
+ nokogiri (>= 1.3.3)
45
+ rack (>= 1.0.0)
46
+ rack-test (>= 0.5.4)
47
+ xpath (~> 2.0)
48
+ chromedriver2-helper (0.0.8)
49
+ nokogiri
50
+ csv-diff (0.3.0)
51
+ diff-lcs (1.2.5)
52
+ domain_name (0.5.25)
53
+ unf (>= 0.0.5, < 1.0.0)
54
+ email_spec (1.6.0)
55
+ launchy (~> 2.1)
56
+ mail (~> 2.2)
57
+ erubis (2.7.0)
58
+ ffi (1.9.10-x64-mingw32)
59
+ gherkin (2.12.2)
60
+ multi_json (~> 1.3)
61
+ globalid (0.3.6)
62
+ activesupport (>= 4.1.0)
63
+ http-cookie (1.0.2)
64
+ domain_name (~> 0.5)
65
+ httparty (0.13.7)
66
+ json (~> 1.8)
67
+ multi_xml (>= 0.5.2)
68
+ i18n (0.7.0)
69
+ json (1.8.3)
70
+ launchy (2.4.3)
71
+ addressable (~> 2.3)
72
+ loofah (2.0.3)
73
+ nokogiri (>= 1.5.9)
74
+ mail (2.6.3)
75
+ mime-types (>= 1.16, < 3)
76
+ mime-types (2.6.2)
77
+ mini_portile (0.6.2)
78
+ minitest (5.8.1)
79
+ multi_json (1.11.2)
80
+ multi_xml (0.5.5)
81
+ mysql2 (0.3.18-x64-mingw32)
82
+ netrc (0.10.3)
83
+ nokogiri (1.6.6.2-x64-mingw32)
84
+ mini_portile (~> 0.6.0)
85
+ parallel (1.6.1)
86
+ parallel_tests (1.9.0)
87
+ parallel
88
+ power_assert (0.2.4)
89
+ rack (1.6.4)
90
+ rack-test (0.6.3)
91
+ rack (>= 1.0)
92
+ rack-utf8_sanitizer (1.3.1)
93
+ rack (~> 1.0)
94
+ rails (4.2.4)
95
+ actionmailer (= 4.2.4)
96
+ actionpack (= 4.2.4)
97
+ actionview (= 4.2.4)
98
+ activejob (= 4.2.4)
99
+ activemodel (= 4.2.4)
100
+ activerecord (= 4.2.4)
101
+ activesupport (= 4.2.4)
102
+ bundler (>= 1.3.0, < 2.0)
103
+ railties (= 4.2.4)
104
+ sprockets-rails
105
+ rails-deprecated_sanitizer (1.0.3)
106
+ activesupport (>= 4.2.0.alpha)
107
+ rails-dom-testing (1.0.7)
108
+ activesupport (>= 4.2.0.beta, < 5.0)
109
+ nokogiri (~> 1.6.0)
110
+ rails-deprecated_sanitizer (>= 1.0.1)
111
+ rails-html-sanitizer (1.0.2)
112
+ loofah (~> 2.0)
113
+ railties (4.2.4)
114
+ actionpack (= 4.2.4)
115
+ activesupport (= 4.2.4)
116
+ rake (>= 0.8.7)
117
+ thor (>= 0.18.1, < 2.0)
118
+ rake (10.4.2)
119
+ rautomation (0.17.0)
120
+ ffi (~> 1.9.0)
121
+ rest-client (1.8.0-x64-mingw32)
122
+ ffi (~> 1.9)
123
+ http-cookie (>= 1.0.2, < 2.0)
124
+ mime-types (>= 1.16, < 3.0)
125
+ netrc (~> 0.7)
126
+ rspec (3.3.0)
127
+ rspec-core (~> 3.3.0)
128
+ rspec-expectations (~> 3.3.0)
129
+ rspec-mocks (~> 3.3.0)
130
+ rspec-core (3.3.2)
131
+ rspec-support (~> 3.3.0)
132
+ rspec-expectations (3.3.1)
133
+ diff-lcs (>= 1.2.0, < 2.0)
134
+ rspec-support (~> 3.3.0)
135
+ rspec-mocks (3.3.2)
136
+ diff-lcs (>= 1.2.0, < 2.0)
137
+ rspec-support (~> 3.3.0)
138
+ rspec-support (3.3.0)
139
+ sprockets (3.4.0)
140
+ rack (> 1, < 3)
141
+ sprockets-rails (2.3.3)
142
+ actionpack (>= 3.0)
143
+ activesupport (>= 3.0)
144
+ sprockets (>= 2.8, < 4.0)
145
+ test-unit (3.1.5)
146
+ power_assert
147
+ thor (0.19.1)
148
+ thread_safe (0.3.5)
149
+ tiny_tds (0.6.2-x64-mingw32)
150
+ tzinfo (1.2.2)
151
+ thread_safe (~> 0.1)
152
+ unf (0.1.4)
153
+ unf_ext
154
+ unf_ext (0.0.7.1-x64-mingw32)
155
+ xpath (2.0.0)
156
+ nokogiri (~> 1.3)
157
+
158
+ PLATFORMS
159
+ x64-mingw32
160
+
161
+ DEPENDENCIES
162
+ actionmailer (~> 4.2.3)
163
+ capybara (~> 2.4.4)
164
+ chromedriver2-helper
165
+ csv-diff (~> 0.3.0)
166
+ email_spec
167
+ gherkin (~> 2.12.2)
168
+ httparty (~> 0.13.5)
169
+ json (= 1.8.3)
170
+ mail
171
+ mysql2 (= 0.3.18)
172
+ parallel_tests
173
+ rack-utf8_sanitizer
174
+ rails
175
+ rautomation (~> 0.17.0)
176
+ rest-client (~> 1.8.0)
177
+ rspec (~> 3.3.0)
178
+ test-unit (~> 3.1.2)
179
+ tiny_tds (~> 0.6.2)
180
+
181
+ BUNDLED WITH
182
+ 1.10.6