testautoi 0.9.127

Sign up to get free protection for your applications and to get access to all the features.
Files changed (121) hide show
  1. data/.gitignore +4 -0
  2. data/CHANGES.txt +1 -0
  3. data/Gemfile +4 -0
  4. data/LICENSE +8 -0
  5. data/Rakefile +2 -0
  6. data/bin/CalabashSetup +0 -0
  7. data/bin/cal.xcconfig +3 -0
  8. data/bin/calabash-ios +79 -0
  9. data/bin/calabash-ios-build.rb +110 -0
  10. data/bin/calabash-ios-generate.rb +26 -0
  11. data/bin/calabash-ios-helpers.rb +130 -0
  12. data/bin/calabash-ios-setup.rb +334 -0
  13. data/bin/calabash-ios-sim.rb +149 -0
  14. data/calabash-cucumber.gemspec +29 -0
  15. data/doc/calabash-ios-help.txt +73 -0
  16. data/epl-v10.html +261 -0
  17. data/features-skeleton/.irbrc +23 -0
  18. data/features-skeleton/irb_ios4.sh +2 -0
  19. data/features-skeleton/irb_ios5.sh +2 -0
  20. data/features-skeleton/my_first.feature +12 -0
  21. data/features-skeleton/step_definitions/calabash_steps.rb +1 -0
  22. data/features-skeleton/step_definitions/my_first_steps.rb +4 -0
  23. data/features-skeleton/support/env.rb +1 -0
  24. data/features-skeleton/support/hooks.rb +0 -0
  25. data/features-skeleton/support/launch.rb +77 -0
  26. data/features/step_definitions/calabash_steps.rb +439 -0
  27. data/lib/calabash-cucumber.rb +7 -0
  28. data/lib/calabash-cucumber/calabash_steps.rb +1 -0
  29. data/lib/calabash-cucumber/core.rb +553 -0
  30. data/lib/calabash-cucumber/cucumber.rb +8 -0
  31. data/lib/calabash-cucumber/ibase.rb +45 -0
  32. data/lib/calabash-cucumber/keyboard_helpers.rb +124 -0
  33. data/lib/calabash-cucumber/launch/simulator_helper.rb +297 -0
  34. data/lib/calabash-cucumber/location.rb +26 -0
  35. data/lib/calabash-cucumber/operations.rb +162 -0
  36. data/lib/calabash-cucumber/resources/cell_swipe_ios4_ipad.base64 +51 -0
  37. data/lib/calabash-cucumber/resources/cell_swipe_ios4_iphone.base64 +51 -0
  38. data/lib/calabash-cucumber/resources/cell_swipe_ios5_ipad.base64 +74 -0
  39. data/lib/calabash-cucumber/resources/cell_swipe_ios5_iphone.base64 +74 -0
  40. data/lib/calabash-cucumber/resources/pinch_in_ios4_ipad.base64 +104 -0
  41. data/lib/calabash-cucumber/resources/pinch_in_ios4_iphone.base64 +104 -0
  42. data/lib/calabash-cucumber/resources/pinch_in_ios5_ipad.base64 +144 -0
  43. data/lib/calabash-cucumber/resources/pinch_in_ios5_iphone.base64 +144 -0
  44. data/lib/calabash-cucumber/resources/pinch_in_ios6_ipad.base64 +70 -0
  45. data/lib/calabash-cucumber/resources/pinch_in_ios6_iphone.base64 +70 -0
  46. data/lib/calabash-cucumber/resources/pinch_out_ios5_ipad.base64 +207 -0
  47. data/lib/calabash-cucumber/resources/pinch_out_ios5_iphone.base64 +207 -0
  48. data/lib/calabash-cucumber/resources/pinch_out_ios6_ipad.base64 +96 -0
  49. data/lib/calabash-cucumber/resources/pinch_out_ios6_iphone.base64 +96 -0
  50. data/lib/calabash-cucumber/resources/rotate_left_home_down_ios4_ipad.base64 +2 -0
  51. data/lib/calabash-cucumber/resources/rotate_left_home_down_ios4_iphone.base64 +2 -0
  52. data/lib/calabash-cucumber/resources/rotate_left_home_down_ios5_ipad.base64 +2 -0
  53. data/lib/calabash-cucumber/resources/rotate_left_home_down_ios5_iphone.base64 +2 -0
  54. data/lib/calabash-cucumber/resources/rotate_left_home_left_ios4_ipad.base64 +2 -0
  55. data/lib/calabash-cucumber/resources/rotate_left_home_left_ios4_iphone.base64 +2 -0
  56. data/lib/calabash-cucumber/resources/rotate_left_home_left_ios5_ipad.base64 +2 -0
  57. data/lib/calabash-cucumber/resources/rotate_left_home_left_ios5_iphone.base64 +2 -0
  58. data/lib/calabash-cucumber/resources/rotate_left_home_right_ios4_ipad.base64 +2 -0
  59. data/lib/calabash-cucumber/resources/rotate_left_home_right_ios4_iphone.base64 +2 -0
  60. data/lib/calabash-cucumber/resources/rotate_left_home_right_ios5_ipad.base64 +2 -0
  61. data/lib/calabash-cucumber/resources/rotate_left_home_right_ios5_iphone.base64 +2 -0
  62. data/lib/calabash-cucumber/resources/rotate_left_home_up_ios4_ipad.base64 +2 -0
  63. data/lib/calabash-cucumber/resources/rotate_left_home_up_ios4_iphone.base64 +2 -0
  64. data/lib/calabash-cucumber/resources/rotate_left_home_up_ios5_ipad.base64 +2 -0
  65. data/lib/calabash-cucumber/resources/rotate_left_home_up_ios5_iphone.base64 +2 -0
  66. data/lib/calabash-cucumber/resources/rotate_right_home_down_ios4_ipad.base64 +2 -0
  67. data/lib/calabash-cucumber/resources/rotate_right_home_down_ios4_iphone.base64 +2 -0
  68. data/lib/calabash-cucumber/resources/rotate_right_home_down_ios5_ipad.base64 +2 -0
  69. data/lib/calabash-cucumber/resources/rotate_right_home_down_ios5_iphone.base64 +2 -0
  70. data/lib/calabash-cucumber/resources/rotate_right_home_left_ios4_ipad.base64 +2 -0
  71. data/lib/calabash-cucumber/resources/rotate_right_home_left_ios4_iphone.base64 +2 -0
  72. data/lib/calabash-cucumber/resources/rotate_right_home_left_ios5_ipad.base64 +2 -0
  73. data/lib/calabash-cucumber/resources/rotate_right_home_left_ios5_iphone.base64 +2 -0
  74. data/lib/calabash-cucumber/resources/rotate_right_home_right_ios4_ipad.base64 +2 -0
  75. data/lib/calabash-cucumber/resources/rotate_right_home_right_ios4_iphone.base64 +2 -0
  76. data/lib/calabash-cucumber/resources/rotate_right_home_right_ios5_ipad.base64 +2 -0
  77. data/lib/calabash-cucumber/resources/rotate_right_home_right_ios5_iphone.base64 +2 -0
  78. data/lib/calabash-cucumber/resources/rotate_right_home_up_ios4_ipad.base64 +2 -0
  79. data/lib/calabash-cucumber/resources/rotate_right_home_up_ios4_iphone.base64 +2 -0
  80. data/lib/calabash-cucumber/resources/rotate_right_home_up_ios5_ipad.base64 +2 -0
  81. data/lib/calabash-cucumber/resources/rotate_right_home_up_ios5_iphone.base64 +2 -0
  82. data/lib/calabash-cucumber/resources/swipe_down_ios5_ipad.base64 +18 -0
  83. data/lib/calabash-cucumber/resources/swipe_down_ios5_iphone.base64 +18 -0
  84. data/lib/calabash-cucumber/resources/swipe_left_hard_ios4_ipad.base64 +15 -0
  85. data/lib/calabash-cucumber/resources/swipe_left_hard_ios4_iphone.base64 +15 -0
  86. data/lib/calabash-cucumber/resources/swipe_left_ios4_ipad.base64 +18 -0
  87. data/lib/calabash-cucumber/resources/swipe_left_ios4_iphone.base64 +18 -0
  88. data/lib/calabash-cucumber/resources/swipe_left_ios5_ipad.base64 +17 -0
  89. data/lib/calabash-cucumber/resources/swipe_left_ios5_iphone.base64 +17 -0
  90. data/lib/calabash-cucumber/resources/swipe_right_hard_ios4_ipad.base64 +17 -0
  91. data/lib/calabash-cucumber/resources/swipe_right_hard_ios4_iphone.base64 +17 -0
  92. data/lib/calabash-cucumber/resources/swipe_right_ios4_ipad.base64 +13 -0
  93. data/lib/calabash-cucumber/resources/swipe_right_ios4_iphone.base64 +13 -0
  94. data/lib/calabash-cucumber/resources/swipe_right_ios5_ipad.base64 +17 -0
  95. data/lib/calabash-cucumber/resources/swipe_right_ios5_iphone.base64 +17 -0
  96. data/lib/calabash-cucumber/resources/swipe_up_ios5_ipad.base64 +34 -0
  97. data/lib/calabash-cucumber/resources/swipe_up_ios5_iphone.base64 +34 -0
  98. data/lib/calabash-cucumber/resources/touch_done_ios4_ipad.base64 +7 -0
  99. data/lib/calabash-cucumber/resources/touch_done_ios4_iphone.base64 +9 -0
  100. data/lib/calabash-cucumber/resources/touch_done_ios5_ipad.base64 +7 -0
  101. data/lib/calabash-cucumber/resources/touch_done_ios5_iphone.base64 +9 -0
  102. data/lib/calabash-cucumber/resources/touch_ios4_ipad.base64 +9 -0
  103. data/lib/calabash-cucumber/resources/touch_ios4_iphone.base64 +9 -0
  104. data/lib/calabash-cucumber/resources/touch_ios5_ipad.base64 +9 -0
  105. data/lib/calabash-cucumber/resources/touch_ios5_iphone.base64 +9 -0
  106. data/lib/calabash-cucumber/resources/wheel_down_ios4_ipad.base64 +159 -0
  107. data/lib/calabash-cucumber/resources/wheel_down_ios4_iphone.base64 +159 -0
  108. data/lib/calabash-cucumber/resources/wheel_down_ios5_ipad.base64 +156 -0
  109. data/lib/calabash-cucumber/resources/wheel_down_ios5_iphone.base64 +156 -0
  110. data/lib/calabash-cucumber/resources/wheel_up_ios4_ipad.base64 +166 -0
  111. data/lib/calabash-cucumber/resources/wheel_up_ios4_iphone.base64 +166 -0
  112. data/lib/calabash-cucumber/resources/wheel_up_ios5_ipad.base64 +156 -0
  113. data/lib/calabash-cucumber/resources/wheel_up_ios5_iphone.base64 +156 -0
  114. data/lib/calabash-cucumber/tests_helpers.rb +136 -0
  115. data/lib/calabash-cucumber/version.rb +6 -0
  116. data/lib/calabash-cucumber/wait_helpers.rb +149 -0
  117. data/scripts/data/.GlobalPreferences.plist +0 -0
  118. data/scripts/data/clients.plist +0 -0
  119. data/scripts/data/com.apple.Accessibility.plist +0 -0
  120. data/scripts/reset_simulator.scpt +0 -0
  121. metadata +319 -0
@@ -0,0 +1,149 @@
1
+ require 'sim_launcher'
2
+ require 'calabash-cucumber/launch/simulator_helper'
3
+
4
+ def quit_sim
5
+ `echo 'application "iPhone Simulator" quit' | osascript`
6
+ end
7
+
8
+ def calabash_sim_reset
9
+ reset_script = File.expand_path("#{@script_dir}/reset_simulator.scpt")
10
+ launcher = SimLauncher::Simulator.new
11
+
12
+ sdks = ENV['SDK_VERSIONS']
13
+ if sdks
14
+ sdks = sdks.split(",")
15
+ else
16
+ sdks = SimLauncher::SdkDetector.new(launcher).available_sdk_versions
17
+ end
18
+
19
+ launcher.reset(sdks)
20
+
21
+ end
22
+
23
+ def calabash_sim_accessibility
24
+ dirs = Dir.glob(File.join(File.expand_path("~/Library"), "Application Support", "iPhone Simulator", "*.*", "Library", "Preferences"))
25
+ dirs.each do |sim_pref_dir|
26
+ fp = File.expand_path("#{@script_dir}/data/")
27
+ FileUtils.cp("#{fp}/com.apple.Accessibility.plist", sim_pref_dir)
28
+ end
29
+ end
30
+
31
+
32
+ def calabash_sim_location(args)
33
+
34
+ if args.length == 0
35
+ print_usage
36
+ exit 0
37
+ end
38
+ on_off = args.shift
39
+ if args.length == 0
40
+ print_usage
41
+ exit 0
42
+ end
43
+ bundle_id = args.shift
44
+
45
+
46
+ dirs = Dir.glob(File.join(File.expand_path("~/Library"), "Application Support", "iPhone Simulator", "*.*", "Library", "Caches", "locationd"))
47
+ dirs.each do |sim_dir|
48
+ existing_path = "#{sim_dir}/clients.plist"
49
+ if File.exist?(existing_path)
50
+ plist_path = existing_path
51
+ else
52
+ plist_path = File.expand_path("#{@script_dir}/data/clients.plist")
53
+ end
54
+
55
+ plist = CFPropertyList::List.new(:file => plist_path)
56
+ hash = CFPropertyList.native_types(plist.value)
57
+
58
+ app_hash = hash[bundle_id]
59
+ if not app_hash
60
+ app_hash = hash[bundle_id] = {}
61
+ end
62
+ app_hash["BundleId"] = bundle_id
63
+ app_hash["Authorized"] = on_off == "on" ? true : false
64
+ app_hash["LocationTimeStarted"] = 0
65
+
66
+ ##Plist edit the template
67
+ res_plist = CFPropertyList::List.new
68
+ res_plist.value = CFPropertyList.guess(hash)
69
+ res_plist.save(existing_path, CFPropertyList::List::FORMAT_BINARY)
70
+
71
+ end
72
+ end
73
+
74
+
75
+ def calabash_sim_locale(args)
76
+
77
+ prefs_path = File.expand_path("#{@script_dir}/data/.GlobalPreferences.plist")
78
+ plist = CFPropertyList::List.new(:file => prefs_path)
79
+ hash = CFPropertyList.native_types(plist.value)
80
+
81
+
82
+ if args.length == 0
83
+ print_usage
84
+ puts "Options: \n"
85
+ puts hash['AppleLanguages'].join("\n")
86
+ exit 0
87
+ end
88
+ lang = args.shift
89
+ reg = nil
90
+ if args.length == 1
91
+ reg = args.shift
92
+ end
93
+
94
+ langs = hash['AppleLanguages']
95
+ lang_index = langs.find_index { |l| l == lang }
96
+
97
+ if lang_index.nil?
98
+ puts "Unable to find #{lang}..."
99
+ puts "Options:\n#{langs.join("\n")}"
100
+ exit 0
101
+ end
102
+
103
+ langs[0], langs[lang_index] = langs[lang_index], langs[0]
104
+
105
+
106
+ if reg
107
+ hash['AppleLocale'] = reg
108
+ end
109
+ res_plist = CFPropertyList::List.new
110
+ res_plist.value = CFPropertyList.guess(hash)
111
+ dirs = Dir.glob(File.join(File.expand_path("~/Library"), "Application Support", "iPhone Simulator", "*.*", "Library", "Preferences"))
112
+ dirs.each do |sim_pref_dir|
113
+ res_plist.save("#{sim_pref_dir}/.GlobalPreferences.plist", CFPropertyList::List::FORMAT_BINARY)
114
+ end
115
+
116
+
117
+ end
118
+
119
+
120
+ def calabash_sim_device(args)
121
+ quit_sim
122
+ options = ["iPad","iPad_Retina", "iPhone", "iPhone_Retina", "iPhone_Retina_4inch"]
123
+ if args.length != 1 or not options.find { |x| x == args[0] }
124
+ print_usage
125
+ puts "Unrecognized args: #{args}"
126
+ puts "should be one of #{options.inspect}"
127
+ exit(0)
128
+ end
129
+ path =File.join(File.expand_path("~/Library"), "Preferences", "com.apple.iphonesimulator.plist")
130
+ plist = CFPropertyList::List.new(:file => path)
131
+ hash = CFPropertyList.native_types(plist.value)
132
+
133
+ device = case args[0]
134
+ when "iPad_Retina"
135
+ "iPad (Retina)"
136
+ when "iPhone_Retina"
137
+ "iPhone (Retina 3.5-inch)"
138
+ when "iPhone_Retina_4inch"
139
+ "iPhone (Retina 4-inch)"
140
+ else
141
+ args[0]
142
+ end
143
+ if device
144
+ hash['SimulateDevice'] = device
145
+ plist.value = CFPropertyList.guess(hash)
146
+ plist.save(path, CFPropertyList::List::FORMAT_BINARY)
147
+ end
148
+
149
+ end
@@ -0,0 +1,29 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require "calabash-cucumber/version"
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = "calabash-cucumber"
7
+ s.version = Calabash::Cucumber::VERSION
8
+ s.platform = Gem::Platform::RUBY
9
+ s.authors = ["Karl Krukow"]
10
+ s.email = ["karl@lesspainful.com"]
11
+ s.homepage = "http://calaba.sh"
12
+ s.summary = %q{Client for calabash-ios-server for automated functional testing on iOS}
13
+ s.description = %q{calabash-cucumber drives tests for native iOS apps. You must link your app with calabash-ios-server framework to execute tests.}
14
+ s.files = `git ls-files`.split("\n")
15
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
16
+ s.executables = "calabash-ios"
17
+ s.require_paths = ["lib"]
18
+
19
+ s.add_dependency( "cucumber" )
20
+ s.add_dependency( "json" )
21
+ s.add_dependency( "CFPropertyList" )
22
+ s.add_dependency( "sim_launcher", "0.4.6")
23
+ s.add_dependency( "slowhandcuke" )
24
+ s.add_dependency( "location-one", "~>0.0.8")
25
+ s.add_dependency( "httpclient","2.2.7")
26
+ s.add_dependency( "bundler", "~> 1.1")
27
+ s.add_dependency( "run_loop", "~>0.0.3" )
28
+
29
+ end
@@ -0,0 +1,73 @@
1
+ Usage: calabash-ios <command-name> [parameters]
2
+ <command-name> can be one of
3
+ help
4
+ gen
5
+ setup (EXPERIMENTAL) [opt path]?
6
+ download [opt path]?
7
+ check (EXPERIMENTAL) [opt path to .ipa/.app]?
8
+ sim locale [lang] [regional]?
9
+ sim reset
10
+ sim acc
11
+ sim device [iPad_Retina, iPhone, iPhone_Retina, iPhone_Retina_4inch]
12
+
13
+ Commands:
14
+ gen creates a skeleton features dir. This is usually used once when
15
+ setting up calabash to ensure that the features folder contains
16
+ the right step definitions and environment to run with cucumber.
17
+ console
18
+ starts an interactive console to interact with your app via Calabash.
19
+ Copies the irb_ios5.sh and irb_ios4.sh scripts and the .irbrc file
20
+ then launches irb_ios5.sh.
21
+ setup [path]? (EXPERIMENTAL) Automates setting up your iOS Xcode project
22
+ with calabash-ios-server. It is your responsibility to ensure
23
+ that your production build does not link with calabash.framework.
24
+ setup will try to ensure this, but you should check manually.
25
+
26
+ setup will download calabash.framework and modify you Xcode project
27
+ file. The parameter [path] is optional (default is the current dir).
28
+ If specified [path] should be the path to your iOS Xcode project
29
+ (i.e., the folder which contains projectname.xcodeproj).
30
+
31
+ The following modifications are made
32
+ - duplicate an existing target of your choice
33
+ - add the calabash.framework to your Frameworks folder
34
+ - add $(SRCROOT) to framework search path
35
+ - link with calabash.framework in duped target
36
+ - link with Apple's CFNetwork.framework in duped target
37
+ - setup special linker options to ensure calabash is loaded
38
+
39
+ Your Xcode project file will be backed up as project.pbxproj.bak.
40
+ The backup is placed in the .xcodeproj folder for your project.
41
+ If something goes wrong. Close Xcode and copy project.pbxproj.bak
42
+ to project.pbxproj inside your .xcodeproj folder.
43
+
44
+ download [opt_path]?
45
+ downloads latest compatible version of calabash.framework.
46
+ It should be run from a directory containing an Xcode project,
47
+ or optionally opt_path should be supplied and pointing to a
48
+ directory containing an Xcode project.
49
+ Download will download the latest version that matches the
50
+ currently installed calabash-cucumber gem.
51
+ To update Calabash for your project run
52
+
53
+ gem update calabash-cucumber
54
+ calabash-ios download
55
+
56
+ check (EXPERIMENTAL) [.app or .ipa]?
57
+ check whether an app or ipa is linked with calabash.framework
58
+ if called without parameter [.app or .ipa] then pwd should be
59
+ a directory containing an xcodeproj. In this case we'll check
60
+ the default Xcode simulator build path for a Debug and Calabash
61
+ build configurations. We check that Debug doesn't link with
62
+ calabash.framework but Calabash does.
63
+
64
+ sim locale [lang] [regional]? Changes the regional settings
65
+ for the iOS Simulators. You must ensure the correct format
66
+ for the optional regional parameter, for example,
67
+ da_DK, en_US.
68
+
69
+ sim reset (EXPERIMENTAL) Will select "Reset Content and Settings"
70
+ in the iOS Simulators using AppleScript.
71
+
72
+ sim device [device] Will set the default iOS Simulator device.
73
+ [device] can be one of iPad, iPhone, iPhone_Retina.
data/epl-v10.html ADDED
@@ -0,0 +1,261 @@
1
+ <?xml version="1.0" encoding="ISO-8859-1" ?>
2
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
3
+ <html xmlns="http://www.w3.org/1999/xhtml">
4
+
5
+ <head>
6
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
7
+ <title>Eclipse Public License - Version 1.0</title>
8
+ <style type="text/css">
9
+ body {
10
+ size: 8.5in 11.0in;
11
+ margin: 0.25in 0.5in 0.25in 0.5in;
12
+ tab-interval: 0.5in;
13
+ }
14
+ p {
15
+ margin-left: auto;
16
+ margin-top: 0.5em;
17
+ margin-bottom: 0.5em;
18
+ }
19
+ p.list {
20
+ margin-left: 0.5in;
21
+ margin-top: 0.05em;
22
+ margin-bottom: 0.05em;
23
+ }
24
+ </style>
25
+
26
+ </head>
27
+
28
+ <body lang="EN-US">
29
+
30
+ <p align=center><b>Eclipse Public License - v 1.0</b></p>
31
+
32
+ <p>THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE
33
+ PUBLIC LICENSE (&quot;AGREEMENT&quot;). ANY USE, REPRODUCTION OR
34
+ DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS
35
+ AGREEMENT.</p>
36
+
37
+ <p><b>1. DEFINITIONS</b></p>
38
+
39
+ <p>&quot;Contribution&quot; means:</p>
40
+
41
+ <p class="list">a) in the case of the initial Contributor, the initial
42
+ code and documentation distributed under this Agreement, and</p>
43
+ <p class="list">b) in the case of each subsequent Contributor:</p>
44
+ <p class="list">i) changes to the Program, and</p>
45
+ <p class="list">ii) additions to the Program;</p>
46
+ <p class="list">where such changes and/or additions to the Program
47
+ originate from and are distributed by that particular Contributor. A
48
+ Contribution 'originates' from a Contributor if it was added to the
49
+ Program by such Contributor itself or anyone acting on such
50
+ Contributor's behalf. Contributions do not include additions to the
51
+ Program which: (i) are separate modules of software distributed in
52
+ conjunction with the Program under their own license agreement, and (ii)
53
+ are not derivative works of the Program.</p>
54
+
55
+ <p>&quot;Contributor&quot; means any person or entity that distributes
56
+ the Program.</p>
57
+
58
+ <p>&quot;Licensed Patents&quot; mean patent claims licensable by a
59
+ Contributor which are necessarily infringed by the use or sale of its
60
+ Contribution alone or when combined with the Program.</p>
61
+
62
+ <p>&quot;Program&quot; means the Contributions distributed in accordance
63
+ with this Agreement.</p>
64
+
65
+ <p>&quot;Recipient&quot; means anyone who receives the Program under
66
+ this Agreement, including all Contributors.</p>
67
+
68
+ <p><b>2. GRANT OF RIGHTS</b></p>
69
+
70
+ <p class="list">a) Subject to the terms of this Agreement, each
71
+ Contributor hereby grants Recipient a non-exclusive, worldwide,
72
+ royalty-free copyright license to reproduce, prepare derivative works
73
+ of, publicly display, publicly perform, distribute and sublicense the
74
+ Contribution of such Contributor, if any, and such derivative works, in
75
+ source code and object code form.</p>
76
+
77
+ <p class="list">b) Subject to the terms of this Agreement, each
78
+ Contributor hereby grants Recipient a non-exclusive, worldwide,
79
+ royalty-free patent license under Licensed Patents to make, use, sell,
80
+ offer to sell, import and otherwise transfer the Contribution of such
81
+ Contributor, if any, in source code and object code form. This patent
82
+ license shall apply to the combination of the Contribution and the
83
+ Program if, at the time the Contribution is added by the Contributor,
84
+ such addition of the Contribution causes such combination to be covered
85
+ by the Licensed Patents. The patent license shall not apply to any other
86
+ combinations which include the Contribution. No hardware per se is
87
+ licensed hereunder.</p>
88
+
89
+ <p class="list">c) Recipient understands that although each Contributor
90
+ grants the licenses to its Contributions set forth herein, no assurances
91
+ are provided by any Contributor that the Program does not infringe the
92
+ patent or other intellectual property rights of any other entity. Each
93
+ Contributor disclaims any liability to Recipient for claims brought by
94
+ any other entity based on infringement of intellectual property rights
95
+ or otherwise. As a condition to exercising the rights and licenses
96
+ granted hereunder, each Recipient hereby assumes sole responsibility to
97
+ secure any other intellectual property rights needed, if any. For
98
+ example, if a third party patent license is required to allow Recipient
99
+ to distribute the Program, it is Recipient's responsibility to acquire
100
+ that license before distributing the Program.</p>
101
+
102
+ <p class="list">d) Each Contributor represents that to its knowledge it
103
+ has sufficient copyright rights in its Contribution, if any, to grant
104
+ the copyright license set forth in this Agreement.</p>
105
+
106
+ <p><b>3. REQUIREMENTS</b></p>
107
+
108
+ <p>A Contributor may choose to distribute the Program in object code
109
+ form under its own license agreement, provided that:</p>
110
+
111
+ <p class="list">a) it complies with the terms and conditions of this
112
+ Agreement; and</p>
113
+
114
+ <p class="list">b) its license agreement:</p>
115
+
116
+ <p class="list">i) effectively disclaims on behalf of all Contributors
117
+ all warranties and conditions, express and implied, including warranties
118
+ or conditions of title and non-infringement, and implied warranties or
119
+ conditions of merchantability and fitness for a particular purpose;</p>
120
+
121
+ <p class="list">ii) effectively excludes on behalf of all Contributors
122
+ all liability for damages, including direct, indirect, special,
123
+ incidental and consequential damages, such as lost profits;</p>
124
+
125
+ <p class="list">iii) states that any provisions which differ from this
126
+ Agreement are offered by that Contributor alone and not by any other
127
+ party; and</p>
128
+
129
+ <p class="list">iv) states that source code for the Program is available
130
+ from such Contributor, and informs licensees how to obtain it in a
131
+ reasonable manner on or through a medium customarily used for software
132
+ exchange.</p>
133
+
134
+ <p>When the Program is made available in source code form:</p>
135
+
136
+ <p class="list">a) it must be made available under this Agreement; and</p>
137
+
138
+ <p class="list">b) a copy of this Agreement must be included with each
139
+ copy of the Program.</p>
140
+
141
+ <p>Contributors may not remove or alter any copyright notices contained
142
+ within the Program.</p>
143
+
144
+ <p>Each Contributor must identify itself as the originator of its
145
+ Contribution, if any, in a manner that reasonably allows subsequent
146
+ Recipients to identify the originator of the Contribution.</p>
147
+
148
+ <p><b>4. COMMERCIAL DISTRIBUTION</b></p>
149
+
150
+ <p>Commercial distributors of software may accept certain
151
+ responsibilities with respect to end users, business partners and the
152
+ like. While this license is intended to facilitate the commercial use of
153
+ the Program, the Contributor who includes the Program in a commercial
154
+ product offering should do so in a manner which does not create
155
+ potential liability for other Contributors. Therefore, if a Contributor
156
+ includes the Program in a commercial product offering, such Contributor
157
+ (&quot;Commercial Contributor&quot;) hereby agrees to defend and
158
+ indemnify every other Contributor (&quot;Indemnified Contributor&quot;)
159
+ against any losses, damages and costs (collectively &quot;Losses&quot;)
160
+ arising from claims, lawsuits and other legal actions brought by a third
161
+ party against the Indemnified Contributor to the extent caused by the
162
+ acts or omissions of such Commercial Contributor in connection with its
163
+ distribution of the Program in a commercial product offering. The
164
+ obligations in this section do not apply to any claims or Losses
165
+ relating to any actual or alleged intellectual property infringement. In
166
+ order to qualify, an Indemnified Contributor must: a) promptly notify
167
+ the Commercial Contributor in writing of such claim, and b) allow the
168
+ Commercial Contributor to control, and cooperate with the Commercial
169
+ Contributor in, the defense and any related settlement negotiations. The
170
+ Indemnified Contributor may participate in any such claim at its own
171
+ expense.</p>
172
+
173
+ <p>For example, a Contributor might include the Program in a commercial
174
+ product offering, Product X. That Contributor is then a Commercial
175
+ Contributor. If that Commercial Contributor then makes performance
176
+ claims, or offers warranties related to Product X, those performance
177
+ claims and warranties are such Commercial Contributor's responsibility
178
+ alone. Under this section, the Commercial Contributor would have to
179
+ defend claims against the other Contributors related to those
180
+ performance claims and warranties, and if a court requires any other
181
+ Contributor to pay any damages as a result, the Commercial Contributor
182
+ must pay those damages.</p>
183
+
184
+ <p><b>5. NO WARRANTY</b></p>
185
+
186
+ <p>EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS
187
+ PROVIDED ON AN &quot;AS IS&quot; BASIS, WITHOUT WARRANTIES OR CONDITIONS
188
+ OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION,
189
+ ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY
190
+ OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely
191
+ responsible for determining the appropriateness of using and
192
+ distributing the Program and assumes all risks associated with its
193
+ exercise of rights under this Agreement , including but not limited to
194
+ the risks and costs of program errors, compliance with applicable laws,
195
+ damage to or loss of data, programs or equipment, and unavailability or
196
+ interruption of operations.</p>
197
+
198
+ <p><b>6. DISCLAIMER OF LIABILITY</b></p>
199
+
200
+ <p>EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT
201
+ NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT,
202
+ INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING
203
+ WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF
204
+ LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
205
+ NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR
206
+ DISTRIBUTION OF THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED
207
+ HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.</p>
208
+
209
+ <p><b>7. GENERAL</b></p>
210
+
211
+ <p>If any provision of this Agreement is invalid or unenforceable under
212
+ applicable law, it shall not affect the validity or enforceability of
213
+ the remainder of the terms of this Agreement, and without further action
214
+ by the parties hereto, such provision shall be reformed to the minimum
215
+ extent necessary to make such provision valid and enforceable.</p>
216
+
217
+ <p>If Recipient institutes patent litigation against any entity
218
+ (including a cross-claim or counterclaim in a lawsuit) alleging that the
219
+ Program itself (excluding combinations of the Program with other
220
+ software or hardware) infringes such Recipient's patent(s), then such
221
+ Recipient's rights granted under Section 2(b) shall terminate as of the
222
+ date such litigation is filed.</p>
223
+
224
+ <p>All Recipient's rights under this Agreement shall terminate if it
225
+ fails to comply with any of the material terms or conditions of this
226
+ Agreement and does not cure such failure in a reasonable period of time
227
+ after becoming aware of such noncompliance. If all Recipient's rights
228
+ under this Agreement terminate, Recipient agrees to cease use and
229
+ distribution of the Program as soon as reasonably practicable. However,
230
+ Recipient's obligations under this Agreement and any licenses granted by
231
+ Recipient relating to the Program shall continue and survive.</p>
232
+
233
+ <p>Everyone is permitted to copy and distribute copies of this
234
+ Agreement, but in order to avoid inconsistency the Agreement is
235
+ copyrighted and may only be modified in the following manner. The
236
+ Agreement Steward reserves the right to publish new versions (including
237
+ revisions) of this Agreement from time to time. No one other than the
238
+ Agreement Steward has the right to modify this Agreement. The Eclipse
239
+ Foundation is the initial Agreement Steward. The Eclipse Foundation may
240
+ assign the responsibility to serve as the Agreement Steward to a
241
+ suitable separate entity. Each new version of the Agreement will be
242
+ given a distinguishing version number. The Program (including
243
+ Contributions) may always be distributed subject to the version of the
244
+ Agreement under which it was received. In addition, after a new version
245
+ of the Agreement is published, Contributor may elect to distribute the
246
+ Program (including its Contributions) under the new version. Except as
247
+ expressly stated in Sections 2(a) and 2(b) above, Recipient receives no
248
+ rights or licenses to the intellectual property of any Contributor under
249
+ this Agreement, whether expressly, by implication, estoppel or
250
+ otherwise. All rights in the Program not expressly granted under this
251
+ Agreement are reserved.</p>
252
+
253
+ <p>This Agreement is governed by the laws of the State of New York and
254
+ the intellectual property laws of the United States of America. No party
255
+ to this Agreement will bring a legal action under this Agreement more
256
+ than one year after the cause of action arose. Each party waives its
257
+ rights to a jury trial in any resulting litigation.</p>
258
+
259
+ </body>
260
+
261
+ </html>