sauce 1.0.2 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
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
- )