calabash-cucumber 0.9.0
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +3 -0
- data/CHANGES.txt +1 -0
- data/Gemfile +4 -0
- data/LICENSE +8 -0
- data/README.md +182 -0
- data/Rakefile +2 -0
- data/bin/calabash +21 -0
- data/calabash-cucumber.gemspec +23 -0
- data/copy_resources.sh +2 -0
- data/epl-v10.html +261 -0
- data/features-skeleton/my_first.feature +8 -0
- data/features-skeleton/step_definitions/calabash_steps.rb +1 -0
- data/features-skeleton/support/env.rb +1 -0
- data/features-skeleton/support/hooks.rb +17 -0
- data/lib/calabash-cucumber.rb +0 -0
- data/lib/calabash-cucumber/calabash_steps.rb +307 -0
- data/lib/calabash-cucumber/color_helper.rb +13 -0
- data/lib/calabash-cucumber/cucumber.rb +9 -0
- data/lib/calabash-cucumber/operations.rb +271 -0
- data/lib/calabash-cucumber/resources/cell_swipe_ios4_ipad.base64 +51 -0
- data/lib/calabash-cucumber/resources/cell_swipe_ios4_iphone.base64 +51 -0
- data/lib/calabash-cucumber/resources/cell_swipe_ios5_ipad.base64 +74 -0
- data/lib/calabash-cucumber/resources/cell_swipe_ios5_iphone.base64 +74 -0
- data/lib/calabash-cucumber/resources/pinch_in_ios4_ipad.base64 +104 -0
- data/lib/calabash-cucumber/resources/pinch_in_ios4_iphone.base64 +104 -0
- data/lib/calabash-cucumber/resources/pinch_in_ios5_ipad.base64 +144 -0
- data/lib/calabash-cucumber/resources/pinch_in_ios5_iphone.base64 +144 -0
- data/lib/calabash-cucumber/resources/pinch_out_ios5_ipad.base64 +207 -0
- data/lib/calabash-cucumber/resources/pinch_out_ios5_iphone.base64 +207 -0
- data/lib/calabash-cucumber/resources/swipe_left_hard_ios4_ipad.base64 +15 -0
- data/lib/calabash-cucumber/resources/swipe_left_hard_ios4_iphone.base64 +15 -0
- data/lib/calabash-cucumber/resources/swipe_left_ios4_ipad.base64 +18 -0
- data/lib/calabash-cucumber/resources/swipe_left_ios4_iphone.base64 +18 -0
- data/lib/calabash-cucumber/resources/swipe_left_ios5_ipad.base64 +17 -0
- data/lib/calabash-cucumber/resources/swipe_left_ios5_iphone.base64 +17 -0
- data/lib/calabash-cucumber/resources/swipe_right_hard_ios4_ipad.base64 +17 -0
- data/lib/calabash-cucumber/resources/swipe_right_hard_ios4_iphone.base64 +17 -0
- data/lib/calabash-cucumber/resources/swipe_right_ios4_ipad.base64 +13 -0
- data/lib/calabash-cucumber/resources/swipe_right_ios4_iphone.base64 +13 -0
- data/lib/calabash-cucumber/resources/swipe_right_ios5_ipad.base64 +17 -0
- data/lib/calabash-cucumber/resources/swipe_right_ios5_iphone.base64 +17 -0
- data/lib/calabash-cucumber/resources/touch_done_ios4_ipad.base64 +8 -0
- data/lib/calabash-cucumber/resources/touch_done_ios4_iphone.base64 +8 -0
- data/lib/calabash-cucumber/resources/touch_done_ios5_ipad.base64 +8 -0
- data/lib/calabash-cucumber/resources/touch_done_ios5_iphone.base64 +8 -0
- data/lib/calabash-cucumber/resources/touch_ios4_ipad.base64 +7 -0
- data/lib/calabash-cucumber/resources/touch_ios4_iphone.base64 +7 -0
- data/lib/calabash-cucumber/resources/touch_ios5_ipad.base64 +8 -0
- data/lib/calabash-cucumber/resources/touch_ios5_iphone.base64 +8 -0
- data/lib/calabash-cucumber/version.rb +5 -0
- metadata +141 -0
data/.gitignore
ADDED
data/CHANGES.txt
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
1.0.0: Initial calabash release
|
data/Gemfile
ADDED
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
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
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 ("AGREEMENT"). 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>"Contribution" 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>"Contributor" means any person or entity that distributes
|
56
|
+
the Program.</p>
|
57
|
+
|
58
|
+
<p>"Licensed Patents" 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>"Program" means the Contributions distributed in accordance
|
63
|
+
with this Agreement.</p>
|
64
|
+
|
65
|
+
<p>"Recipient" 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
|
+
("Commercial Contributor") hereby agrees to defend and
|
158
|
+
indemnify every other Contributor ("Indemnified Contributor")
|
159
|
+
against any losses, damages and costs (collectively "Losses")
|
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 "AS IS" 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>
|