litmus 0.1.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.
@@ -0,0 +1,5 @@
1
+ README.rdoc
2
+ lib/**/*.rb
3
+ bin/*
4
+ features/**/*.feature
5
+ LICENSE
data/LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2009 Matt Fawcett
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,56 @@
1
+ Litmus
2
+ ======
3
+
4
+ A simple wrapper around the Litmus *customer* API using httparty. This does not use the reseller API and should not be used to reset Litmus services. See the [API documentation](http://docs.litmus.com/w/page/18056603/Customer-API-documentation) for details
5
+
6
+ Currently Implmented
7
+ --------------------
8
+ * Litmus::EmailTest.list
9
+ * Litmus::EmailTest.show(id)
10
+ * Litmus::EmailTest.create
11
+ * Litmus::PageTest.list
12
+ * Litmus::PageTest.show(id)
13
+ * Litmus::PageTest.create(url)
14
+ * Litmus::TestVersion.list(test_id)
15
+ * Litmus::TestVersion.show(test_id, test_version_id)
16
+ * Litmus::TestVersion.poll(test_id, test_version_id)
17
+ * Litmus::TestVersion.create(test_id)
18
+ * Litmus::Result.list(test_id, test_version_id)
19
+ * Litmus::Result.show(test_id, test_version_id, result_id)
20
+
21
+
22
+ Example Usage
23
+ -------------
24
+
25
+ # Setup the authentication details
26
+ Litmus::Base.new("your_company_subdomain", "username", "password")
27
+
28
+ # Lets create an email test
29
+ email_test = Litmus::EmailTest.create
30
+ send_test_to = email_test["test_set_versions"].first["url_or_guid"] #=> "f1b17db@emailtests.com"
31
+ test_id = email_test["id"] #=> 1716534
32
+ version = email_test["test_set_versions"].first["version"] #=> 1
33
+
34
+ # If we query our new version we can see Litmus have not had the email yet
35
+ Litmus::TestVersion.show(test_id, version)["received"] #=> false
36
+
37
+ # Lets send them the email
38
+ Pony.mail(:to => send_test_to, :from => 'mail@matthewfawcett.co.uk', :subject => 'hi', :body => 'Hello there, this is a test')
39
+
40
+ # Now they have it
41
+ Litmus::TestVersion.show(test_id, version)["received"] #=> "true"
42
+
43
+ # Lets poll the results and look at the first client
44
+ Litmus::TestVersion.poll(test_id, version)["results"].first.inspect #=> {"id"=>33539350, "test_code"=>"hotmail", "state"=>"pending"}
45
+
46
+ # The hotmail test is still pending, lets wait for a while
47
+ sleep 10
48
+
49
+ # Lets poll the results again and see that its complete
50
+ Litmus::TestVersion.poll(test_id, version).first.inspect #=> {"id"=>33539350, "test_code"=>"hotmail", "state"=>"complete"}
51
+
52
+ # Now lets show the result for this test version
53
+ image_url = Litmus::Result.show(test_id, version, 33539350)["result_images"].first["full_image"] #=> "s3.amazonaws.com/resultcaptures/2f21fc9c-08f6-4429-b53d-2e224189526b.fullpageon.png"
54
+
55
+ system("open http://#{image_url}")
56
+ # Looks good!
@@ -0,0 +1,46 @@
1
+ require 'rubygems'
2
+ require 'rake'
3
+
4
+ begin
5
+ require 'jeweler'
6
+ Jeweler::Tasks.new do |gem|
7
+ gem.name = "litmus"
8
+ gem.summary = %Q{A wrapper to the Litmus customer API}
9
+ gem.description = %Q{A wrapper to the Litmus customer API}
10
+ gem.email = "mail@matthewfawcett.co.uk"
11
+ gem.homepage = "http://github.com/mattfawcett/litmus"
12
+ gem.authors = ["Matt Fawcett"]
13
+ gem.add_development_dependency "rspec", ">= 1.2.9"
14
+ gem.add_dependency 'httparty', ">= 0.6.1"
15
+ # gem is a Gem::Specification... see http://www.rubygems.org/read/chapter/20 for additional settings
16
+ end
17
+ Jeweler::GemcutterTasks.new
18
+ rescue LoadError
19
+ puts "Jeweler (or a dependency) not available. Install it with: gem install jeweler"
20
+ end
21
+
22
+ require 'spec/rake/spectask'
23
+ Spec::Rake::SpecTask.new(:spec) do |spec|
24
+ spec.libs << 'lib' << 'spec'
25
+ spec.spec_files = FileList['spec/**/*_spec.rb']
26
+ end
27
+
28
+ Spec::Rake::SpecTask.new(:rcov) do |spec|
29
+ spec.libs << 'lib' << 'spec'
30
+ spec.pattern = 'spec/**/*_spec.rb'
31
+ spec.rcov = true
32
+ end
33
+
34
+ task :spec => :check_dependencies
35
+
36
+ task :default => :spec
37
+
38
+ require 'rake/rdoctask'
39
+ Rake::RDocTask.new do |rdoc|
40
+ version = File.exist?('VERSION') ? File.read('VERSION') : ""
41
+
42
+ rdoc.rdoc_dir = 'rdoc'
43
+ rdoc.title = "litmus #{version}"
44
+ rdoc.rdoc_files.include('README*')
45
+ rdoc.rdoc_files.include('lib/**/*.rb')
46
+ end
data/VERSION ADDED
@@ -0,0 +1 @@
1
+ 0.1.0
@@ -0,0 +1,11 @@
1
+ require "httparty"
2
+ require "builder"
3
+ require "litmus/base"
4
+ require "litmus/test"
5
+ require "litmus/email_test"
6
+ require "litmus/page_test"
7
+ require "litmus/test_version"
8
+ require "litmus/result"
9
+
10
+ module Litmus
11
+ end
@@ -0,0 +1,10 @@
1
+ module Litmus
2
+ class Base
3
+ include HTTParty
4
+
5
+ def initialize(company, username, password)
6
+ self.class.base_uri "#{company}.litmus.com"
7
+ self.class.basic_auth(username, password)
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,17 @@
1
+ module Litmus
2
+ class EmailTest < Test
3
+ def self.list
4
+ super.reject{|test| test["service"] != 'email'}
5
+ end
6
+
7
+ def self.create
8
+ builder = Builder::XmlMarkup.new
9
+ builder.instruct! :xml, :version=>"1.0"
10
+ builder.test_set do |test_set|
11
+ test_set.use_defaults true
12
+ test_set.save_defaults false
13
+ end
14
+ post('/emails.xml', :body => builder.target!, :headers => {"Content-type" => "application/xml"})["test_set"]
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,17 @@
1
+ module Litmus
2
+ class PageTest < Test
3
+ def self.list
4
+ super.reject{|test| test["service"] != 'page'}
5
+ end
6
+
7
+ def self.create(url)
8
+ builder = Builder::XmlMarkup.new
9
+ builder.instruct! :xml, :version=>"1.0"
10
+ builder.test_set do |test_set|
11
+ test_set.use_defaults true
12
+ test_set.url url
13
+ end
14
+ post('/pages.xml', :body => builder.target!, :headers => {"Content-type" => "application/xml"})["test_set"]
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,11 @@
1
+ module Litmus
2
+ class Result < Base
3
+ def self.list(test_id, version_id)
4
+ get("/tests/#{test_id}/versions/#{version_id}/results.xml")["results"]
5
+ end
6
+
7
+ def self.show(test_id, version_id, id)
8
+ get("/tests/#{test_id}/versions/#{version_id}/results/#{id}.xml")["result"]
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,11 @@
1
+ module Litmus
2
+ class Test < Base
3
+ def self.list
4
+ get('/tests.xml')["test_sets"]
5
+ end
6
+
7
+ def self.show(id)
8
+ get("/tests/#{id}.xml")["test_set"]
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,19 @@
1
+ module Litmus
2
+ class TestVersion < Base
3
+ def self.show(test_id, id)
4
+ get("/tests/#{test_id}/versions/#{id}.xml")["test_set_version"]
5
+ end
6
+
7
+ def self.list(test_id)
8
+ get("/tests/#{test_id}/versions.xml")["test_set_versions"]
9
+ end
10
+
11
+ def self.create(test_id)
12
+ post("/tests/#{test_id}/versions.xml")["test_set_version"]
13
+ end
14
+
15
+ def self.poll(test_id, id)
16
+ get("/tests/#{test_id}/versions/#{id}/poll.xml")["test_set_version"]
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,81 @@
1
+ # Generated by jeweler
2
+ # DO NOT EDIT THIS FILE DIRECTLY
3
+ # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
4
+ # -*- encoding: utf-8 -*-
5
+
6
+ Gem::Specification.new do |s|
7
+ s.name = %q{litmus}
8
+ s.version = "0.1.0"
9
+
10
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
+ s.authors = ["Matt Fawcett"]
12
+ s.date = %q{2010-12-19}
13
+ s.description = %q{A wrapper to the Litmus customer API}
14
+ s.email = %q{mail@matthewfawcett.co.uk}
15
+ s.extra_rdoc_files = [
16
+ "LICENSE",
17
+ "README.md"
18
+ ]
19
+ s.files = [
20
+ ".document",
21
+ "LICENSE",
22
+ "README.md",
23
+ "Rakefile",
24
+ "VERSION",
25
+ "lib/litmus.rb",
26
+ "lib/litmus/base.rb",
27
+ "lib/litmus/email_test.rb",
28
+ "lib/litmus/page_test.rb",
29
+ "lib/litmus/result.rb",
30
+ "lib/litmus/test.rb",
31
+ "lib/litmus/test_version.rb",
32
+ "litmus.gemspec",
33
+ "spec/email_test_spec.rb",
34
+ "spec/fixtures/all_tests.xml",
35
+ "spec/fixtures/create_email_test.xml",
36
+ "spec/fixtures/create_page_test.xml",
37
+ "spec/fixtures/create_test_version.xml",
38
+ "spec/fixtures/list_results.xml",
39
+ "spec/fixtures/list_test_versions.xml",
40
+ "spec/fixtures/poll_test_version.xml",
41
+ "spec/fixtures/show_result.xml",
42
+ "spec/fixtures/show_test.xml",
43
+ "spec/fixtures/show_test_version.xml",
44
+ "spec/litmus_spec.rb",
45
+ "spec/page_test_spec.rb",
46
+ "spec/result_spec.rb",
47
+ "spec/spec_helper.rb",
48
+ "spec/test_spec.rb",
49
+ "spec/test_version_spec.rb"
50
+ ]
51
+ s.homepage = %q{http://github.com/mattfawcett/litmus}
52
+ s.require_paths = ["lib"]
53
+ s.rubygems_version = %q{1.3.6}
54
+ s.summary = %q{A wrapper to the Litmus customer API}
55
+ s.test_files = [
56
+ "spec/email_test_spec.rb",
57
+ "spec/litmus_spec.rb",
58
+ "spec/page_test_spec.rb",
59
+ "spec/result_spec.rb",
60
+ "spec/spec_helper.rb",
61
+ "spec/test_spec.rb",
62
+ "spec/test_version_spec.rb"
63
+ ]
64
+
65
+ if s.respond_to? :specification_version then
66
+ current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
67
+ s.specification_version = 3
68
+
69
+ if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
70
+ s.add_development_dependency(%q<rspec>, [">= 1.2.9"])
71
+ s.add_runtime_dependency(%q<httparty>, [">= 0.6.1"])
72
+ else
73
+ s.add_dependency(%q<rspec>, [">= 1.2.9"])
74
+ s.add_dependency(%q<httparty>, [">= 0.6.1"])
75
+ end
76
+ else
77
+ s.add_dependency(%q<rspec>, [">= 1.2.9"])
78
+ s.add_dependency(%q<httparty>, [">= 0.6.1"])
79
+ end
80
+ end
81
+
@@ -0,0 +1,21 @@
1
+ require 'spec_helper'
2
+
3
+ describe Litmus::EmailTest do
4
+ describe ".list" do
5
+ it "should give me a list of email test objects" do
6
+ list = Litmus::EmailTest.list
7
+ list.length.should eql(1)
8
+ list.first["name"].should eql("A really good email")
9
+ list.first["id"].should eql(1715760)
10
+ end
11
+ end
12
+
13
+ describe ".create" do
14
+ it "should give me back a new email object" do
15
+ email_test = Litmus::EmailTest.create
16
+ email_test["test_set_versions"].first["version"].should == 1
17
+ email_test["test_set_versions"].first["url_or_guid"].should =~ /@emailtests\.com/
18
+ email_test["id"].should be_a(Integer)
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,24 @@
1
+ <test_sets type="array">
2
+ <test_set>
3
+ <created_at type="datetime">2010-12-18T22:43:23Z</created_at>
4
+ <delta type="boolean">true</delta>
5
+ <id type="integer">1715760</id>
6
+ <updated_at type="datetime">2010-12-18T22:43:25Z</updated_at>
7
+ <name>A really good email</name>
8
+ <service>email</service>
9
+ <state>complete</state>
10
+ <public_sharing>false</public_sharing>
11
+ <url_or_guid>236e723</url_or_guid>
12
+ </test_set>
13
+ <test_set>
14
+ <created_at type="datetime">2010-12-18T22:40:47Z</created_at>
15
+ <delta type="boolean">true</delta>
16
+ <id type="integer">1715752</id>
17
+ <updated_at type="datetime">2010-12-18T22:40:48Z</updated_at>
18
+ <name>Home | Real Ale Hunter</name>
19
+ <service>page</service>
20
+ <state>complete</state>
21
+ <public_sharing>false</public_sharing>
22
+ <url_or_guid>http://www.realalehunter.co.uk</url_or_guid>
23
+ </test_set>
24
+ </test_sets>
@@ -0,0 +1,651 @@
1
+ <test_set>
2
+ <created_at type="datetime">2010-12-19T16:36:59Z</created_at>
3
+ <delta type="boolean">true</delta>
4
+ <id type="integer">1716450</id>
5
+ <updated_at type="datetime">2010-12-19T16:37:01Z</updated_at>
6
+ <name>No subject</name>
7
+ <service>email</service>
8
+ <state>waiting</state>
9
+ <public_sharing>false</public_sharing>
10
+ <test_set_versions type="array">
11
+ <test_set_version>
12
+ <version type="integer">1</version>
13
+ <url_or_guid>62e1101@emailtests.com</url_or_guid>
14
+ <received>false</received>
15
+ <source_url>s3.amazonaws.com/sitevista/missing_source</source_url>
16
+ <inline_css />
17
+ <results type="array">
18
+ <result>
19
+ <check_state nil="true" />
20
+ <error_at type="datetime" nil="true" />
21
+ <finished_at type="datetime" nil="true" />
22
+ <id type="integer">33537708</id>
23
+ <started_at type="datetime" nil="true" />
24
+ <test_code>hotmail</test_code>
25
+ <state>pending</state>
26
+ <result_type>email</result_type>
27
+ <rendered_html_url />
28
+ <testing_application>
29
+ <average_time_to_process type="integer">212</average_time_to_process>
30
+ <business>false</business>
31
+ <result_type>email</result_type>
32
+ <supports_content_blocking>false</supports_content_blocking>
33
+ <desktop_client>false</desktop_client>
34
+ <status>0</status>
35
+ <platform_name>Web-based</platform_name>
36
+ <platform_long_name>Web-based</platform_long_name>
37
+ <application_code>hotmail</application_code>
38
+ <application_long_name>Hotmail (Explorer)</application_long_name>
39
+ </testing_application>
40
+ <result_images type="array">
41
+ <result_image>
42
+ <image_type>window_on</image_type>
43
+ </result_image>
44
+ <result_image>
45
+ <image_type>full_on</image_type>
46
+ </result_image>
47
+ <result_image>
48
+ <image_type>window_off</image_type>
49
+ </result_image>
50
+ <result_image>
51
+ <image_type>full_off</image_type>
52
+ </result_image>
53
+ </result_images>
54
+ </result>
55
+ <result>
56
+ <check_state nil="true" />
57
+ <error_at type="datetime" nil="true" />
58
+ <finished_at type="datetime" nil="true" />
59
+ <id type="integer">33537710</id>
60
+ <started_at type="datetime" nil="true" />
61
+ <test_code>yahoo</test_code>
62
+ <state>pending</state>
63
+ <result_type>email</result_type>
64
+ <rendered_html_url />
65
+ <testing_application>
66
+ <average_time_to_process type="integer">115</average_time_to_process>
67
+ <business>false</business>
68
+ <result_type>email</result_type>
69
+ <supports_content_blocking>true</supports_content_blocking>
70
+ <desktop_client>false</desktop_client>
71
+ <status>0</status>
72
+ <platform_name>Web-based</platform_name>
73
+ <platform_long_name>Web-based</platform_long_name>
74
+ <application_code>yahoo</application_code>
75
+ <application_long_name>Yahoo! Mail (Explorer)</application_long_name>
76
+ </testing_application>
77
+ <result_images type="array">
78
+ <result_image>
79
+ <image_type>window_on</image_type>
80
+ </result_image>
81
+ <result_image>
82
+ <image_type>full_on</image_type>
83
+ </result_image>
84
+ <result_image>
85
+ <image_type>window_off</image_type>
86
+ </result_image>
87
+ <result_image>
88
+ <image_type>full_off</image_type>
89
+ </result_image>
90
+ </result_images>
91
+ </result>
92
+ <result>
93
+ <check_state nil="true" />
94
+ <error_at type="datetime" nil="true" />
95
+ <finished_at type="datetime" nil="true" />
96
+ <id type="integer">33537712</id>
97
+ <started_at type="datetime" nil="true" />
98
+ <test_code>ol2000</test_code>
99
+ <state>pending</state>
100
+ <result_type>email</result_type>
101
+ <rendered_html_url />
102
+ <testing_application>
103
+ <average_time_to_process type="integer">64</average_time_to_process>
104
+ <business>true</business>
105
+ <result_type>email</result_type>
106
+ <supports_content_blocking>false</supports_content_blocking>
107
+ <desktop_client>true</desktop_client>
108
+ <status>0</status>
109
+ <platform_name>Windows</platform_name>
110
+ <platform_long_name>Microsoft Windows</platform_long_name>
111
+ <application_code>ol2000</application_code>
112
+ <application_long_name>Outlook 2000</application_long_name>
113
+ </testing_application>
114
+ <result_images type="array">
115
+ <result_image>
116
+ <image_type>window_on</image_type>
117
+ </result_image>
118
+ <result_image>
119
+ <image_type>full_on</image_type>
120
+ </result_image>
121
+ <result_image>
122
+ <image_type>window_off</image_type>
123
+ </result_image>
124
+ <result_image>
125
+ <image_type>full_off</image_type>
126
+ </result_image>
127
+ </result_images>
128
+ </result>
129
+ <result>
130
+ <check_state nil="true" />
131
+ <error_at type="datetime" nil="true" />
132
+ <finished_at type="datetime" nil="true" />
133
+ <id type="integer">33537714</id>
134
+ <started_at type="datetime" nil="true" />
135
+ <test_code>ol2002</test_code>
136
+ <state>pending</state>
137
+ <result_type>email</result_type>
138
+ <rendered_html_url />
139
+ <testing_application>
140
+ <average_time_to_process type="integer">62</average_time_to_process>
141
+ <business>true</business>
142
+ <result_type>email</result_type>
143
+ <supports_content_blocking>false</supports_content_blocking>
144
+ <desktop_client>true</desktop_client>
145
+ <status>0</status>
146
+ <platform_name>Windows</platform_name>
147
+ <platform_long_name>Microsoft Windows</platform_long_name>
148
+ <application_code>ol2002</application_code>
149
+ <application_long_name>Outlook 2002/XP</application_long_name>
150
+ </testing_application>
151
+ <result_images type="array">
152
+ <result_image>
153
+ <image_type>window_on</image_type>
154
+ </result_image>
155
+ <result_image>
156
+ <image_type>full_on</image_type>
157
+ </result_image>
158
+ <result_image>
159
+ <image_type>window_off</image_type>
160
+ </result_image>
161
+ <result_image>
162
+ <image_type>full_off</image_type>
163
+ </result_image>
164
+ </result_images>
165
+ </result>
166
+ <result>
167
+ <check_state nil="true" />
168
+ <error_at type="datetime" nil="true" />
169
+ <finished_at type="datetime" nil="true" />
170
+ <id type="integer">33537716</id>
171
+ <started_at type="datetime" nil="true" />
172
+ <test_code>ol2003</test_code>
173
+ <state>pending</state>
174
+ <result_type>email</result_type>
175
+ <rendered_html_url />
176
+ <testing_application>
177
+ <average_time_to_process type="integer">165</average_time_to_process>
178
+ <business>true</business>
179
+ <result_type>email</result_type>
180
+ <supports_content_blocking>true</supports_content_blocking>
181
+ <desktop_client>true</desktop_client>
182
+ <status>0</status>
183
+ <platform_name>Windows</platform_name>
184
+ <platform_long_name>Microsoft Windows</platform_long_name>
185
+ <application_code>ol2003</application_code>
186
+ <application_long_name>Outlook 2003</application_long_name>
187
+ </testing_application>
188
+ <result_images type="array">
189
+ <result_image>
190
+ <image_type>window_on</image_type>
191
+ </result_image>
192
+ <result_image>
193
+ <image_type>full_on</image_type>
194
+ </result_image>
195
+ <result_image>
196
+ <image_type>window_off</image_type>
197
+ </result_image>
198
+ <result_image>
199
+ <image_type>full_off</image_type>
200
+ </result_image>
201
+ </result_images>
202
+ </result>
203
+ <result>
204
+ <check_state nil="true" />
205
+ <error_at type="datetime" nil="true" />
206
+ <finished_at type="datetime" nil="true" />
207
+ <id type="integer">33537718</id>
208
+ <started_at type="datetime" nil="true" />
209
+ <test_code>ol2007</test_code>
210
+ <state>pending</state>
211
+ <result_type>email</result_type>
212
+ <rendered_html_url />
213
+ <testing_application>
214
+ <average_time_to_process type="integer">79</average_time_to_process>
215
+ <business>true</business>
216
+ <result_type>email</result_type>
217
+ <supports_content_blocking>true</supports_content_blocking>
218
+ <desktop_client>true</desktop_client>
219
+ <status>0</status>
220
+ <platform_name>Windows</platform_name>
221
+ <platform_long_name>Microsoft Windows</platform_long_name>
222
+ <application_code>ol2007</application_code>
223
+ <application_long_name>Outlook 2007</application_long_name>
224
+ </testing_application>
225
+ <result_images type="array">
226
+ <result_image>
227
+ <image_type>window_on</image_type>
228
+ </result_image>
229
+ <result_image>
230
+ <image_type>full_on</image_type>
231
+ </result_image>
232
+ <result_image>
233
+ <image_type>window_off</image_type>
234
+ </result_image>
235
+ <result_image>
236
+ <image_type>full_off</image_type>
237
+ </result_image>
238
+ </result_images>
239
+ </result>
240
+ <result>
241
+ <check_state nil="true" />
242
+ <error_at type="datetime" nil="true" />
243
+ <finished_at type="datetime" nil="true" />
244
+ <id type="integer">33537720</id>
245
+ <started_at type="datetime" nil="true" />
246
+ <test_code>notes8</test_code>
247
+ <state>pending</state>
248
+ <result_type>email</result_type>
249
+ <rendered_html_url />
250
+ <testing_application>
251
+ <average_time_to_process type="integer">141</average_time_to_process>
252
+ <business>true</business>
253
+ <result_type>email</result_type>
254
+ <supports_content_blocking>false</supports_content_blocking>
255
+ <desktop_client>true</desktop_client>
256
+ <status>0</status>
257
+ <platform_name>Windows</platform_name>
258
+ <platform_long_name>Microsoft Windows</platform_long_name>
259
+ <application_code>notes8</application_code>
260
+ <application_long_name>Lotus Notes 8</application_long_name>
261
+ </testing_application>
262
+ <result_images type="array">
263
+ <result_image>
264
+ <image_type>window_on</image_type>
265
+ </result_image>
266
+ <result_image>
267
+ <image_type>full_on</image_type>
268
+ </result_image>
269
+ <result_image>
270
+ <image_type>window_off</image_type>
271
+ </result_image>
272
+ <result_image>
273
+ <image_type>full_off</image_type>
274
+ </result_image>
275
+ </result_images>
276
+ </result>
277
+ <result>
278
+ <check_state nil="true" />
279
+ <error_at type="datetime" nil="true" />
280
+ <finished_at type="datetime" nil="true" />
281
+ <id type="integer">33537722</id>
282
+ <started_at type="datetime" nil="true" />
283
+ <test_code>appmail3</test_code>
284
+ <state>pending</state>
285
+ <result_type>email</result_type>
286
+ <rendered_html_url />
287
+ <testing_application>
288
+ <average_time_to_process type="integer">172</average_time_to_process>
289
+ <business>false</business>
290
+ <result_type>email</result_type>
291
+ <supports_content_blocking>false</supports_content_blocking>
292
+ <desktop_client>true</desktop_client>
293
+ <status>0</status>
294
+ <platform_name>Mac OS</platform_name>
295
+ <platform_long_name>Mac OS X</platform_long_name>
296
+ <application_code>appmail3</application_code>
297
+ <application_long_name>Apple Mail 3</application_long_name>
298
+ </testing_application>
299
+ <result_images type="array">
300
+ <result_image>
301
+ <image_type>window_on</image_type>
302
+ </result_image>
303
+ <result_image>
304
+ <image_type>full_on</image_type>
305
+ </result_image>
306
+ <result_image>
307
+ <image_type>window_off</image_type>
308
+ </result_image>
309
+ <result_image>
310
+ <image_type>full_off</image_type>
311
+ </result_image>
312
+ </result_images>
313
+ </result>
314
+ <result>
315
+ <check_state nil="true" />
316
+ <error_at type="datetime" nil="true" />
317
+ <finished_at type="datetime" nil="true" />
318
+ <id type="integer">33537724</id>
319
+ <started_at type="datetime" nil="true" />
320
+ <test_code>gmailnew</test_code>
321
+ <state>pending</state>
322
+ <result_type>email</result_type>
323
+ <rendered_html_url />
324
+ <testing_application>
325
+ <average_time_to_process type="integer">81</average_time_to_process>
326
+ <business>false</business>
327
+ <result_type>email</result_type>
328
+ <supports_content_blocking>true</supports_content_blocking>
329
+ <desktop_client>false</desktop_client>
330
+ <status>0</status>
331
+ <platform_name>Web-based</platform_name>
332
+ <platform_long_name>Web-based</platform_long_name>
333
+ <application_code>gmailnew</application_code>
334
+ <application_long_name>Gmail (Explorer)</application_long_name>
335
+ </testing_application>
336
+ <result_images type="array">
337
+ <result_image>
338
+ <image_type>window_on</image_type>
339
+ </result_image>
340
+ <result_image>
341
+ <image_type>full_on</image_type>
342
+ </result_image>
343
+ <result_image>
344
+ <image_type>window_off</image_type>
345
+ </result_image>
346
+ <result_image>
347
+ <image_type>full_off</image_type>
348
+ </result_image>
349
+ </result_images>
350
+ </result>
351
+ <result>
352
+ <check_state nil="true" />
353
+ <error_at type="datetime" nil="true" />
354
+ <finished_at type="datetime" nil="true" />
355
+ <id type="integer">33537726</id>
356
+ <started_at type="datetime" nil="true" />
357
+ <test_code>iphone3</test_code>
358
+ <state>pending</state>
359
+ <result_type>email</result_type>
360
+ <rendered_html_url />
361
+ <testing_application>
362
+ <average_time_to_process type="integer">112</average_time_to_process>
363
+ <business>false</business>
364
+ <result_type>email</result_type>
365
+ <supports_content_blocking>false</supports_content_blocking>
366
+ <desktop_client>false</desktop_client>
367
+ <status>0</status>
368
+ <platform_name>Mobile devices</platform_name>
369
+ <platform_long_name>Cell phones and other mobile devices</platform_long_name>
370
+ <application_code>iphone3</application_code>
371
+ <application_long_name>iPhone</application_long_name>
372
+ </testing_application>
373
+ <result_images type="array">
374
+ <result_image>
375
+ <image_type>window_on</image_type>
376
+ </result_image>
377
+ <result_image>
378
+ <image_type>full_on</image_type>
379
+ </result_image>
380
+ <result_image>
381
+ <image_type>window_off</image_type>
382
+ </result_image>
383
+ <result_image>
384
+ <image_type>full_off</image_type>
385
+ </result_image>
386
+ </result_images>
387
+ </result>
388
+ <result>
389
+ <check_state nil="true" />
390
+ <error_at type="datetime" nil="true" />
391
+ <finished_at type="datetime" nil="true" />
392
+ <id type="integer">33537728</id>
393
+ <started_at type="datetime" nil="true" />
394
+ <test_code>appmail4</test_code>
395
+ <state>pending</state>
396
+ <result_type>email</result_type>
397
+ <rendered_html_url />
398
+ <testing_application>
399
+ <average_time_to_process type="integer">310</average_time_to_process>
400
+ <business>false</business>
401
+ <result_type>email</result_type>
402
+ <supports_content_blocking>false</supports_content_blocking>
403
+ <desktop_client>true</desktop_client>
404
+ <status>0</status>
405
+ <platform_name>Mac OS</platform_name>
406
+ <platform_long_name>Mac OS X</platform_long_name>
407
+ <application_code>appmail4</application_code>
408
+ <application_long_name>Apple Mail 4</application_long_name>
409
+ </testing_application>
410
+ <result_images type="array">
411
+ <result_image>
412
+ <image_type>window_on</image_type>
413
+ </result_image>
414
+ <result_image>
415
+ <image_type>full_on</image_type>
416
+ </result_image>
417
+ <result_image>
418
+ <image_type>window_off</image_type>
419
+ </result_image>
420
+ <result_image>
421
+ <image_type>full_off</image_type>
422
+ </result_image>
423
+ </result_images>
424
+ </result>
425
+ <result>
426
+ <check_state nil="true" />
427
+ <error_at type="datetime" nil="true" />
428
+ <finished_at type="datetime" nil="true" />
429
+ <id type="integer">33537730</id>
430
+ <started_at type="datetime" nil="true" />
431
+ <test_code>ol2010</test_code>
432
+ <state>pending</state>
433
+ <result_type>email</result_type>
434
+ <rendered_html_url />
435
+ <testing_application>
436
+ <average_time_to_process type="integer">171</average_time_to_process>
437
+ <business>true</business>
438
+ <result_type>email</result_type>
439
+ <supports_content_blocking>true</supports_content_blocking>
440
+ <desktop_client>true</desktop_client>
441
+ <status>0</status>
442
+ <platform_name>Windows</platform_name>
443
+ <platform_long_name>Microsoft Windows</platform_long_name>
444
+ <application_code>ol2010</application_code>
445
+ <application_long_name>Outlook 2010</application_long_name>
446
+ </testing_application>
447
+ <result_images type="array">
448
+ <result_image>
449
+ <image_type>window_on</image_type>
450
+ </result_image>
451
+ <result_image>
452
+ <image_type>full_on</image_type>
453
+ </result_image>
454
+ <result_image>
455
+ <image_type>window_off</image_type>
456
+ </result_image>
457
+ <result_image>
458
+ <image_type>full_off</image_type>
459
+ </result_image>
460
+ </result_images>
461
+ </result>
462
+ <result>
463
+ <check_state nil="true" />
464
+ <error_at type="datetime" nil="true" />
465
+ <finished_at type="datetime" nil="true" />
466
+ <id type="integer">33537732</id>
467
+ <started_at type="datetime" nil="true" />
468
+ <test_code>ffgmailnew</test_code>
469
+ <state>pending</state>
470
+ <result_type>email</result_type>
471
+ <rendered_html_url />
472
+ <testing_application>
473
+ <average_time_to_process type="integer">90</average_time_to_process>
474
+ <business>false</business>
475
+ <result_type>email</result_type>
476
+ <supports_content_blocking>true</supports_content_blocking>
477
+ <desktop_client>false</desktop_client>
478
+ <status>0</status>
479
+ <platform_name>Web-based</platform_name>
480
+ <platform_long_name>Web-based</platform_long_name>
481
+ <application_code>ffgmailnew</application_code>
482
+ <application_long_name>Gmail (Firefox)</application_long_name>
483
+ </testing_application>
484
+ <result_images type="array">
485
+ <result_image>
486
+ <image_type>window_on</image_type>
487
+ </result_image>
488
+ <result_image>
489
+ <image_type>full_on</image_type>
490
+ </result_image>
491
+ <result_image>
492
+ <image_type>window_off</image_type>
493
+ </result_image>
494
+ <result_image>
495
+ <image_type>full_off</image_type>
496
+ </result_image>
497
+ </result_images>
498
+ </result>
499
+ <result>
500
+ <check_state nil="true" />
501
+ <error_at type="datetime" nil="true" />
502
+ <finished_at type="datetime" nil="true" />
503
+ <id type="integer">33537734</id>
504
+ <started_at type="datetime" nil="true" />
505
+ <test_code>ffhotmail</test_code>
506
+ <state>pending</state>
507
+ <result_type>email</result_type>
508
+ <rendered_html_url />
509
+ <testing_application>
510
+ <average_time_to_process type="integer">502</average_time_to_process>
511
+ <business>false</business>
512
+ <result_type>email</result_type>
513
+ <supports_content_blocking>false</supports_content_blocking>
514
+ <desktop_client>false</desktop_client>
515
+ <status>0</status>
516
+ <platform_name>Web-based</platform_name>
517
+ <platform_long_name>Web-based</platform_long_name>
518
+ <application_code>ffhotmail</application_code>
519
+ <application_long_name>Hotmail (Firefox)</application_long_name>
520
+ </testing_application>
521
+ <result_images type="array">
522
+ <result_image>
523
+ <image_type>window_on</image_type>
524
+ </result_image>
525
+ <result_image>
526
+ <image_type>full_on</image_type>
527
+ </result_image>
528
+ <result_image>
529
+ <image_type>window_off</image_type>
530
+ </result_image>
531
+ <result_image>
532
+ <image_type>full_off</image_type>
533
+ </result_image>
534
+ </result_images>
535
+ </result>
536
+ <result>
537
+ <check_state nil="true" />
538
+ <error_at type="datetime" nil="true" />
539
+ <finished_at type="datetime" nil="true" />
540
+ <id type="integer">33537736</id>
541
+ <started_at type="datetime" nil="true" />
542
+ <test_code>ffaolonline</test_code>
543
+ <state>pending</state>
544
+ <result_type>email</result_type>
545
+ <rendered_html_url />
546
+ <testing_application>
547
+ <average_time_to_process type="integer">221</average_time_to_process>
548
+ <business>false</business>
549
+ <result_type>email</result_type>
550
+ <supports_content_blocking>true</supports_content_blocking>
551
+ <desktop_client>false</desktop_client>
552
+ <status>0</status>
553
+ <platform_name>Web-based</platform_name>
554
+ <platform_long_name>Web-based</platform_long_name>
555
+ <application_code>ffaolonline</application_code>
556
+ <application_long_name>AOL Mail (Firefox)</application_long_name>
557
+ </testing_application>
558
+ <result_images type="array">
559
+ <result_image>
560
+ <image_type>window_on</image_type>
561
+ </result_image>
562
+ <result_image>
563
+ <image_type>full_on</image_type>
564
+ </result_image>
565
+ <result_image>
566
+ <image_type>window_off</image_type>
567
+ </result_image>
568
+ <result_image>
569
+ <image_type>full_off</image_type>
570
+ </result_image>
571
+ </result_images>
572
+ </result>
573
+ <result>
574
+ <check_state nil="true" />
575
+ <error_at type="datetime" nil="true" />
576
+ <finished_at type="datetime" nil="true" />
577
+ <id type="integer">33537738</id>
578
+ <started_at type="datetime" nil="true" />
579
+ <test_code>ffyahoo</test_code>
580
+ <state>pending</state>
581
+ <result_type>email</result_type>
582
+ <rendered_html_url />
583
+ <testing_application>
584
+ <average_time_to_process type="integer">114</average_time_to_process>
585
+ <business>false</business>
586
+ <result_type>email</result_type>
587
+ <supports_content_blocking>true</supports_content_blocking>
588
+ <desktop_client>false</desktop_client>
589
+ <status>0</status>
590
+ <platform_name>Web-based</platform_name>
591
+ <platform_long_name>Web-based</platform_long_name>
592
+ <application_code>ffyahoo</application_code>
593
+ <application_long_name>Yahoo! Mail (Firefox)</application_long_name>
594
+ </testing_application>
595
+ <result_images type="array">
596
+ <result_image>
597
+ <image_type>window_on</image_type>
598
+ </result_image>
599
+ <result_image>
600
+ <image_type>full_on</image_type>
601
+ </result_image>
602
+ <result_image>
603
+ <image_type>window_off</image_type>
604
+ </result_image>
605
+ <result_image>
606
+ <image_type>full_off</image_type>
607
+ </result_image>
608
+ </result_images>
609
+ </result>
610
+ <result>
611
+ <check_state nil="true" />
612
+ <error_at type="datetime" nil="true" />
613
+ <finished_at type="datetime" nil="true" />
614
+ <id type="integer">33537740</id>
615
+ <started_at type="datetime" nil="true" />
616
+ <test_code>ipad3</test_code>
617
+ <state>pending</state>
618
+ <result_type>email</result_type>
619
+ <rendered_html_url />
620
+ <testing_application>
621
+ <average_time_to_process type="integer">137</average_time_to_process>
622
+ <business>false</business>
623
+ <result_type>email</result_type>
624
+ <supports_content_blocking>false</supports_content_blocking>
625
+ <desktop_client>false</desktop_client>
626
+ <status>0</status>
627
+ <platform_name>Mobile devices</platform_name>
628
+ <platform_long_name>Cell phones and other mobile devices</platform_long_name>
629
+ <application_code>ipad3</application_code>
630
+ <application_long_name>iPad</application_long_name>
631
+ </testing_application>
632
+ <result_images type="array">
633
+ <result_image>
634
+ <image_type>window_on</image_type>
635
+ </result_image>
636
+ <result_image>
637
+ <image_type>full_on</image_type>
638
+ </result_image>
639
+ <result_image>
640
+ <image_type>window_off</image_type>
641
+ </result_image>
642
+ <result_image>
643
+ <image_type>full_off</image_type>
644
+ </result_image>
645
+ </result_images>
646
+ </result>
647
+ </results>
648
+ </test_set_version>
649
+ </test_set_versions>
650
+ <url_or_guid>62e1101</url_or_guid>
651
+ </test_set>