calabash-cucumber 0.9.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (51) hide show
  1. data/.gitignore +3 -0
  2. data/CHANGES.txt +1 -0
  3. data/Gemfile +4 -0
  4. data/LICENSE +8 -0
  5. data/README.md +182 -0
  6. data/Rakefile +2 -0
  7. data/bin/calabash +21 -0
  8. data/calabash-cucumber.gemspec +23 -0
  9. data/copy_resources.sh +2 -0
  10. data/epl-v10.html +261 -0
  11. data/features-skeleton/my_first.feature +8 -0
  12. data/features-skeleton/step_definitions/calabash_steps.rb +1 -0
  13. data/features-skeleton/support/env.rb +1 -0
  14. data/features-skeleton/support/hooks.rb +17 -0
  15. data/lib/calabash-cucumber.rb +0 -0
  16. data/lib/calabash-cucumber/calabash_steps.rb +307 -0
  17. data/lib/calabash-cucumber/color_helper.rb +13 -0
  18. data/lib/calabash-cucumber/cucumber.rb +9 -0
  19. data/lib/calabash-cucumber/operations.rb +271 -0
  20. data/lib/calabash-cucumber/resources/cell_swipe_ios4_ipad.base64 +51 -0
  21. data/lib/calabash-cucumber/resources/cell_swipe_ios4_iphone.base64 +51 -0
  22. data/lib/calabash-cucumber/resources/cell_swipe_ios5_ipad.base64 +74 -0
  23. data/lib/calabash-cucumber/resources/cell_swipe_ios5_iphone.base64 +74 -0
  24. data/lib/calabash-cucumber/resources/pinch_in_ios4_ipad.base64 +104 -0
  25. data/lib/calabash-cucumber/resources/pinch_in_ios4_iphone.base64 +104 -0
  26. data/lib/calabash-cucumber/resources/pinch_in_ios5_ipad.base64 +144 -0
  27. data/lib/calabash-cucumber/resources/pinch_in_ios5_iphone.base64 +144 -0
  28. data/lib/calabash-cucumber/resources/pinch_out_ios5_ipad.base64 +207 -0
  29. data/lib/calabash-cucumber/resources/pinch_out_ios5_iphone.base64 +207 -0
  30. data/lib/calabash-cucumber/resources/swipe_left_hard_ios4_ipad.base64 +15 -0
  31. data/lib/calabash-cucumber/resources/swipe_left_hard_ios4_iphone.base64 +15 -0
  32. data/lib/calabash-cucumber/resources/swipe_left_ios4_ipad.base64 +18 -0
  33. data/lib/calabash-cucumber/resources/swipe_left_ios4_iphone.base64 +18 -0
  34. data/lib/calabash-cucumber/resources/swipe_left_ios5_ipad.base64 +17 -0
  35. data/lib/calabash-cucumber/resources/swipe_left_ios5_iphone.base64 +17 -0
  36. data/lib/calabash-cucumber/resources/swipe_right_hard_ios4_ipad.base64 +17 -0
  37. data/lib/calabash-cucumber/resources/swipe_right_hard_ios4_iphone.base64 +17 -0
  38. data/lib/calabash-cucumber/resources/swipe_right_ios4_ipad.base64 +13 -0
  39. data/lib/calabash-cucumber/resources/swipe_right_ios4_iphone.base64 +13 -0
  40. data/lib/calabash-cucumber/resources/swipe_right_ios5_ipad.base64 +17 -0
  41. data/lib/calabash-cucumber/resources/swipe_right_ios5_iphone.base64 +17 -0
  42. data/lib/calabash-cucumber/resources/touch_done_ios4_ipad.base64 +8 -0
  43. data/lib/calabash-cucumber/resources/touch_done_ios4_iphone.base64 +8 -0
  44. data/lib/calabash-cucumber/resources/touch_done_ios5_ipad.base64 +8 -0
  45. data/lib/calabash-cucumber/resources/touch_done_ios5_iphone.base64 +8 -0
  46. data/lib/calabash-cucumber/resources/touch_ios4_ipad.base64 +7 -0
  47. data/lib/calabash-cucumber/resources/touch_ios4_iphone.base64 +7 -0
  48. data/lib/calabash-cucumber/resources/touch_ios5_ipad.base64 +8 -0
  49. data/lib/calabash-cucumber/resources/touch_ios5_iphone.base64 +8 -0
  50. data/lib/calabash-cucumber/version.rb +5 -0
  51. metadata +141 -0
data/.gitignore ADDED
@@ -0,0 +1,3 @@
1
+ pkg
2
+ Markdown.pl
3
+ .idea
data/CHANGES.txt ADDED
@@ -0,0 +1 @@
1
+ 1.0.0: Initial calabash release
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source "http://rubygems.org"
2
+
3
+ # Specify your gem's dependencies in calabash-cucumber.gemspec
4
+ gemspec
data/LICENSE ADDED
@@ -0,0 +1,8 @@
1
+ calabash-cucumber
2
+ Copyright (c) Karl Krukow. All rights reserved.
3
+ The use and distribution terms for this software are covered by the
4
+ Eclipse Public License 1.0 (http://opensource.org/licenses/eclipse-1.0.php)
5
+ which can be found in the file epl-v10.html at the root of this distribution.
6
+ By using this software in any fashion, you are agreeing to be bound by
7
+ the terms of this license.
8
+ You must not remove this notice, or any other, from this software.
data/README.md ADDED
@@ -0,0 +1,182 @@
1
+ This guide explains how to setup and use Calabash for iOS.
2
+ =============================================================
3
+
4
+ *Note*: To use Calabash with your iOS app, you must first link your
5
+ app with the `calabash.framework` as described in the README in the
6
+ `../frameworks/` directory.
7
+
8
+ After completing this guide you will be able to run tests locally
9
+ against the iOS Simulator. You can also interactively explore the
10
+ sample application using the Ruby irb console.
11
+
12
+ Finally, you can run your Calabash tests on real physical,
13
+ non-jailbroken iOS devices (iPad, iPhone, iPod Touch) using the
14
+ LessPainful service at
15
+
16
+ (http://www.lesspainful.com)
17
+
18
+ The LessPainful service offers test reports that compares
19
+ test results and screenshots on multiple iDevices.
20
+
21
+ This guide takes approximately 5-10 minutes to complete.
22
+
23
+ Installing the client.
24
+ ----------------------
25
+
26
+ ### Prerequisites
27
+
28
+ You need to have Ruby 1.9.2+ installed, and a recent RubyGems
29
+ installation. I use RVM or rbenv to manage my Ruby installations.
30
+
31
+ For RVM, see:
32
+
33
+ [http://beginrescueend.com/](http://beginrescueend.com/)
34
+
35
+ For rbenv, see:
36
+ [https://github.com/sstephenson/rbenv](https://github.com/sstephenson/rbenv)
37
+
38
+ The rbenv project is probably the simpler of the two.
39
+
40
+ You also need XCode 4.x. This guide aims at XCode 4.2, but should
41
+ also work for XCode versions >= 4.0.
42
+
43
+ ### Installation
44
+
45
+ * Make sure ruby and ruby gems is on your path.
46
+
47
+ krukow:~/examples$ ruby -v
48
+ ruby 1.9.2p290 (2011-07-09 revision 32553) [x86_64-darwin11.1.0]
49
+ krukow:~/examples$ gem -v
50
+ 1.8.10
51
+
52
+ * Install `ilesspainfulclient-cucumber` gem version 0.1.3:
53
+
54
+ krukow:~/examples$ gem install ilesspainfulclient-cucumber
55
+ Fetching: ilesspainfulclient-cucumber-0.1.3.gem (100%)
56
+ Successfully installed ilesspainfulclient-cucumber-0.1.3
57
+ 1 gem installed
58
+
59
+ Exploring the sample application.
60
+ ---------------------------------
61
+
62
+ Download the sample app from github:
63
+
64
+ [LessPainful-ios-sample-app](https://github.com/LessPainful/LessPainful_ios_sample_app)
65
+
66
+ Let's say you've put the sample app in a into a working
67
+ directory, `examples`.
68
+
69
+ Open the XCode project: LPSimpleExample.xcodeproj using XCode.
70
+
71
+ Select the LPSimpleExample-LP and iPhone Simulator 4.3 or 5.0 scheme
72
+ under schemes.
73
+
74
+ ![Selecting the right scheme](https://github.com/LessPainful/LessPainful_ios_client/raw/master/documentation/example-1.png "Selecting Scheme")
75
+
76
+ ### Run it
77
+ CMD-R to run. Look at the log output and verify that you see:
78
+
79
+ LPSimpleExample[11298:13703] HTTPServer: Started HTTP server on port 37265
80
+
81
+ If that message is there, you're good to go.
82
+
83
+ ### Play with it
84
+
85
+ The easy way is to just run one of the irb scripts: `irb_ios4.sh` or
86
+ `irb_ios5.sh`.
87
+
88
+ From this console you can explore your application interactively.
89
+
90
+ You can query, touch, scroll, etc from the irb session.
91
+ For example, notice that the sample app has a button: "Login".
92
+
93
+ ### Query
94
+ If you're running the iOS5 iPhone simulator run `irb_ios5.sh` otherwise: `irb_ios4.sh`.
95
+
96
+ Now try this from the irb:
97
+
98
+ ruby-1.9.2-p290 :003 > query("button")
99
+
100
+ You should see something like this:
101
+
102
+ => ["<UIRoundedRectButton: 0x6567e00; frame = (109 215; 73 37); opaque = NO; autoresize = RM+BM; layer = <CALayer: 0x6567ef0>>"]
103
+
104
+ The `query` function takes a string query as an argument. They query argument is similar to a css selector, for example we can do:
105
+
106
+ ruby-1.9.2-p290 :009 > query("button label")
107
+ => ["<UIButtonLabel: 0x6624f40; frame = (16 9; 40 19); text = 'Login'; clipsToBounds = YES; opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x6645ec0>>"]
108
+
109
+ It may also take parameters that are mapped to Objective-C selectors on the found object.
110
+
111
+ ruby-1.9.2-p290 :010 > query("button label", :text)
112
+ => ["Login"]
113
+
114
+ ### Touch
115
+
116
+ Anything that can be found using query can also be touched.
117
+ Try this while you watch the iOS Simulator:
118
+
119
+ ruby-1.9.2-p290 :011 > touch("button")
120
+
121
+ Notice that the button is touched (turns blue), although this button doesn't do anything.
122
+
123
+ You can also touch the tab bars:
124
+
125
+ ruby-1.9.2-p290 :016 > touch("tabBarButton index:1")
126
+
127
+ The filter: `index:1` means that it is the second tab-bar button that should be touched.
128
+
129
+ ### Accessibility
130
+
131
+ In general UI views are found using accessibility labels. To use those in the simulator they must be enabled.
132
+
133
+ * Press the "home-screen" button in the iOS Simulator
134
+ * Scroll left and open the Settings app insied iOS Simulator
135
+ * Select `General` > `Accessibility` > `Accessibility Inspector` : On.
136
+ * Re-run the sample app from XCode.
137
+
138
+ In your irb session try this:
139
+
140
+ ruby-1.9.2-p290 :025 > query("view marked:'switch'")
141
+
142
+ This command finds a view with accessibility label 'switch' (not that we use single quotes to delimit the accessibility label.
143
+
144
+ In general, many views have accessibility labels that "make sense". For example the tab bar buttons have accessibility labels:
145
+
146
+ ruby-1.9.2-p290 :029 > touch("tabBarButton marked:'second'")
147
+
148
+ To control accessibility labels on your views use:
149
+ `isAccessibilityElement = YES, and accessibilityLabel = @"somelbl";` This can be done in interface builder or programmatically:
150
+
151
+ (void) viewDidLoad {
152
+ [super viewDidLoad];
153
+ self.uiswitch.isAccessibilityElement = YES;
154
+ self.uiswitch.accessibilityLabel = @"switch";
155
+ }
156
+
157
+ ### Advanced commands
158
+
159
+ Surprisingly, these commands are enough to navigate fairly many iOS apps. However, there are many more commands available. Consult the file `documentation/GherkinAPI.txt` for examples of how to use these.
160
+
161
+
162
+ ### Working with your app
163
+
164
+ Now you're ready to work with your app.
165
+
166
+ You should download the LessPainful-ios-server project from Github:
167
+
168
+ [LessPainful-ios-server](https://github.com/LessPainful/LessPainful_ios_server)
169
+
170
+ Read the `README` from that project, and follow the instructions on
171
+ how to run LessPainful on your project.
172
+
173
+ License
174
+ =======
175
+ LessPainful-ios-client
176
+ Copyright (c) Karl Krukow. All rights reserved.
177
+ The use and distribution terms for this software are covered by the
178
+ Eclipse Public License 1.0 (http://opensource.org/licenses/eclipse-1.0.php)
179
+ which can be found in the file epl-v10.html at the root of this distribution.
180
+ By using this software in any fashion, you are agreeing to be bound by
181
+ the terms of this license.
182
+ You must not remove this notice, or any other, from this software.
data/Rakefile ADDED
@@ -0,0 +1,2 @@
1
+ require 'bundler'
2
+ Bundler::GemHelper.install_tasks
data/bin/calabash ADDED
@@ -0,0 +1,21 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'fileutils'
4
+
5
+ features_dir = File.join( FileUtils.pwd, "features" )
6
+
7
+ if File.exists?( features_dir )
8
+ puts "A features directory already exists. I won't overwrite it. Giving up."
9
+ exit 1
10
+ else
11
+ puts "I'm about to create a subdirectory called features which will contain all your calabash tests. Please hit return to confirm that's what you want."
12
+ exit 2 unless STDIN.gets.chomp == ''
13
+ end
14
+
15
+ source_dir = File.join( File.dirname(__FILE__), '..', 'features-skeleton' )
16
+
17
+ FileUtils.cp_r( source_dir, features_dir )
18
+
19
+ puts "features subdirectory created. Try starting you app in the iOS simulator using the Calabash target (see calabash-ios-server for how to create the target)."
20
+ puts "Then try executing \n\nSTEP_PAUSE=2 OS=ios5 DEVICE=iphone cucumber"
21
+ puts "\n (replace ios5 with ios4 if running iOS 4.x simulator. Replace iphone with ipad if running iPad simulator.)."
@@ -0,0 +1,23 @@
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://www.lesspainful.com/calabash"
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 = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
17
+ s.require_paths = ["lib"]
18
+
19
+ s.add_dependency( "cucumber" )
20
+ s.add_dependency( "rspec", ["2.7.0"] )
21
+ s.add_dependency( "json" )
22
+ s.add_dependency( "net-http-persistent" )
23
+ end
data/copy_resources.sh ADDED
@@ -0,0 +1,2 @@
1
+ #!/bin/bash
2
+ cp ../resources/* lib/calabash-cucumber/resources/
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>