test-factory 0.4.3 → 0.4.5
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.
- checksums.yaml +8 -8
- data/lib/test-factory/collections_factory.rb +11 -1
- data/lib/test-factory/core_ext.rb +1 -1
- data/lib/test-factory/data_factory.rb +89 -4
- data/lib/test-factory/date_factory.rb +1 -1
- data/lib/test-factory/foundry.rb +1 -1
- data/lib/test-factory/gem_ext.rb +1 -1
- data/lib/test-factory/page_factory.rb +1 -1
- data/lib/test-factory/string_factory.rb +5 -3
- data/lib/test-factory.rb +1 -1
- data/test-factory.gemspec +1 -1
- metadata +2 -3
- data/lib/test-factory/data_object.rb +0 -53
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
Y2IzNTk5NjIwMTI3ZDRiMzcyZmE1MDcxZDg1MTVjODZjMWRmODRkYQ==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
NDM0ZTRlYmI0ZmI5NDAzYTk0YWViMmM3NWE5NTk0MGQzY2I3YzFmOQ==
|
7
7
|
!binary "U0hBNTEy":
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
ZmE2NDVmMGY4NTAzZWIzMTFhZjZlN2FlNWQxNTUwOTJhMzU2YjJkOGQ2NTk4
|
10
|
+
ZGYwMDE0NTg0ZjBhZDBkNGU0MTdlYWM3NDBlNGU1NGJjZjNhYTNhY2NhNGNm
|
11
|
+
YzY5OGEyZjg2ODU2OTExZWZhODRhYzM5NDFlODVlMWZjYWE3ODY=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
MjI4ODUxNDcwZWE5YjJjZjllN2ZmYzAzOGUyZjk3NTIxMWRlOTA2ZDNhOGEy
|
14
|
+
OGE3YTYxMjM0MTVkNTVmM2RlYjhhMTQyYjI0ZmFjMzc0MDY3ZDY4NzcwNWUz
|
15
|
+
NGUwZGFmZTMyODBhODE3MzllZTc5ZWM2NDQwMzRkMTA5NWI4ODQ=
|
@@ -1,4 +1,4 @@
|
|
1
|
-
# Copyright 2012-
|
1
|
+
# Copyright 2012-2014 The rSmart Group, Inc.
|
2
2
|
|
3
3
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
4
4
|
# you may not use this file except in compliance with the License.
|
@@ -51,6 +51,16 @@ class CollectionsFactory < Array
|
|
51
51
|
new_collection
|
52
52
|
end
|
53
53
|
|
54
|
+
# Used in conjunction with the Parent object containing
|
55
|
+
# the collection.
|
56
|
+
#
|
57
|
+
# The parent sends updated information to the collection(s)
|
58
|
+
# using #notify_collections
|
59
|
+
#
|
60
|
+
def notify_members *updates
|
61
|
+
self.each { |member| member.update_from_parent *updates }
|
62
|
+
end
|
63
|
+
|
54
64
|
end
|
55
65
|
|
56
66
|
# Just an alias class name.
|
@@ -1,4 +1,4 @@
|
|
1
|
-
# Copyright 2012-
|
1
|
+
# Copyright 2012-2014 The rSmart Group, Inc.
|
2
2
|
|
3
3
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
4
4
|
# you may not use this file except in compliance with the License.
|
@@ -12,16 +12,58 @@
|
|
12
12
|
# See the License for the specific language governing permissions and
|
13
13
|
# limitations under the License.
|
14
14
|
|
15
|
-
#
|
16
|
-
|
15
|
+
# The Superclass for all of your data objects.
|
16
|
+
class DataFactory
|
17
|
+
|
18
|
+
include Foundry
|
19
|
+
|
20
|
+
# Since Data Objects are not "Marshallable", and they generally
|
21
|
+
# contain lots of types of data in their instance variables,
|
22
|
+
# we have this method. This will create and return a 'deep copy' of
|
23
|
+
# the data object as well as any and all nested data objects
|
24
|
+
# and collections it contains.
|
25
|
+
#
|
26
|
+
# Please note that this method will fail if you are putting
|
27
|
+
# Data Objects into Arrays or Hashes instead
|
28
|
+
# of into Collection classes
|
29
|
+
#
|
30
|
+
def data_object_copy
|
31
|
+
opts = {}
|
32
|
+
self.instance_variables.each do |var|
|
33
|
+
key = var.to_s.gsub('@','').to_sym
|
34
|
+
orig_val = instance_variable_get var
|
35
|
+
opts[key] = case
|
36
|
+
when orig_val.kind_of?(CollectionsFactory)
|
37
|
+
orig_val.copy
|
38
|
+
when orig_val.instance_of?(Array) || orig_val.instance_of?(Hash)
|
39
|
+
begin
|
40
|
+
Marshal::load(Marshal.dump(orig_val))
|
41
|
+
rescue TypeError
|
42
|
+
raise %{\nKey: #{key.inspect}\nValue: #{orig_val.inspect}\nClass: #{orig_val.class}\n\nThe copying of the Data Object has thrown a TypeError,\nwhich means the object detailed above is not "Marshallable".\nThe most likely cause is that you have put\na Data Object inside an\nArray or Hash.\nIf possible, put the Data Object into a Collection.\n\n}
|
43
|
+
end
|
44
|
+
when orig_val.kind_of?(DataFactory)
|
45
|
+
orig_val.data_object_copy
|
46
|
+
else
|
47
|
+
orig_val
|
48
|
+
end
|
49
|
+
end
|
50
|
+
self.class.new(@browser, opts)
|
51
|
+
end
|
17
52
|
|
18
53
|
# Add this to the bottom of your Data Object's initialize method.
|
19
|
-
#
|
54
|
+
# This method does 2 things:
|
55
|
+
# 1) Converts the contents of the hash into the class's instance variables.
|
56
|
+
# 2) Grabs the names of your collection class instance variables and stores
|
57
|
+
# them in an Array. This is to allow for the data object class to send
|
58
|
+
# any needed updates to its children. See #notify_coolections for more
|
59
|
+
# details.
|
20
60
|
# @param hash [Hash] Contains all options required for creating the needed Data Object
|
21
61
|
#
|
22
62
|
def set_options(hash)
|
63
|
+
@collections = []
|
23
64
|
hash.each do |key, value|
|
24
65
|
instance_variable_set("@#{key}", value)
|
66
|
+
@collections << key if value.kind_of?(CollectionsFactory)
|
25
67
|
end
|
26
68
|
end
|
27
69
|
alias update_options set_options
|
@@ -253,6 +295,20 @@ module DataFactory
|
|
253
295
|
end
|
254
296
|
end
|
255
297
|
|
298
|
+
# Define this method in your data object when
|
299
|
+
# it has a parent, and that parent
|
300
|
+
# may periodically need to send
|
301
|
+
# it updated information about itself.
|
302
|
+
#
|
303
|
+
def update_from_parent(update)
|
304
|
+
raise %{
|
305
|
+
This method must be implemented in your data object
|
306
|
+
class if you plan to pass updates from a
|
307
|
+
parent object to the members of its
|
308
|
+
collections.
|
309
|
+
}
|
310
|
+
end
|
311
|
+
|
256
312
|
# =======
|
257
313
|
private
|
258
314
|
# =======
|
@@ -274,4 +330,33 @@ module DataFactory
|
|
274
330
|
end
|
275
331
|
end
|
276
332
|
|
333
|
+
# Use this method in conjunction with your nested
|
334
|
+
# collection classes. The collections will notify
|
335
|
+
# their members about the passed parameters.
|
336
|
+
#
|
337
|
+
# Note: You must write a custom #update_from_parent
|
338
|
+
# method in your data object that will know what to
|
339
|
+
# do with the parameter(s) passed to it.
|
340
|
+
#
|
341
|
+
def notify_collections *updates
|
342
|
+
@collections.each {|coll| instance_variable_get("@#{coll}").notify_members *updates }
|
343
|
+
end
|
344
|
+
|
345
|
+
end
|
346
|
+
|
347
|
+
# An alias, for backwards compatibility...
|
348
|
+
class DataObject < DataFactory
|
349
|
+
|
350
|
+
warn %{
|
351
|
+
Welcome to version 0.4.5!
|
352
|
+
|
353
|
+
Please update all your Data Object classes to
|
354
|
+
inherit from DataFactory
|
355
|
+
instead of DataObject.
|
356
|
+
|
357
|
+
Note that in the future this warning will be going
|
358
|
+
away. You'll just get an error, so
|
359
|
+
be sure you update your project soon!
|
360
|
+
}
|
361
|
+
|
277
362
|
end
|
data/lib/test-factory/foundry.rb
CHANGED
data/lib/test-factory/gem_ext.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# coding: UTF-8
|
2
2
|
|
3
|
-
# Copyright 2012-
|
3
|
+
# Copyright 2012-2014 The rSmart Group, Inc.
|
4
4
|
|
5
5
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
6
6
|
# you may not use this file except in compliance with the License.
|
@@ -20,7 +20,8 @@ module StringFactory
|
|
20
20
|
# A random string creator that draws from all printable ASCII characters
|
21
21
|
# from 33 to 128. Default length is 10 characters.
|
22
22
|
# @param length [Integer] The count of characters in the string
|
23
|
-
# @param s [String] Typically this will be left blank, but if included, any string created will be prepended with s. Note that the string length will
|
23
|
+
# @param s [String] Typically this will be left blank, but if included, any string created will be prepended with s. Note that the string length will
|
24
|
+
# be longer by the size of the pre-pended string.
|
24
25
|
#
|
25
26
|
def random_string(length=10, s="")
|
26
27
|
length.enum_for(:times).inject(s) { s << rand(93) + 33 }
|
@@ -29,7 +30,8 @@ module StringFactory
|
|
29
30
|
# A random string creator that draws from all printable ASCII and High ASCII characters
|
30
31
|
# from 33 to 256. Default length is 10 characters.
|
31
32
|
# @param length [Integer] The count of characters in the string
|
32
|
-
# @param s [String] Typically this will be left blank, but if included, any string created will be prepended with s. Note that the string length will
|
33
|
+
# @param s [String] Typically this will be left blank, but if included, any string created will be prepended with s. Note that the string length will be
|
34
|
+
# longer by the length of the pre-pended string.
|
33
35
|
#
|
34
36
|
def random_high_ascii(length=10, s="")
|
35
37
|
length.enum_for(:times).inject(s) { s << rand(223) + 33 }
|
data/lib/test-factory.rb
CHANGED
data/test-factory.gemspec
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
spec = Gem::Specification.new do |s|
|
2
2
|
s.name = 'test-factory'
|
3
|
-
s.version = '0.4.
|
3
|
+
s.version = '0.4.5'
|
4
4
|
s.summary = %q{rSmart's framework for creating automated testing scripts}
|
5
5
|
s.description = %q{This gem provides a set of modules and methods to help quickly and DRYly create a test automation framework using Ruby and Watir (or watir-webdriver).}
|
6
6
|
s.files = Dir.glob("**/**/**")
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: test-factory
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.4.
|
4
|
+
version: 0.4.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Abraham Heward
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-
|
11
|
+
date: 2014-03-17 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: watir-webdriver
|
@@ -38,7 +38,6 @@ files:
|
|
38
38
|
- lib/test-factory/collections_factory.rb
|
39
39
|
- lib/test-factory/core_ext.rb
|
40
40
|
- lib/test-factory/data_factory.rb
|
41
|
-
- lib/test-factory/data_object.rb
|
42
41
|
- lib/test-factory/date_factory.rb
|
43
42
|
- lib/test-factory/foundry.rb
|
44
43
|
- lib/test-factory/gem_ext.rb
|
@@ -1,53 +0,0 @@
|
|
1
|
-
# Copyright 2012-2013 The rSmart Group, Inc.
|
2
|
-
|
3
|
-
# Licensed under the Apache License, Version 2.0 (the "License");
|
4
|
-
# you may not use this file except in compliance with the License.
|
5
|
-
# You may obtain a copy of the License at
|
6
|
-
|
7
|
-
# http://www.apache.org/licenses/LICENSE-2.0
|
8
|
-
|
9
|
-
# Unless required by applicable law or agreed to in writing, software
|
10
|
-
# distributed under the License is distributed on an "AS IS" BASIS,
|
11
|
-
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
12
|
-
# See the License for the specific language governing permissions and
|
13
|
-
# limitations under the License.
|
14
|
-
|
15
|
-
# The Superclass for all of your data objects.
|
16
|
-
class DataObjectFactory
|
17
|
-
|
18
|
-
include Foundry
|
19
|
-
include DataFactory
|
20
|
-
|
21
|
-
# Since Data Objects are not "Marshallable", and they generally
|
22
|
-
# contain lots of types of data in their instance variables,
|
23
|
-
# we have this method. This will create and return a 'deep copy' of
|
24
|
-
# the data object as well as any and all nested data objects
|
25
|
-
# and collections it contains.
|
26
|
-
#
|
27
|
-
# Please note that this method will fail if you are putting
|
28
|
-
# Data Objects into Arrays or Hashes instead
|
29
|
-
# of into Collection classes
|
30
|
-
#
|
31
|
-
def data_object_copy
|
32
|
-
opts = {}
|
33
|
-
self.instance_variables.each do |var|
|
34
|
-
key = var.to_s.gsub('@','').to_sym
|
35
|
-
orig_val = instance_variable_get var
|
36
|
-
opts[key] = case
|
37
|
-
when orig_val.kind_of?(CollectionsFactory)
|
38
|
-
orig_val.copy
|
39
|
-
when orig_val.instance_of?(Array) || orig_val.instance_of?(Hash)
|
40
|
-
Marshal::load(Marshal.dump(orig_val))
|
41
|
-
when orig_val.kind_of?(DataObject)
|
42
|
-
orig_val.data_object_copy
|
43
|
-
else
|
44
|
-
orig_val
|
45
|
-
end
|
46
|
-
end
|
47
|
-
self.class.new(@browser, opts)
|
48
|
-
end
|
49
|
-
|
50
|
-
end
|
51
|
-
|
52
|
-
# Empty alias class
|
53
|
-
class DataObject < DataObjectFactory; end
|