sauce 1.0.2 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (56) hide show
  1. data/.document +5 -0
  2. data/.gitignore +30 -0
  3. data/Gemfile +16 -0
  4. data/README.markdown +39 -145
  5. data/Rakefile +46 -20
  6. data/bin/sauce +72 -61
  7. data/gemfiles/rails2.gemfile +10 -0
  8. data/gemfiles/rails2.gemfile.lock +77 -0
  9. data/gemfiles/rails3.gemfile +9 -0
  10. data/gemfiles/rails3.gemfile.lock +137 -0
  11. data/lib/generators/sauce/install/install_generator.rb +1 -2
  12. data/lib/sauce.rb +0 -22
  13. data/lib/sauce/capybara.rb +70 -32
  14. data/lib/sauce/capybara/cucumber.rb +121 -0
  15. data/lib/sauce/config.rb +57 -13
  16. data/lib/sauce/connect.rb +22 -11
  17. data/lib/sauce/integrations.rb +27 -69
  18. data/lib/sauce/jasmine.rb +35 -0
  19. data/lib/sauce/jasmine/rake.rb +47 -0
  20. data/lib/sauce/jasmine/runner.rb +4 -0
  21. data/lib/sauce/job.rb +10 -6
  22. data/lib/sauce/raketasks.rb +0 -21
  23. data/lib/sauce/selenium.rb +9 -18
  24. data/lib/sauce/utilities.rb +0 -17
  25. data/sauce.gemspec +8 -60
  26. data/spec/integration/connect_integration_spec.rb +84 -0
  27. data/spec/sauce/capybara/cucumber_spec.rb +156 -0
  28. data/spec/sauce/capybara/spec_helper.rb +42 -0
  29. data/spec/sauce/capybara_spec.rb +121 -0
  30. data/spec/sauce/config_spec.rb +239 -0
  31. data/spec/sauce/jasmine_spec.rb +49 -0
  32. data/spec/sauce/selenium_spec.rb +57 -0
  33. data/spec/spec_helper.rb +4 -0
  34. data/support/Sauce-Connect.jar +0 -0
  35. data/test/test_integrations.rb +202 -0
  36. data/test/test_testcase.rb +13 -0
  37. metadata +170 -171
  38. data/examples/helper.rb +0 -16
  39. data/examples/other_spec.rb +0 -7
  40. data/examples/saucelabs_spec.rb +0 -12
  41. data/examples/test_saucelabs.rb +0 -13
  42. data/examples/test_saucelabs2.rb +0 -9
  43. data/support/sauce_connect +0 -938
  44. data/support/selenium-server.jar +0 -0
  45. data/support/simplejson/LICENSE.txt +0 -19
  46. data/support/simplejson/__init__.py +0 -437
  47. data/support/simplejson/decoder.py +0 -421
  48. data/support/simplejson/encoder.py +0 -501
  49. data/support/simplejson/ordered_dict.py +0 -119
  50. data/support/simplejson/scanner.py +0 -77
  51. data/support/simplejson/tool.py +0 -39
  52. data/test/test_config.rb +0 -112
  53. data/test/test_connect.rb +0 -45
  54. data/test/test_job.rb +0 -13
  55. data/test/test_selenium.rb +0 -50
  56. data/test/test_selenium2.rb +0 -9
Binary file
@@ -1,19 +0,0 @@
1
- Copyright (c) 2006 Bob Ippolito
2
-
3
- Permission is hereby granted, free of charge, to any person obtaining a copy of
4
- this software and associated documentation files (the "Software"), to deal in
5
- the Software without restriction, including without limitation the rights to
6
- use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
7
- of the Software, and to permit persons to whom the Software is furnished to do
8
- so, subject to the following conditions:
9
-
10
- The above copyright notice and this permission notice shall be included in all
11
- copies or substantial portions of the Software.
12
-
13
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
19
- SOFTWARE.
@@ -1,437 +0,0 @@
1
- r"""JSON (JavaScript Object Notation) <http://json.org> is a subset of
2
- JavaScript syntax (ECMA-262 3rd edition) used as a lightweight data
3
- interchange format.
4
-
5
- :mod:`simplejson` exposes an API familiar to users of the standard library
6
- :mod:`marshal` and :mod:`pickle` modules. It is the externally maintained
7
- version of the :mod:`json` library contained in Python 2.6, but maintains
8
- compatibility with Python 2.4 and Python 2.5 and (currently) has
9
- significant performance advantages, even without using the optional C
10
- extension for speedups.
11
-
12
- Encoding basic Python object hierarchies::
13
-
14
- >>> import simplejson as json
15
- >>> json.dumps(['foo', {'bar': ('baz', None, 1.0, 2)}])
16
- '["foo", {"bar": ["baz", null, 1.0, 2]}]'
17
- >>> print json.dumps("\"foo\bar")
18
- "\"foo\bar"
19
- >>> print json.dumps(u'\u1234')
20
- "\u1234"
21
- >>> print json.dumps('\\')
22
- "\\"
23
- >>> print json.dumps({"c": 0, "b": 0, "a": 0}, sort_keys=True)
24
- {"a": 0, "b": 0, "c": 0}
25
- >>> from StringIO import StringIO
26
- >>> io = StringIO()
27
- >>> json.dump(['streaming API'], io)
28
- >>> io.getvalue()
29
- '["streaming API"]'
30
-
31
- Compact encoding::
32
-
33
- >>> import simplejson as json
34
- >>> json.dumps([1,2,3,{'4': 5, '6': 7}], separators=(',',':'))
35
- '[1,2,3,{"4":5,"6":7}]'
36
-
37
- Pretty printing::
38
-
39
- >>> import simplejson as json
40
- >>> s = json.dumps({'4': 5, '6': 7}, sort_keys=True, indent=' ')
41
- >>> print '\n'.join([l.rstrip() for l in s.splitlines()])
42
- {
43
- "4": 5,
44
- "6": 7
45
- }
46
-
47
- Decoding JSON::
48
-
49
- >>> import simplejson as json
50
- >>> obj = [u'foo', {u'bar': [u'baz', None, 1.0, 2]}]
51
- >>> json.loads('["foo", {"bar":["baz", null, 1.0, 2]}]') == obj
52
- True
53
- >>> json.loads('"\\"foo\\bar"') == u'"foo\x08ar'
54
- True
55
- >>> from StringIO import StringIO
56
- >>> io = StringIO('["streaming API"]')
57
- >>> json.load(io)[0] == 'streaming API'
58
- True
59
-
60
- Specializing JSON object decoding::
61
-
62
- >>> import simplejson as json
63
- >>> def as_complex(dct):
64
- ... if '__complex__' in dct:
65
- ... return complex(dct['real'], dct['imag'])
66
- ... return dct
67
- ...
68
- >>> json.loads('{"__complex__": true, "real": 1, "imag": 2}',
69
- ... object_hook=as_complex)
70
- (1+2j)
71
- >>> from decimal import Decimal
72
- >>> json.loads('1.1', parse_float=Decimal) == Decimal('1.1')
73
- True
74
-
75
- Specializing JSON object encoding::
76
-
77
- >>> import simplejson as json
78
- >>> def encode_complex(obj):
79
- ... if isinstance(obj, complex):
80
- ... return [obj.real, obj.imag]
81
- ... raise TypeError(repr(o) + " is not JSON serializable")
82
- ...
83
- >>> json.dumps(2 + 1j, default=encode_complex)
84
- '[2.0, 1.0]'
85
- >>> json.JSONEncoder(default=encode_complex).encode(2 + 1j)
86
- '[2.0, 1.0]'
87
- >>> ''.join(json.JSONEncoder(default=encode_complex).iterencode(2 + 1j))
88
- '[2.0, 1.0]'
89
-
90
-
91
- Using simplejson.tool from the shell to validate and pretty-print::
92
-
93
- $ echo '{"json":"obj"}' | python -m simplejson.tool
94
- {
95
- "json": "obj"
96
- }
97
- $ echo '{ 1.2:3.4}' | python -m simplejson.tool
98
- Expecting property name: line 1 column 2 (char 2)
99
- """
100
- __version__ = '2.1.1'
101
- __all__ = [
102
- 'dump', 'dumps', 'load', 'loads',
103
- 'JSONDecoder', 'JSONDecodeError', 'JSONEncoder',
104
- 'OrderedDict',
105
- ]
106
-
107
- __author__ = 'Bob Ippolito <bob@redivi.com>'
108
-
109
- from decimal import Decimal
110
-
111
- from decoder import JSONDecoder, JSONDecodeError
112
- from encoder import JSONEncoder
113
- def _import_OrderedDict():
114
- import collections
115
- try:
116
- return collections.OrderedDict
117
- except AttributeError:
118
- import ordered_dict
119
- return ordered_dict.OrderedDict
120
- OrderedDict = _import_OrderedDict()
121
-
122
- def _import_c_make_encoder():
123
- try:
124
- from simplejson._speedups import make_encoder
125
- return make_encoder
126
- except ImportError:
127
- return None
128
-
129
- _default_encoder = JSONEncoder(
130
- skipkeys=False,
131
- ensure_ascii=True,
132
- check_circular=True,
133
- allow_nan=True,
134
- indent=None,
135
- separators=None,
136
- encoding='utf-8',
137
- default=None,
138
- use_decimal=False,
139
- )
140
-
141
- def dump(obj, fp, skipkeys=False, ensure_ascii=True, check_circular=True,
142
- allow_nan=True, cls=None, indent=None, separators=None,
143
- encoding='utf-8', default=None, use_decimal=False, **kw):
144
- """Serialize ``obj`` as a JSON formatted stream to ``fp`` (a
145
- ``.write()``-supporting file-like object).
146
-
147
- If ``skipkeys`` is true then ``dict`` keys that are not basic types
148
- (``str``, ``unicode``, ``int``, ``long``, ``float``, ``bool``, ``None``)
149
- will be skipped instead of raising a ``TypeError``.
150
-
151
- If ``ensure_ascii`` is false, then the some chunks written to ``fp``
152
- may be ``unicode`` instances, subject to normal Python ``str`` to
153
- ``unicode`` coercion rules. Unless ``fp.write()`` explicitly
154
- understands ``unicode`` (as in ``codecs.getwriter()``) this is likely
155
- to cause an error.
156
-
157
- If ``check_circular`` is false, then the circular reference check
158
- for container types will be skipped and a circular reference will
159
- result in an ``OverflowError`` (or worse).
160
-
161
- If ``allow_nan`` is false, then it will be a ``ValueError`` to
162
- serialize out of range ``float`` values (``nan``, ``inf``, ``-inf``)
163
- in strict compliance of the JSON specification, instead of using the
164
- JavaScript equivalents (``NaN``, ``Infinity``, ``-Infinity``).
165
-
166
- If *indent* is a string, then JSON array elements and object members
167
- will be pretty-printed with a newline followed by that string repeated
168
- for each level of nesting. ``None`` (the default) selects the most compact
169
- representation without any newlines. For backwards compatibility with
170
- versions of simplejson earlier than 2.1.0, an integer is also accepted
171
- and is converted to a string with that many spaces.
172
-
173
- If ``separators`` is an ``(item_separator, dict_separator)`` tuple
174
- then it will be used instead of the default ``(', ', ': ')`` separators.
175
- ``(',', ':')`` is the most compact JSON representation.
176
-
177
- ``encoding`` is the character encoding for str instances, default is UTF-8.
178
-
179
- ``default(obj)`` is a function that should return a serializable version
180
- of obj or raise TypeError. The default simply raises TypeError.
181
-
182
- If *use_decimal* is true (default: ``False``) then decimal.Decimal
183
- will be natively serialized to JSON with full precision.
184
-
185
- To use a custom ``JSONEncoder`` subclass (e.g. one that overrides the
186
- ``.default()`` method to serialize additional types), specify it with
187
- the ``cls`` kwarg.
188
-
189
- """
190
- # cached encoder
191
- if (not skipkeys and ensure_ascii and
192
- check_circular and allow_nan and
193
- cls is None and indent is None and separators is None and
194
- encoding == 'utf-8' and default is None and not kw):
195
- iterable = _default_encoder.iterencode(obj)
196
- else:
197
- if cls is None:
198
- cls = JSONEncoder
199
- iterable = cls(skipkeys=skipkeys, ensure_ascii=ensure_ascii,
200
- check_circular=check_circular, allow_nan=allow_nan, indent=indent,
201
- separators=separators, encoding=encoding,
202
- default=default, use_decimal=use_decimal, **kw).iterencode(obj)
203
- # could accelerate with writelines in some versions of Python, at
204
- # a debuggability cost
205
- for chunk in iterable:
206
- fp.write(chunk)
207
-
208
-
209
- def dumps(obj, skipkeys=False, ensure_ascii=True, check_circular=True,
210
- allow_nan=True, cls=None, indent=None, separators=None,
211
- encoding='utf-8', default=None, use_decimal=False, **kw):
212
- """Serialize ``obj`` to a JSON formatted ``str``.
213
-
214
- If ``skipkeys`` is false then ``dict`` keys that are not basic types
215
- (``str``, ``unicode``, ``int``, ``long``, ``float``, ``bool``, ``None``)
216
- will be skipped instead of raising a ``TypeError``.
217
-
218
- If ``ensure_ascii`` is false, then the return value will be a
219
- ``unicode`` instance subject to normal Python ``str`` to ``unicode``
220
- coercion rules instead of being escaped to an ASCII ``str``.
221
-
222
- If ``check_circular`` is false, then the circular reference check
223
- for container types will be skipped and a circular reference will
224
- result in an ``OverflowError`` (or worse).
225
-
226
- If ``allow_nan`` is false, then it will be a ``ValueError`` to
227
- serialize out of range ``float`` values (``nan``, ``inf``, ``-inf``) in
228
- strict compliance of the JSON specification, instead of using the
229
- JavaScript equivalents (``NaN``, ``Infinity``, ``-Infinity``).
230
-
231
- If ``indent`` is a string, then JSON array elements and object members
232
- will be pretty-printed with a newline followed by that string repeated
233
- for each level of nesting. ``None`` (the default) selects the most compact
234
- representation without any newlines. For backwards compatibility with
235
- versions of simplejson earlier than 2.1.0, an integer is also accepted
236
- and is converted to a string with that many spaces.
237
-
238
- If ``separators`` is an ``(item_separator, dict_separator)`` tuple
239
- then it will be used instead of the default ``(', ', ': ')`` separators.
240
- ``(',', ':')`` is the most compact JSON representation.
241
-
242
- ``encoding`` is the character encoding for str instances, default is UTF-8.
243
-
244
- ``default(obj)`` is a function that should return a serializable version
245
- of obj or raise TypeError. The default simply raises TypeError.
246
-
247
- If *use_decimal* is true (default: ``False``) then decimal.Decimal
248
- will be natively serialized to JSON with full precision.
249
-
250
- To use a custom ``JSONEncoder`` subclass (e.g. one that overrides the
251
- ``.default()`` method to serialize additional types), specify it with
252
- the ``cls`` kwarg.
253
-
254
- """
255
- # cached encoder
256
- if (not skipkeys and ensure_ascii and
257
- check_circular and allow_nan and
258
- cls is None and indent is None and separators is None and
259
- encoding == 'utf-8' and default is None and not use_decimal
260
- and not kw):
261
- return _default_encoder.encode(obj)
262
- if cls is None:
263
- cls = JSONEncoder
264
- return cls(
265
- skipkeys=skipkeys, ensure_ascii=ensure_ascii,
266
- check_circular=check_circular, allow_nan=allow_nan, indent=indent,
267
- separators=separators, encoding=encoding, default=default,
268
- use_decimal=use_decimal, **kw).encode(obj)
269
-
270
-
271
- _default_decoder = JSONDecoder(encoding=None, object_hook=None,
272
- object_pairs_hook=None)
273
-
274
-
275
- def load(fp, encoding=None, cls=None, object_hook=None, parse_float=None,
276
- parse_int=None, parse_constant=None, object_pairs_hook=None,
277
- use_decimal=False, **kw):
278
- """Deserialize ``fp`` (a ``.read()``-supporting file-like object containing
279
- a JSON document) to a Python object.
280
-
281
- *encoding* determines the encoding used to interpret any
282
- :class:`str` objects decoded by this instance (``'utf-8'`` by
283
- default). It has no effect when decoding :class:`unicode` objects.
284
-
285
- Note that currently only encodings that are a superset of ASCII work,
286
- strings of other encodings should be passed in as :class:`unicode`.
287
-
288
- *object_hook*, if specified, will be called with the result of every
289
- JSON object decoded and its return value will be used in place of the
290
- given :class:`dict`. This can be used to provide custom
291
- deserializations (e.g. to support JSON-RPC class hinting).
292
-
293
- *object_pairs_hook* is an optional function that will be called with
294
- the result of any object literal decode with an ordered list of pairs.
295
- The return value of *object_pairs_hook* will be used instead of the
296
- :class:`dict`. This feature can be used to implement custom decoders
297
- that rely on the order that the key and value pairs are decoded (for
298
- example, :func:`collections.OrderedDict` will remember the order of
299
- insertion). If *object_hook* is also defined, the *object_pairs_hook*
300
- takes priority.
301
-
302
- *parse_float*, if specified, will be called with the string of every
303
- JSON float to be decoded. By default, this is equivalent to
304
- ``float(num_str)``. This can be used to use another datatype or parser
305
- for JSON floats (e.g. :class:`decimal.Decimal`).
306
-
307
- *parse_int*, if specified, will be called with the string of every
308
- JSON int to be decoded. By default, this is equivalent to
309
- ``int(num_str)``. This can be used to use another datatype or parser
310
- for JSON integers (e.g. :class:`float`).
311
-
312
- *parse_constant*, if specified, will be called with one of the
313
- following strings: ``'-Infinity'``, ``'Infinity'``, ``'NaN'``. This
314
- can be used to raise an exception if invalid JSON numbers are
315
- encountered.
316
-
317
- If *use_decimal* is true (default: ``False``) then it implies
318
- parse_float=decimal.Decimal for parity with ``dump``.
319
-
320
- To use a custom ``JSONDecoder`` subclass, specify it with the ``cls``
321
- kwarg.
322
-
323
- """
324
- return loads(fp.read(),
325
- encoding=encoding, cls=cls, object_hook=object_hook,
326
- parse_float=parse_float, parse_int=parse_int,
327
- parse_constant=parse_constant, object_pairs_hook=object_pairs_hook,
328
- use_decimal=use_decimal, **kw)
329
-
330
-
331
- def loads(s, encoding=None, cls=None, object_hook=None, parse_float=None,
332
- parse_int=None, parse_constant=None, object_pairs_hook=None,
333
- use_decimal=False, **kw):
334
- """Deserialize ``s`` (a ``str`` or ``unicode`` instance containing a JSON
335
- document) to a Python object.
336
-
337
- *encoding* determines the encoding used to interpret any
338
- :class:`str` objects decoded by this instance (``'utf-8'`` by
339
- default). It has no effect when decoding :class:`unicode` objects.
340
-
341
- Note that currently only encodings that are a superset of ASCII work,
342
- strings of other encodings should be passed in as :class:`unicode`.
343
-
344
- *object_hook*, if specified, will be called with the result of every
345
- JSON object decoded and its return value will be used in place of the
346
- given :class:`dict`. This can be used to provide custom
347
- deserializations (e.g. to support JSON-RPC class hinting).
348
-
349
- *object_pairs_hook* is an optional function that will be called with
350
- the result of any object literal decode with an ordered list of pairs.
351
- The return value of *object_pairs_hook* will be used instead of the
352
- :class:`dict`. This feature can be used to implement custom decoders
353
- that rely on the order that the key and value pairs are decoded (for
354
- example, :func:`collections.OrderedDict` will remember the order of
355
- insertion). If *object_hook* is also defined, the *object_pairs_hook*
356
- takes priority.
357
-
358
- *parse_float*, if specified, will be called with the string of every
359
- JSON float to be decoded. By default, this is equivalent to
360
- ``float(num_str)``. This can be used to use another datatype or parser
361
- for JSON floats (e.g. :class:`decimal.Decimal`).
362
-
363
- *parse_int*, if specified, will be called with the string of every
364
- JSON int to be decoded. By default, this is equivalent to
365
- ``int(num_str)``. This can be used to use another datatype or parser
366
- for JSON integers (e.g. :class:`float`).
367
-
368
- *parse_constant*, if specified, will be called with one of the
369
- following strings: ``'-Infinity'``, ``'Infinity'``, ``'NaN'``. This
370
- can be used to raise an exception if invalid JSON numbers are
371
- encountered.
372
-
373
- If *use_decimal* is true (default: ``False``) then it implies
374
- parse_float=decimal.Decimal for parity with ``dump``.
375
-
376
- To use a custom ``JSONDecoder`` subclass, specify it with the ``cls``
377
- kwarg.
378
-
379
- """
380
- if (cls is None and encoding is None and object_hook is None and
381
- parse_int is None and parse_float is None and
382
- parse_constant is None and object_pairs_hook is None
383
- and not use_decimal and not kw):
384
- return _default_decoder.decode(s)
385
- if cls is None:
386
- cls = JSONDecoder
387
- if object_hook is not None:
388
- kw['object_hook'] = object_hook
389
- if object_pairs_hook is not None:
390
- kw['object_pairs_hook'] = object_pairs_hook
391
- if parse_float is not None:
392
- kw['parse_float'] = parse_float
393
- if parse_int is not None:
394
- kw['parse_int'] = parse_int
395
- if parse_constant is not None:
396
- kw['parse_constant'] = parse_constant
397
- if use_decimal:
398
- if parse_float is not None:
399
- raise TypeError("use_decimal=True implies parse_float=Decimal")
400
- kw['parse_float'] = Decimal
401
- return cls(encoding=encoding, **kw).decode(s)
402
-
403
-
404
- def _toggle_speedups(enabled):
405
- import simplejson.decoder as dec
406
- import simplejson.encoder as enc
407
- import simplejson.scanner as scan
408
- c_make_encoder = _import_c_make_encoder()
409
- if enabled:
410
- dec.scanstring = dec.c_scanstring or dec.py_scanstring
411
- enc.c_make_encoder = c_make_encoder
412
- enc.encode_basestring_ascii = (enc.c_encode_basestring_ascii or
413
- enc.py_encode_basestring_ascii)
414
- scan.make_scanner = scan.c_make_scanner or scan.py_make_scanner
415
- else:
416
- dec.scanstring = dec.py_scanstring
417
- enc.c_make_encoder = None
418
- enc.encode_basestring_ascii = enc.py_encode_basestring_ascii
419
- scan.make_scanner = scan.py_make_scanner
420
- dec.make_scanner = scan.make_scanner
421
- global _default_decoder
422
- _default_decoder = JSONDecoder(
423
- encoding=None,
424
- object_hook=None,
425
- object_pairs_hook=None,
426
- )
427
- global _default_encoder
428
- _default_encoder = JSONEncoder(
429
- skipkeys=False,
430
- ensure_ascii=True,
431
- check_circular=True,
432
- allow_nan=True,
433
- indent=None,
434
- separators=None,
435
- encoding='utf-8',
436
- default=None,
437
- )