occi 2.5.19 → 3.0.0.beta.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (110) hide show
  1. data/.gitignore +4 -0
  2. data/.travis.yml +3 -1
  3. data/AUTHORS +4 -3
  4. data/Gemfile +9 -0
  5. data/Gemfile.lock +64 -21
  6. data/README.md +19 -14
  7. data/Rakefile +12 -8
  8. data/Test Results - discovery_interface.html +862 -0
  9. data/bin/occi +333 -83
  10. data/examples/dsl_example.rb +6 -6
  11. data/examples/x509auth_example.rb +6 -6
  12. data/features/common/step_definitions/common_steps.rb +32 -0
  13. data/features/occi/core/create/create.feature +17 -0
  14. data/features/occi/core/create/step_definitions/create_steps.rb +0 -0
  15. data/features/occi/core/delete/delete.feature +14 -0
  16. data/features/occi/core/delete/step_definitions/delete_steps.rb +0 -0
  17. data/features/occi/core/discovery_interface/discovery_interface.feature +35 -0
  18. data/features/occi/core/discovery_interface/step_definitions/discovery_interface_steps.rb +19 -0
  19. data/features/occi/core/miscellaneous/miscellaneous.feature +14 -0
  20. data/features/occi/core/miscellaneous/step_definitions/miscellaneous_steps.rb +0 -0
  21. data/features/occi/core/read/read.feature +14 -0
  22. data/features/occi/core/read/step_definitions/read_steps.rb +0 -0
  23. data/features/occi/core/update/step_definitions/update_steps.rb +0 -0
  24. data/features/occi/core/update/update.feature +14 -0
  25. data/features/occi/infrastructure/create/create.feature +14 -0
  26. data/features/occi/infrastructure/create/step_definitions/create_steps.rb +0 -0
  27. data/features/support/env.rb +4 -0
  28. data/lib/occi.rb +29 -3
  29. data/lib/occi/api/client/client_amqp.rb +756 -0
  30. data/lib/occi/api/client/client_http.rb +922 -0
  31. data/lib/occi/api/client/http/httparty_fix.rb +53 -0
  32. data/lib/occi/api/client/http/net_http_fix.rb +46 -0
  33. data/lib/occi/api/dsl.rb +77 -73
  34. data/lib/occi/bin/helpers.rb +91 -0
  35. data/lib/occi/bin/occi_opts.rb +251 -0
  36. data/lib/occi/bin/resource_output_factory.rb +90 -0
  37. data/lib/occi/bin/templates/compute.erb +15 -0
  38. data/lib/occi/bin/templates/network.erb +11 -0
  39. data/lib/occi/bin/templates/os_tpl.erb +9 -0
  40. data/lib/occi/bin/templates/resource_tpl.erb +9 -0
  41. data/lib/occi/bin/templates/storage.erb +10 -0
  42. data/lib/occi/collection.rb +122 -25
  43. data/lib/occi/core.rb +18 -9
  44. data/lib/occi/core/action.rb +20 -4
  45. data/lib/occi/core/action_instance.rb +24 -0
  46. data/lib/occi/core/actions.rb +22 -0
  47. data/lib/occi/core/attribute_properties.rb +33 -84
  48. data/lib/occi/core/attributes.rb +32 -14
  49. data/lib/occi/core/categories.rb +46 -0
  50. data/lib/occi/core/category.rb +94 -20
  51. data/lib/occi/core/entities.rb +50 -0
  52. data/lib/occi/core/entity.rb +130 -89
  53. data/lib/occi/core/kind.rb +28 -35
  54. data/lib/occi/core/kinds.rb +22 -0
  55. data/lib/occi/core/link.rb +43 -40
  56. data/lib/occi/core/links.rb +34 -0
  57. data/lib/occi/core/mixin.rb +28 -23
  58. data/lib/occi/core/mixins.rb +22 -0
  59. data/lib/occi/core/related.rb +20 -0
  60. data/lib/occi/core/resource.rb +40 -40
  61. data/lib/occi/core/resources.rb +14 -0
  62. data/lib/occi/infrastructure.rb +27 -0
  63. data/lib/occi/infrastructure/compute.rb +159 -0
  64. data/lib/occi/infrastructure/network.rb +131 -0
  65. data/lib/occi/infrastructure/network/ipnetwork.rb +34 -0
  66. data/lib/occi/infrastructure/networkinterface.rb +124 -0
  67. data/lib/occi/infrastructure/networkinterface/ipnetworkinterface.rb +34 -0
  68. data/lib/occi/infrastructure/os_tpl.rb +19 -0
  69. data/lib/occi/infrastructure/resource_tpl.rb +19 -0
  70. data/lib/occi/infrastructure/storage.rb +96 -0
  71. data/lib/occi/infrastructure/storagelink.rb +73 -0
  72. data/lib/occi/log.rb +6 -2
  73. data/lib/occi/model.rb +38 -70
  74. data/lib/occi/parser.rb +108 -88
  75. data/lib/occi/version.rb +2 -2
  76. data/lib/occiantlr/OCCIANTLR.g +6 -5
  77. data/lib/occiantlr/OCCIANTLRLexer.rb +52 -52
  78. data/lib/occiantlr/OCCIANTLRParser.rb +678 -569
  79. data/lib/occiantlr/README.md +1 -1
  80. data/occi.gemspec +2 -1
  81. data/spec/cassettes/client_http_text_plain.yml +1066 -0
  82. data/spec/occi/api/client/client_amqp_spec.rb +148 -0
  83. data/spec/occi/api/client/client_http_0.5_spec.rb +292 -0
  84. data/spec/occi/api/client/client_http_spec.rb +259 -0
  85. data/spec/occi/api/dsl_spec.rb +0 -0
  86. data/spec/occi/collection_spec.rb +23 -10
  87. data/spec/occi/core/categories_spec.rb +30 -0
  88. data/spec/occi/core/category_spec.rb +41 -0
  89. data/spec/occi/core/entity_spec.rb +52 -0
  90. data/spec/occi/core/resource_spec.rb +21 -0
  91. data/spec/occi/infrastructure/compute_spec.rb +32 -0
  92. data/spec/occi/log_spec.rb +10 -10
  93. data/spec/occi/model_spec.rb +24 -24
  94. data/spec/occi/parser_spec.rb +89 -39
  95. data/spec/occi/test.json +22 -58
  96. data/spec/occiantlr/parser_spec.rb +5 -7
  97. data/spec/spec_helper.rb +13 -3
  98. metadata +116 -19
  99. data/etc/model/infrastructure/compute.json +0 -108
  100. data/etc/model/infrastructure/ipnetwork.json +0 -40
  101. data/etc/model/infrastructure/ipnetworkinterface.json +0 -40
  102. data/etc/model/infrastructure/network.json +0 -55
  103. data/etc/model/infrastructure/networkinterface.json +0 -38
  104. data/etc/model/infrastructure/os_template.json +0 -9
  105. data/etc/model/infrastructure/resource_template.json +0 -9
  106. data/etc/model/infrastructure/storage.json +0 -72
  107. data/etc/model/infrastructure/storagelink.json +0 -38
  108. data/lib/occi/api/client.rb +0 -596
  109. data/lib/occi/client/occiopts.rb +0 -146
  110. data/spec/occi/client_spec.rb +0 -12
data/.gitignore CHANGED
@@ -1,8 +1,12 @@
1
+ *.gem
1
2
  *.swp
2
3
  .project
3
4
  .idea
4
5
  .yardoc
5
6
  .bundle
7
+ .rvmrc
8
+ lib/occiantlr/output/
9
+ pkg
6
10
  tmp
7
11
  log
8
12
  coverage
data/.travis.yml CHANGED
@@ -3,7 +3,9 @@ rvm:
3
3
  - 1.8.7
4
4
  - 1.9.2
5
5
  - 1.9.3
6
+ - jruby-18mode
7
+ - jruby-19mode
6
8
 
7
9
  branches:
8
10
  only:
9
- - master
11
+ - master
data/AUTHORS CHANGED
@@ -1,8 +1,9 @@
1
- rOCCI was designed and is mainly developed by Florian Feldhaus (GWDG) and Piotr Kasprzak (GWDG) in Germany.
1
+ rOcci was designed and is mainly developed by Florian Feldhaus (GWDG) and Piotr Kasprzak (GWDG) in Germany.
2
2
 
3
- Special thanks to the following extraordinary individuals, who-out which rOCCI would not be possible:
3
+ Special thanks to the following extraordinary individuals, whithout whom rOcci would not be possible:
4
4
 
5
- * Hayati Bice - who wrote the initial version of an OCCI server rOCCI is based on
5
+ * Hayati Bice - who wrote the initial version of an Occi server rOcci is based on
6
6
  * Max Günther - who wrote the EC2 backend
7
7
  * Andre Thevapalan - for his input regarding the JSON rendering
8
+ * Boris Parak - especially for his input regarding the Client / Client DSL and CLI
8
9
  * the OCCI Working Group - for developing OCCI
data/Gemfile CHANGED
@@ -12,6 +12,7 @@ gem "rake"
12
12
  gem "httparty"
13
13
  gem "highline"
14
14
  gem "i18n"
15
+ gem "amqp"
15
16
 
16
17
  # development related gems
17
18
  group :development do
@@ -19,5 +20,13 @@ group :development do
19
20
  gem "simplecov"
20
21
  gem "yard"
21
22
  gem "yard-sinatra"
23
+ gem "yard-rspec"
24
+ gem "yard-cucumber"
22
25
  gem "rspec-http"
26
+ gem "vcr"
27
+ gem "webmock", "=1.8.11"
28
+ end
29
+
30
+ platforms :jruby do
31
+ gem 'jruby-openssl'
23
32
  end
data/Gemfile.lock CHANGED
@@ -1,53 +1,92 @@
1
1
  GEM
2
2
  remote: http://rubygems.org/
3
3
  specs:
4
- activesupport (3.2.3)
4
+ activesupport (3.2.9)
5
5
  i18n (~> 0.6)
6
6
  multi_json (~> 1.0)
7
+ addressable (2.3.2)
8
+ amq-client (0.9.5)
9
+ amq-protocol (>= 0.9.4)
10
+ eventmachine
11
+ amq-protocol (0.9.5)
12
+ amqp (0.9.8)
13
+ amq-client (~> 0.9.5)
14
+ amq-protocol (>= 0.9.4)
15
+ eventmachine
7
16
  antlr3 (1.8.12)
8
- builder (3.0.0)
17
+ bouncy-castle-java (1.5.0146.1)
18
+ builder (3.1.4)
19
+ crack (0.3.1)
20
+ cucumber (1.2.1)
21
+ builder (>= 2.1.2)
22
+ diff-lcs (>= 1.1.3)
23
+ gherkin (~> 2.11.0)
24
+ json (>= 1.4.6)
9
25
  diff-lcs (1.1.3)
26
+ eventmachine (1.0.0)
27
+ eventmachine (1.0.0-java)
28
+ gherkin (2.11.5)
29
+ json (>= 1.4.6)
30
+ gherkin (2.11.5-java)
31
+ json (>= 1.4.6)
10
32
  hashie (1.2.0)
11
- highline (1.6.11)
12
- httparty (0.8.1)
13
- multi_json
33
+ highline (1.6.15)
34
+ httparty (0.9.0)
35
+ multi_json (~> 1.0)
14
36
  multi_xml
15
- i18n (0.6.0)
16
- json (1.6.6)
17
- multi_json (1.3.5)
18
- multi_xml (0.4.2)
19
- nokogiri (1.5.3)
37
+ i18n (0.6.1)
38
+ jruby-openssl (0.7.7)
39
+ bouncy-castle-java (>= 1.5.0146.1)
40
+ json (1.7.5)
41
+ json (1.7.5-java)
42
+ multi_json (1.3.7)
43
+ multi_xml (0.5.1)
44
+ nokogiri (1.5.5)
45
+ nokogiri (1.5.5-java)
20
46
  rake (0.9.2.2)
21
- rspec (2.10.0)
22
- rspec-core (~> 2.10.0)
23
- rspec-expectations (~> 2.10.0)
24
- rspec-mocks (~> 2.10.0)
25
- rspec-core (2.10.1)
26
- rspec-expectations (2.10.0)
47
+ rspec (2.11.0)
48
+ rspec-core (~> 2.11.0)
49
+ rspec-expectations (~> 2.11.0)
50
+ rspec-mocks (~> 2.11.0)
51
+ rspec-core (2.11.1)
52
+ rspec-expectations (2.11.3)
27
53
  diff-lcs (~> 1.1.3)
28
54
  rspec-http (0.10.0)
29
55
  rspec (~> 2.0)
30
- rspec-mocks (2.10.1)
31
- simplecov (0.6.1)
56
+ rspec-mocks (2.11.3)
57
+ simplecov (0.7.1)
32
58
  multi_json (~> 1.0)
33
- simplecov-html (~> 0.5.3)
34
- simplecov-html (0.5.3)
59
+ simplecov-html (~> 0.7.1)
60
+ simplecov-html (0.7.1)
35
61
  uuidtools (2.1.3)
36
- yard (0.7.5)
62
+ vcr (2.3.0)
63
+ webmock (1.8.11)
64
+ addressable (>= 2.2.7)
65
+ crack (>= 0.1.7)
66
+ yard (0.8.3)
67
+ yard-cucumber (2.2.2)
68
+ cucumber (>= 0.7.5)
69
+ gherkin (>= 2.2.9)
70
+ yard (>= 0.8.1)
71
+ yard-rspec (0.1)
72
+ yard
37
73
  yard-sinatra (1.0.0)
38
74
  yard (~> 0.7)
39
75
 
40
76
  PLATFORMS
77
+ java
41
78
  ruby
42
79
 
43
80
  DEPENDENCIES
44
81
  activesupport
82
+ amqp
45
83
  antlr3
46
84
  builder
47
85
  hashie
48
86
  highline
49
87
  httparty
50
88
  i18n
89
+ jruby-openssl
51
90
  json
52
91
  nokogiri
53
92
  rake
@@ -55,5 +94,9 @@ DEPENDENCIES
55
94
  rspec-http
56
95
  simplecov
57
96
  uuidtools (>= 2.1.3)
97
+ vcr
98
+ webmock (= 1.8.11)
58
99
  yard
100
+ yard-cucumber
101
+ yard-rspec
59
102
  yard-sinatra
data/README.md CHANGED
@@ -1,7 +1,7 @@
1
1
  rOCCI - A Ruby OCCI Framework
2
2
  =================================
3
3
 
4
- [![Build Status](https://secure.travis-ci.org/gwdg/rOCCI.png)](http://travis-ci.org/gwdg/rOCCI)
4
+ [![Build Status](https://secure.travis-ci.org/gwdg/rOCCI.png)](http://travis-ci.org/gwdg/rOCCI) [![Dependency Status](https://gemnasium.com/gwdg/rOCCI.png)](https://gemnasium.com/gwdg/rOCCI)
5
5
 
6
6
  Requirements
7
7
  ------------
@@ -20,12 +20,17 @@ Installation
20
20
  Usage
21
21
  -----
22
22
  ### Client
23
- The OCCI gem includes a client you can use directly from shell with the following auth methods: x509 (with --password, --user-cred and --ca-path), basic (with --username and --password), digest (with --username and --password), none. If you won't set a password using --password, the client will run in an interactive mode and ask for it later on.
23
+ The OCCI gem includes a client you can use directly from shell with the following auth methods: x509 (with --password, --user-cred and --ca-path), basic (with --username and --password), digest (with --username and --password), none. If you won't set a password using --password, the client will ask for it later on. There is also an interactive mode, which will allow you to interact with the client through menus and answers to simple questions (this feature is still experimental).
24
24
 
25
25
  To find out more about available options and defaults use
26
26
 
27
27
  occi --help
28
28
 
29
+ To run the client in an interactive mode use
30
+
31
+ occi --interactive
32
+ occi --interactive --endpoint https://<ENDPOINT>:<PORT>/
33
+
29
34
  To list available resources use
30
35
 
31
36
  occi --endpoint https://<ENDPOINT>:<PORT>/ --action list --resource compute --auth x509
@@ -93,11 +98,11 @@ In your scripts, you can use the OCCI client DSL.
93
98
 
94
99
  To include the DSL definitions in your script use
95
100
 
96
- extend OCCI::DSL
101
+ extend Occi::Api::Dsl
97
102
 
98
- To connect to an OCCI endpoint/server (e.g. running on http://localhost:3000/ )
103
+ To connect to an OCCI endpoint/server (e.g. running on http://localhost:3300/ )
99
104
 
100
- connect('http://localhost:3300',auth||=nil)
105
+ connect(:http, 'http://localhost:3300',auth||=nil)
101
106
 
102
107
  To get the list of available resource types or mixin types use
103
108
 
@@ -142,7 +147,7 @@ To create a new compute resource use
142
147
  size = mixin 'large', 'resource_tpl'
143
148
  cmpt = resource "compute"
144
149
  cmpt.mixins << os << size
145
- cmpt.attributes.occi!.core!.title = "My VM"
150
+ cmpt.title = "My VM"
146
151
  create cmpt
147
152
 
148
153
  To get a description of a specific resource use
@@ -161,9 +166,9 @@ To delete a specific resource use
161
166
  If you need low level access to parts of the OCCI client or need to use more than one instance
162
167
  at a time, you should use the OCCI client API directly.
163
168
 
164
- To connect to an OCCI endpoint/server (e.g. running on http://localhost:3000/ )
169
+ To connect to an OCCI endpoint/server (e.g. running on http://localhost:3300/ )
165
170
 
166
- client = OCCI::Client.new('http://localhost:3300',auth||=nil)
171
+ client = Occi::Api::Client::ClientHttp.new('http://localhost:3300',auth||=nil)
167
172
 
168
173
  All available categories are automatically registered to the OCCI model during client initialization. You can get them via
169
174
 
@@ -212,7 +217,7 @@ To create a new compute resource use
212
217
  size = client.find_mixin 'large', 'resource_tpl'
213
218
  cmpt = client.get_resource "compute"
214
219
  cmpt.mixins << os << size
215
- cmpt.attributes.occi!.core!.title = "My VM"
220
+ cmpt.title = "My VM"
216
221
  client.create cmpt
217
222
 
218
223
  To get a description of a specific resource use
@@ -233,13 +238,13 @@ The OCCI gem includes its own logging mechanism using a message queue. By defaul
233
238
  A new OCCI Logger can be initialized by specifying the log destination (either a filename or an IO object like
234
239
  STDOUT) and the log level.
235
240
 
236
- OCCI::Log.new(STDOUT,OCCI::Log::INFO)
241
+ Occi::Log.new(STDOUT,Occi::Log::INFO)
237
242
 
238
243
  You can create multiple Loggers to receive the log output.
239
244
 
240
245
  You can always, even if there is no logger defined, log output using the class methods of OCCI::Log e.g.
241
246
 
242
- OCCI::Log.info("Test message")
247
+ Occi::Log.info("Test message")
243
248
 
244
249
  #### Registering categories in the OCCI Model
245
250
 
@@ -247,7 +252,7 @@ Before the parser may be used, the available categories have to be registered in
247
252
 
248
253
  For categories already specified by the OCCI WG a method exists in the OCCI Model class to register them:
249
254
 
250
- model = OCCI::Model.new
255
+ model = Occi::Model.new
251
256
  model.register_infrastructure
252
257
 
253
258
  Further categories can either be registered from files which include OCCI collections in JSON formator or from parsed
@@ -265,7 +270,7 @@ OCCI messages can be parsed to an OCCI collection for example like
265
270
 
266
271
  media_type = 'text/plain'
267
272
  body = %Q|Category: compute; scheme="http://schemas.ogf.org/occi/infrastructure#"; class="kind"|
268
- collection=OCCI::Parser.parse(media_type, body)
273
+ collection=Occi::Parser.parse(media_type, body)
269
274
 
270
275
  #### Parsing OVF / OVA files
271
276
 
@@ -276,7 +281,7 @@ bundled with rOCCI and can be parsed to an OCCI collection with
276
281
 
277
282
  require 'open-uri'
278
283
  ova=open 'https://raw.github.com/gwdg/rOCCI/master/spec/occi/test.ova'
279
- collection=OCCI::Parser.ova(ova.read)
284
+ collection=Occi::Parser.ova(ova.read)
280
285
 
281
286
  Currently only the following entries of OVF files are parsed
282
287
 
data/Rakefile CHANGED
@@ -3,18 +3,15 @@ Bundler::GemHelper.install_tasks
3
3
 
4
4
  task :default => 'rcov:all'
5
5
 
6
- require 'rspec/core/rake_task'
7
- #require 'cucumber/rake/task'
8
-
9
6
  namespace :rcov do
10
7
 
11
- =begin
8
+ require 'rspec/core/rake_task'
9
+ require 'cucumber/rake/task'
10
+
12
11
  Cucumber::Rake::Task.new(:cucumber) do |t|
13
12
  t.cucumber_opts = "--format pretty"
14
-
15
13
  ENV['COVERAGE'] = "true"
16
14
  end
17
- =end
18
15
 
19
16
  RSpec::Core::RakeTask.new(:rspec) do |t|
20
17
  ENV['COVERAGE'] = "true"
@@ -24,6 +21,13 @@ namespace :rcov do
24
21
  task :all do |t|
25
22
  rm "coverage/coverage.data" if File.exist?("coverage/coverage.data")
26
23
  Rake::Task['rcov:rspec'].invoke
27
- # Rake::Task["rcov:cucumber"].invoke
24
+ Rake::Task["rcov:cucumber"].invoke
28
25
  end
29
- end
26
+
27
+ end
28
+
29
+ require 'yard'
30
+ YARD::Rake::YardocTask.new(:yard) do |t|
31
+ t.files = ['features/**/*.feature', 'features/**/*.rb']
32
+ t.options = ['--any', '--extra', '--opts'] # optional
33
+ end
@@ -0,0 +1,862 @@
1
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
2
+ <html xmlns="http://www.w3.org/1999/xhtml">
3
+ <head>
4
+ <META http-equiv="Content-Type" content="text/html; charset=UTF-8">
5
+ <title>Test Results &mdash; discovery_interface</title>
6
+ <style type="text/css">
7
+ html {
8
+ height: 100%
9
+ }
10
+
11
+ body {
12
+ margin: 0 auto;
13
+ padding: 0;
14
+ text-align: left;
15
+ height: 100%;
16
+ font-family: myriad, arial, tahoma, verdana, sans-serif;
17
+ color: #151515;
18
+ font-size: 90%;
19
+ line-height: 1.3em;
20
+ background-color: #fff;
21
+ }
22
+
23
+ * {
24
+ margin: 0;
25
+ padding: 0
26
+ }
27
+
28
+ .clr {
29
+ clear: both;
30
+ overflow: hidden;
31
+ }
32
+
33
+ img {
34
+ border: none
35
+ }
36
+
37
+ a {
38
+ color: #0046b0;
39
+ text-decoration: none;
40
+ }
41
+
42
+ a:hover {
43
+ text-decoration: none;
44
+ }
45
+
46
+ a:focus, a:active {
47
+ outline: none
48
+ }
49
+
50
+ .noborder {
51
+ border: none
52
+ }
53
+
54
+ h1 {
55
+ color: #151515;
56
+ font-size: 180%;
57
+ line-height: 1.1em;
58
+ font-weight: bold;
59
+ }
60
+
61
+ h2 {
62
+ color: #393D42;
63
+ font-size: 160%;
64
+ font-weight: normal
65
+ }
66
+
67
+ h3 {
68
+ font-size: 120%;
69
+ font-weight: bold;
70
+ margin-bottom: .5em
71
+ }
72
+
73
+ h4 {
74
+ font-size: 110%;
75
+ }
76
+
77
+ h5 {
78
+ font-size: 110%;
79
+ }
80
+
81
+ span.failed {
82
+ color: #ff0000
83
+ }
84
+
85
+ span.error {
86
+ color: #ff0000
87
+ }
88
+
89
+ span.passed {
90
+ color: #1d9d01
91
+ }
92
+
93
+ span.ignored {
94
+ color: #fff600
95
+ }
96
+
97
+ span.skipped {
98
+ color: #fff600
99
+ }
100
+
101
+ hr {
102
+ background-color: blue
103
+ }
104
+
105
+ #container {
106
+ min-width: 30em;
107
+ }
108
+
109
+ #header {
110
+ padding: 0;
111
+ position: fixed;
112
+ width: 100%;
113
+ z-index: 10;
114
+ background-color: #c7ceda;
115
+ }
116
+
117
+ #header h1 {
118
+ margin: 1em 3em 1em 1.7em;
119
+ }
120
+
121
+ #header h1 strong {
122
+ white-space: nowrap;
123
+ }
124
+
125
+ #header .time {
126
+ margin-top: 2.2em;
127
+ margin-right: 3.4em;
128
+ float: right;
129
+ }
130
+
131
+ #treecontrol {
132
+ margin: 0;
133
+ padding: .5em 3em .5em 0;
134
+ text-align: right;
135
+ background-color: #fff;
136
+ }
137
+
138
+ #treecontrol ul li {
139
+ display: inline;
140
+ list-style: none;
141
+ color: #666;
142
+ }
143
+
144
+ #content {
145
+ padding: 0 2.5em 2em 1.7em;
146
+ }
147
+
148
+ #content ul {
149
+ margin: .4em 0 .1em 2em;
150
+ list-style: none;
151
+ }
152
+
153
+ #content ul li.level {
154
+ cursor: pointer;
155
+ }
156
+
157
+ #content ul li.level span {
158
+ display: block;
159
+ font-weight: bold;
160
+ }
161
+
162
+ #content ul li.level.top {
163
+ margin-bottom: .3em;
164
+ }
165
+
166
+ #content ul li.level.top > span {
167
+ padding: .5em 0 .5em 1em;
168
+ font-size: 120%;
169
+ color: #151515;
170
+ background-color: #f2f2f2;
171
+ border-left: solid 10px #93e078;
172
+ }
173
+
174
+ #content ul li.level.top.failed > span {
175
+ border-left: solid 10px #f02525;
176
+ }
177
+
178
+ #content ul li.level.top.ignored > span {
179
+ border-left: solid 10px #f8d216;
180
+ }
181
+
182
+ #content ul li.level.suite > span {
183
+ margin-bottom: .8em;
184
+ padding: 0 0 0 .8em;
185
+ display: block;
186
+ font-size: 110%;
187
+ line-height: 1em;
188
+ color: #151515;
189
+ border-left: solid 15px #93e078;
190
+ }
191
+
192
+ #content ul li.level.suite.failed > span {
193
+ border-left: solid 15px #f02525;
194
+ }
195
+
196
+ #content ul li.level.suite.ignored > span {
197
+ border-left: solid 15px #f8d216;
198
+ }
199
+
200
+ #content ul li.level.suite > ul {
201
+ margin-bottom: 1.5em;
202
+ }
203
+
204
+ #content ul li.level.test > span {
205
+ padding: .3em 0 .3em 1em;
206
+ color: #0046b0;
207
+ font-size: 100%;
208
+ border-left: solid 6px #93e078;
209
+ border-bottom: solid 1px #dbdbdb;
210
+ }
211
+
212
+ #content ul li.level.test.failed > span {
213
+ border-left: solid 6px #f02525;
214
+ }
215
+
216
+ #content ul li.level.test.ignored > span {
217
+ border-left: solid 6px #f8d216;
218
+ }
219
+
220
+ #content ul li.text p, #content ul li.text span {
221
+ margin-bottom: 1.5em;
222
+ color: #151515 !important;
223
+ font-size: 90% !important;
224
+ font-weight: normal !important;
225
+ overflow-x: auto;
226
+ cursor: auto !important;
227
+ background: none !important;
228
+ border: none !important;
229
+ }
230
+
231
+ #content ul li.text span {
232
+ margin-bottom: 0;
233
+ display: block;
234
+ }
235
+
236
+ #content ul li.text span.stderr {
237
+ color: #8b0000 !important;
238
+ }
239
+
240
+ #content ul li .time {
241
+ margin-right: .5em;
242
+ width: 5em;
243
+ text-align: right;
244
+ font-size: 13px;
245
+ color: #151515;
246
+ font-style: normal;
247
+ font-weight: normal;
248
+ float: right;
249
+ }
250
+
251
+ #content ul li span .status {
252
+ width: 6em;
253
+ font-size: 90%;
254
+ color: #1d9d01;
255
+ font-style: normal;
256
+ font-weight: normal;
257
+ float: right;
258
+ text-align: right;
259
+ }
260
+
261
+ #content ul li.failed > span .status {
262
+ color: #ff0000;
263
+ }
264
+
265
+ #content ul li.ignored > span .status {
266
+ color: #d6b000;
267
+ }
268
+
269
+ #footer {
270
+ height: 2em;
271
+ background-color: #c7ceda;
272
+ }
273
+ #footer p {
274
+ padding: .4em 0 0 3.6em;
275
+ font-size: 80%;
276
+ }
277
+ </style>
278
+
279
+ <script type="text/javascript">
280
+ eval(function(p,a,c,k,e,r){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--)r[e(c)]=k[c]||e(c);k=[function(e){return r[e]}];e=function(){return'\\w+'};c=1};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p}('(G(){9(1n E!="11")H w=E;H E=17.16=G(a,c){9(17==6||!6.4K)I 1q E(a,c);I 6.4K(a,c)};9(1n $!="11")H D=$;17.$=E;H u=/^[^<]*(<(.|\\s)+>)[^>]*$|^#(\\w+)$/;E.1b=E.3x={4K:G(a,c){a=a||U;9(1n a=="1M"){H m=u.2L(a);9(m&&(m[1]||!c)){9(m[1])a=E.4I([m[1]],c);J{H b=U.42(m[3]);9(b)9(b.1T!=m[3])I E().1X(a);J{6[0]=b;6.L=1;I 6}J a=[]}}J I 1q E(c).1X(a)}J 9(E.1p(a))I 1q E(U)[E.1b.2d?"2d":"37"](a);I 6.6u(a.1d==1C&&a||(a.4d||a.L&&a!=17&&!a.1z&&a[0]!=11&&a[0].1z)&&E.2h(a)||[a])},4d:"1.2",82:G(){I 6.L},L:0,28:G(a){I a==11?E.2h(6):6[a]},2v:G(a){H b=E(a);b.4Y=6;I b},6u:G(a){6.L=0;1C.3x.1a.15(6,a);I 6},O:G(a,b){I E.O(6,a,b)},4J:G(a){H b=-1;6.O(G(i){9(6==a)b=i});I b},1y:G(f,d,e){H c=f;9(f.1d==3T)9(d==11)I 6.L&&E[e||"1y"](6[0],f)||11;J{c={};c[f]=d}I 6.O(G(a){M(H b 1j c)E.1y(e?6.R:6,b,E.1c(6,c[b],e,a,b))})},18:G(b,a){I 6.1y(b,a,"3O")},2t:G(e){9(1n e!="5w"&&e!=S)I 6.4o().3e(U.6F(e));H t="";E.O(e||6,G(){E.O(6.2X,G(){9(6.1z!=8)t+=6.1z!=1?6.6x:E.1b.2t([6])})});I t},5l:G(b){9(6[0])E(b,6[0].3N).6t().38(6[0]).1W(G(){H a=6;1Y(a.1t)a=a.1t;I a}).3e(6);I 6},8p:G(a){I 6.O(G(){E(6).6p().5l(a)})},8h:G(a){I 6.O(G(){E(6).5l(a)})},3e:G(){I 6.3s(1k,Q,1,G(a){6.57(a)})},6k:G(){I 6.3s(1k,Q,-1,G(a){6.38(a,6.1t)})},6g:G(){I 6.3s(1k,P,1,G(a){6.14.38(a,6)})},53:G(){I 6.3s(1k,P,-1,G(a){6.14.38(a,6.2i)})},1B:G(){I 6.4Y||E([])},1X:G(t){H b=E.1W(6,G(a){I E.1X(t,a)});I 6.2v(/[^+>] [^+>]/.12(t)||t.1e("..")>-1?E.4V(b):b)},6t:G(e){H f=6.1W(G(){I 6.66?E(6.66)[0]:6.4S(Q)});9(e===Q){H d=f.1X("*").4Q();6.1X("*").4Q().O(G(i){H c=E.K(6,"2A");M(H a 1j c)M(H b 1j c[a])E.1h.1f(d[i],a,c[a][b],c[a][b].K)})}I f},1A:G(t){I 6.2v(E.1p(t)&&E.2T(6,G(b,a){I t.15(b,[a])})||E.3G(t,6))},5T:G(t){I 6.2v(t.1d==3T&&E.3G(t,6,Q)||E.2T(6,G(a){I(t.1d==1C||t.4d)?E.2S(a,t)<0:a!=t}))},1f:G(t){I 6.2v(E.1S(6.28(),t.1d==3T?E(t).28():t.L!=11&&(!t.Y||t.Y=="7t")?t:[t]))},3j:G(a){I a?E.3G(a,6).L>0:P},7g:G(a){I 6.3j("."+a)},2V:G(b){9(b==11){9(6.L){H c=6[0];9(E.Y(c,"24")){H e=c.4z,a=[],W=c.W,2P=c.N=="24-2P";9(e<0)I S;M(H i=2P?e:0,2Y=2P?e+1:W.L;i<2Y;i++){H d=W[i];9(d.29){H b=E.V.1g&&!d.70["1N"].9U?d.2t:d.1N;9(2P)I b;a.1a(b)}}I a}J I 6[0].1N.1o(/\\r/g,"")}}J I 6.O(G(){9(b.1d==1C&&/4s|5u/.12(6.N))6.2K=(E.2S(6.1N,b)>=0||E.2S(6.2J,b)>=0);J 9(E.Y(6,"24")){H a=b.1d==1C?b:[b];E("9m",6).O(G(){6.29=(E.2S(6.1N,a)>=0||E.2S(6.2t,a)>=0)});9(!a.L)6.4z=-1}J 6.1N=b})},4n:G(a){I a==11?(6.L?6[0].3D:S):6.4o().3e(a)},6H:G(a){I 6.53(a).2e()},2s:G(){I 6.2v(1C.3x.2s.15(6,1k))},1W:G(b){I 6.2v(E.1W(6,G(a,i){I b.3c(a,i,a)}))},4Q:G(){I 6.1f(6.4Y)},3s:G(f,d,g,e){H c=6.L>1,a;I 6.O(G(){9(!a){a=E.4I(f,6.3N);9(g<0)a.91()}H b=6;9(d&&E.Y(6,"1F")&&E.Y(a[0],"4k"))b=6.4q("1J")[0]||6.57(U.5r("1J"));E.O(a,G(){9(E.Y(6,"1P")){9(6.3g)E.3w({1u:6.3g,3h:P,1Z:"1P"});J E.5h(6.2t||6.6s||6.3D||"")}J e.15(b,[c?6.4S(Q):6])})})}};E.1i=E.1b.1i=G(){H c=1k[0]||{},a=1,2g=1k.L,5e=P;9(c.1d==8v){5e=c;c=1k[1]||{}}9(2g==1){c=6;a=0}H b;M(;a<2g;a++)9((b=1k[a])!=S)M(H i 1j b){9(c==b[i])6r;9(5e&&1n b[i]==\'5w\'&&c[i])E.1i(c[i],b[i]);J 9(b[i]!=11)c[i]=b[i]}I c};H F="16"+(1q 3v()).3u(),6q=0,5d={};E.1i({8k:G(a){17.$=D;9(a)17.16=w;I E},1p:G(a){I!!a&&1n a!="1M"&&!a.Y&&a.1d!=1C&&/G/i.12(a+"")},4a:G(a){I a.35&&!a.1K||a.34&&a.3N&&!a.3N.1K},5h:G(a){a=E.33(a);9(a){9(17.6o)17.6o(a);J 9(E.V.1H)17.58(a,0);J 3p.3c(17,a)}},Y:G(b,a){I b.Y&&b.Y.26()==a.26()},1I:{},K:G(c,d,b){c=c==17?5d:c;H a=c[F];9(!a)a=c[F]=++6q;9(d&&!E.1I[a])E.1I[a]={};9(b!=11)E.1I[a][d]=b;I d?E.1I[a][d]:a},30:G(c,b){c=c==17?5d:c;H a=c[F];9(b){9(E.1I[a]){2G E.1I[a][b];b="";M(b 1j E.1I[a])22;9(!b)E.30(c)}}J{2c{2G c[F]}27(e){9(c.54)c.54(F)}2G E.1I[a]}},O:G(a,b,c){9(c){9(a.L==11)M(H i 1j a)b.15(a[i],c);J M(H i=0,45=a.L;i<45;i++)9(b.15(a[i],c)===P)22}J{9(a.L==11)M(H i 1j a)b.3c(a[i],i,a[i]);J M(H i=0,45=a.L,2V=a[0];i<45&&b.3c(2V,i,2V)!==P;2V=a[++i]){}}I a},1c:G(c,b,d,e,a){9(E.1p(b))b=b.3c(c,[e]);H f=/z-?4J|7T-?7S|1v|69|7Q-?1G/i;I b&&b.1d==4X&&d=="3O"&&!f.12(a)?b+"2I":b},1m:{1f:G(b,c){E.O((c||"").2p(/\\s+/),G(i,a){9(!E.1m.3t(b.1m,a))b.1m+=(b.1m?" ":"")+a})},2e:G(b,c){b.1m=c!=11?E.2T(b.1m.2p(/\\s+/),G(a){I!E.1m.3t(c,a)}).65(" "):""},3t:G(t,c){I E.2S(c,(t.1m||t).3z().2p(/\\s+/))>-1}},2q:G(e,o,f){M(H i 1j o){e.R["3C"+i]=e.R[i];e.R[i]=o[i]}f.15(e,[]);M(H i 1j o)e.R[i]=e.R["3C"+i]},18:G(e,p){9(p=="1G"||p=="2E"){H b={},3Z,3Y,d=["7L","7K","7J","7G"];E.O(d,G(){b["7F"+6]=0;b["7D"+6+"61"]=0});E.2q(e,b,G(){9(E(e).3j(\':3X\')){3Z=e.7A;3Y=e.7z}J{e=E(e.4S(Q)).1X(":4s").5X("2K").1B().18({4v:"1O",2W:"4D",19:"2U",7w:"0",1R:"0"}).5P(e.14)[0];H a=E.18(e.14,"2W")||"3V";9(a=="3V")e.14.R.2W="7k";3Z=e.7h;3Y=e.7f;9(a=="3V")e.14.R.2W="3V";e.14.3k(e)}});I p=="1G"?3Z:3Y}I E.3O(e,p)},3O:G(h,j,i){H g,2u=[],2q=[];G 3l(a){9(!E.V.1H)I P;H b=U.3M.3P(a,S);I!b||b.4y("3l")==""}9(j=="1v"&&E.V.1g){g=E.1y(h.R,"1v");I g==""?"1":g}9(j.1U(/4r/i))j=y;9(!i&&h.R[j])g=h.R[j];J 9(U.3M&&U.3M.3P){9(j.1U(/4r/i))j="4r";j=j.1o(/([A-Z])/g,"-$1").2F();H d=U.3M.3P(h,S);9(d&&!3l(h))g=d.4y(j);J{M(H a=h;a&&3l(a);a=a.14)2u.4Z(a);M(a=0;a<2u.L;a++)9(3l(2u[a])){2q[a]=2u[a].R.19;2u[a].R.19="2U"}g=j=="19"&&2q[2u.L-1]!=S?"2j":U.3M.3P(h,S).4y(j)||"";M(a=0;a<2q.L;a++)9(2q[a]!=S)2u[a].R.19=2q[a]}9(j=="1v"&&g=="")g="1"}J 9(h.43){H f=j.1o(/\\-(\\w)/g,G(m,c){I c.26()});g=h.43[j]||h.43[f];9(!/^\\d+(2I)?$/i.12(g)&&/^\\d/.12(g)){H k=h.R.1R;H e=h.4t.1R;h.4t.1R=h.43.1R;h.R.1R=g||0;g=h.R.74+"2I";h.R.1R=k;h.4t.1R=e}}I g},4I:G(a,e){H r=[];e=e||U;E.O(a,G(i,d){9(!d)I;9(d.1d==4X)d=d.3z();9(1n d=="1M"){d=d.1o(/(<(\\w+)[^>]*?)\\/>/g,G(m,a,b){I b.1U(/^(71|6Z|5D|6Y|49|9S|9P|3f|9K|9I)$/i)?m:a+"></"+b+">"});H s=E.33(d).2F(),1r=e.5r("1r"),2x=[];H c=!s.1e("<9D")&&[1,"<24>","</24>"]||!s.1e("<9A")&&[1,"<6S>","</6S>"]||s.1U(/^<(9x|1J|9u|9t|9s)/)&&[1,"<1F>","</1F>"]||!s.1e("<4k")&&[2,"<1F><1J>","</1J></1F>"]||(!s.1e("<9r")||!s.1e("<9q"))&&[3,"<1F><1J><4k>","</4k></1J></1F>"]||!s.1e("<5D")&&[2,"<1F><1J></1J><6L>","</6L></1F>"]||E.V.1g&&[1,"1r<1r>","</1r>"]||[0,"",""];1r.3D=c[1]+d+c[2];1Y(c[0]--)1r=1r.5k;9(E.V.1g){9(!s.1e("<1F")&&s.1e("<1J")<0)2x=1r.1t&&1r.1t.2X;J 9(c[1]=="<1F>"&&s.1e("<1J")<0)2x=1r.2X;M(H n=2x.L-1;n>=0;--n)9(E.Y(2x[n],"1J")&&!2x[n].2X.L)2x[n].14.3k(2x[n]);9(/^\\s/.12(d))1r.38(e.6F(d.1U(/^\\s*/)[0]),1r.1t)}d=E.2h(1r.2X)}9(0===d.L&&(!E.Y(d,"3B")&&!E.Y(d,"24")))I;9(d[0]==11||E.Y(d,"3B")||d.W)r.1a(d);J r=E.1S(r,d)});I r},1y:G(c,d,a){H e=E.4a(c)?{}:E.5o;9(d=="29"&&E.V.1H)c.14.4z;9(e[d]){9(a!=11)c[e[d]]=a;I c[e[d]]}J 9(E.V.1g&&d=="R")I E.1y(c.R,"9g",a);J 9(a==11&&E.V.1g&&E.Y(c,"3B")&&(d=="9e"||d=="9d"))I c.9b(d).6x;J 9(c.34){9(a!=11){9(d=="N"&&E.Y(c,"49")&&c.14)6E"N 96 94\'t 93 92";c.90(d,a)}9(E.V.1g&&/6B|3g/.12(d)&&!E.4a(c))I c.4l(d,2);I c.4l(d)}J{9(d=="1v"&&E.V.1g){9(a!=11){c.69=1;c.1A=(c.1A||"").1o(/6A\\([^)]*\\)/,"")+(3K(a).3z()=="8V"?"":"6A(1v="+a*6z+")")}I c.1A?(3K(c.1A.1U(/1v=([^)]*)/)[1])/6z).3z():""}d=d.1o(/-([a-z])/8T,G(z,b){I b.26()});9(a!=11)c[d]=a;I c[d]}},33:G(t){I(t||"").1o(/^\\s+|\\s+$/g,"")},2h:G(a){H r=[];9(1n a!="8Q")M(H i=0,2g=a.L;i<2g;i++)r.1a(a[i]);J r=a.2s(0);I r},2S:G(b,a){M(H i=0,2g=a.L;i<2g;i++)9(a[i]==b)I i;I-1},1S:G(a,b){9(E.V.1g){M(H i=0;b[i];i++)9(b[i].1z!=8)a.1a(b[i])}J M(H i=0;b[i];i++)a.1a(b[i]);I a},4V:G(b){H r=[],2f={};2c{M(H i=0,6P=b.L;i<6P;i++){H a=E.K(b[i]);9(!2f[a]){2f[a]=Q;r.1a(b[i])}}}27(e){r=b}I r},2T:G(b,a,c){9(1n a=="1M")a=3p("P||G(a,i){I "+a+"}");H d=[];M(H i=0,4m=b.L;i<4m;i++)9(!c&&a(b[i],i)||c&&!a(b[i],i))d.1a(b[i]);I d},1W:G(c,b){9(1n b=="1M")b=3p("P||G(a){I "+b+"}");H d=[];M(H i=0,4m=c.L;i<4m;i++){H a=b(c[i],i);9(a!==S&&a!=11){9(a.1d!=1C)a=[a];d=d.8O(a)}}I d}});H v=8M.8K.2F();E.V={4f:(v.1U(/.+(?:8I|8H|8F|8E)[\\/: ]([\\d.]+)/)||[])[1],1H:/6T/.12(v),3a:/3a/.12(v),1g:/1g/.12(v)&&!/3a/.12(v),39:/39/.12(v)&&!/(8B|6T)/.12(v)};H y=E.V.1g?"4h":"5g";E.1i({5f:!E.V.1g||U.8A=="8z",4h:E.V.1g?"4h":"5g",5o:{"M":"8y","8x":"1m","4r":y,5g:y,4h:y,3D:"3D",1m:"1m",1N:"1N",36:"36",2K:"2K",8w:"8u",29:"29",8t:"8s"}});E.O({1D:"a.14",8r:"16.4e(a,\'14\')",8q:"16.2R(a,2,\'2i\')",8o:"16.2R(a,2,\'4c\')",8n:"16.4e(a,\'2i\')",8m:"16.4e(a,\'4c\')",8l:"16.5c(a.14.1t,a)",8j:"16.5c(a.1t)",6p:"16.Y(a,\'8i\')?a.8f||a.8e.U:16.2h(a.2X)"},G(i,n){E.1b[i]=G(a){H b=E.1W(6,n);9(a&&1n a=="1M")b=E.3G(a,b);I 6.2v(E.4V(b))}});E.O({5P:"3e",8d:"6k",38:"6g",8c:"53",8b:"6H"},G(i,n){E.1b[i]=G(){H a=1k;I 6.O(G(){M(H j=0,2g=a.L;j<2g;j++)E(a[j])[n](6)})}});E.O({5X:G(a){E.1y(6,a,"");6.54(a)},8a:G(c){E.1m.1f(6,c)},89:G(c){E.1m.2e(6,c)},88:G(c){E.1m[E.1m.3t(6,c)?"2e":"1f"](6,c)},2e:G(a){9(!a||E.1A(a,[6]).r.L){E.30(6);6.14.3k(6)}},4o:G(){E("*",6).O(G(){E.30(6)});1Y(6.1t)6.3k(6.1t)}},G(i,n){E.1b[i]=G(){I 6.O(n,1k)}});E.O(["87","61"],G(i,a){H n=a.2F();E.1b[n]=G(h){I 6[0]==17?E.V.1H&&3r["86"+a]||E.5f&&32.2Y(U.35["59"+a],U.1K["59"+a])||U.1K["59"+a]:6[0]==U?32.2Y(U.1K["6n"+a],U.1K["6m"+a]):h==11?(6.L?E.18(6[0],n):S):6.18(n,h.1d==3T?h:h+"2I")}});H C=E.V.1H&&3q(E.V.4f)<85?"(?:[\\\\w*56-]|\\\\\\\\.)":"(?:[\\\\w\\84-\\83*56-]|\\\\\\\\.)",6j=1q 47("^>\\\\s*("+C+"+)"),6i=1q 47("^("+C+"+)(#)("+C+"+)"),6h=1q 47("^([#.]?)("+C+"*)");E.1i({55:{"":"m[2]==\'*\'||16.Y(a,m[2])","#":"a.4l(\'1T\')==m[2]",":":{81:"i<m[3]-0",7Z:"i>m[3]-0",2R:"m[3]-0==i",7Y:"m[3]-0==i",3o:"i==0",3n:"i==r.L-1",6f:"i%2==0",6d:"i%2","3o-46":"a.14.4q(\'*\')[0]==a","3n-46":"16.2R(a.14.5k,1,\'4c\')==a","7X-46":"!16.2R(a.14.5k,2,\'4c\')",1D:"a.1t",4o:"!a.1t",7W:"(a.6s||a.7V||\'\').1e(m[3])>=0",3X:\'"1O"!=a.N&&16.18(a,"19")!="2j"&&16.18(a,"4v")!="1O"\',1O:\'"1O"==a.N||16.18(a,"19")=="2j"||16.18(a,"4v")=="1O"\',7U:"!a.36",36:"a.36",2K:"a.2K",29:"a.29||16.1y(a,\'29\')",2t:"\'2t\'==a.N",4s:"\'4s\'==a.N",5u:"\'5u\'==a.N",52:"\'52\'==a.N",51:"\'51\'==a.N",50:"\'50\'==a.N",6c:"\'6c\'==a.N",6b:"\'6b\'==a.N",2y:\'"2y"==a.N||16.Y(a,"2y")\',49:"/49|24|6a|2y/i.12(a.Y)",3t:"16.1X(m[3],a).L",7R:"/h\\\\d/i.12(a.Y)",7P:"16.2T(16.2Z,G(1b){I a==1b.T;}).L"}},68:[/^(\\[) *@?([\\w-]+) *([!*$^~=]*) *(\'?"?)(.*?)\\4 *\\]/,/^(:)([\\w-]+)\\("?\'?(.*?(\\(.*?\\))?[^(]*?)"?\'?\\)/,1q 47("^([:.#]*)("+C+"+)")],3G:G(a,c,b){H d,2b=[];1Y(a&&a!=d){d=a;H f=E.1A(a,c,b);a=f.t.1o(/^\\s*,\\s*/,"");2b=b?c=f.r:E.1S(2b,f.r)}I 2b},1X:G(t,o){9(1n t!="1M")I[t];9(o&&!o.1z)o=S;o=o||U;H d=[o],2f=[],3n;1Y(t&&3n!=t){H r=[];3n=t;t=E.33(t);H l=P;H g=6j;H m=g.2L(t);9(m){H p=m[1].26();M(H i=0;d[i];i++)M(H c=d[i].1t;c;c=c.2i)9(c.1z==1&&(p=="*"||c.Y.26()==p.26()))r.1a(c);d=r;t=t.1o(g,"");9(t.1e(" ")==0)6r;l=Q}J{g=/^([>+~])\\s*(\\w*)/i;9((m=g.2L(t))!=S){r=[];H p=m[2],1S={};m=m[1];M(H j=0,31=d.L;j<31;j++){H n=m=="~"||m=="+"?d[j].2i:d[j].1t;M(;n;n=n.2i)9(n.1z==1){H h=E.K(n);9(m=="~"&&1S[h])22;9(!p||n.Y.26()==p.26()){9(m=="~")1S[h]=Q;r.1a(n)}9(m=="+")22}}d=r;t=E.33(t.1o(g,""));l=Q}}9(t&&!l){9(!t.1e(",")){9(o==d[0])d.44();2f=E.1S(2f,d);r=d=[o];t=" "+t.67(1,t.L)}J{H k=6i;H m=k.2L(t);9(m){m=[0,m[2],m[3],m[1]]}J{k=6h;m=k.2L(t)}m[2]=m[2].1o(/\\\\/g,"");H f=d[d.L-1];9(m[1]=="#"&&f&&f.42&&!E.4a(f)){H q=f.42(m[2]);9((E.V.1g||E.V.3a)&&q&&1n q.1T=="1M"&&q.1T!=m[2])q=E(\'[@1T="\'+m[2]+\'"]\',f)[0];d=r=q&&(!m[3]||E.Y(q,m[3]))?[q]:[]}J{M(H i=0;d[i];i++){H a=m[1]=="#"&&m[3]?m[3]:m[1]!=""||m[0]==""?"*":m[2];9(a=="*"&&d[i].Y.2F()=="5w")a="3f";r=E.1S(r,d[i].4q(a))}9(m[1]==".")r=E.4W(r,m[2]);9(m[1]=="#"){H e=[];M(H i=0;r[i];i++)9(r[i].4l("1T")==m[2]){e=[r[i]];22}r=e}d=r}t=t.1o(k,"")}}9(t){H b=E.1A(t,r);d=r=b.r;t=E.33(b.t)}}9(t)d=[];9(d&&o==d[0])d.44();2f=E.1S(2f,d);I 2f},4W:G(r,m,a){m=" "+m+" ";H c=[];M(H i=0;r[i];i++){H b=(" "+r[i].1m+" ").1e(m)>=0;9(!a&&b||a&&!b)c.1a(r[i])}I c},1A:G(t,r,h){H d;1Y(t&&t!=d){d=t;H p=E.68,m;M(H i=0;p[i];i++){m=p[i].2L(t);9(m){t=t.7O(m[0].L);m[2]=m[2].1o(/\\\\/g,"");22}}9(!m)22;9(m[1]==":"&&m[2]=="5T")r=E.1A(m[3],r,Q).r;J 9(m[1]==".")r=E.4W(r,m[2],h);J 9(m[1]=="["){H g=[],N=m[3];M(H i=0,31=r.L;i<31;i++){H a=r[i],z=a[E.5o[m[2]]||m[2]];9(z==S||/6B|3g|29/.12(m[2]))z=E.1y(a,m[2])||\'\';9((N==""&&!!z||N=="="&&z==m[5]||N=="!="&&z!=m[5]||N=="^="&&z&&!z.1e(m[5])||N=="$="&&z.67(z.L-m[5].L)==m[5]||(N=="*="||N=="~=")&&z.1e(m[5])>=0)^h)g.1a(a)}r=g}J 9(m[1]==":"&&m[2]=="2R-46"){H e={},g=[],12=/(\\d*)n\\+?(\\d*)/.2L(m[3]=="6f"&&"2n"||m[3]=="6d"&&"2n+1"||!/\\D/.12(m[3])&&"n+"+m[3]||m[3]),3o=(12[1]||1)-0,d=12[2]-0;M(H i=0,31=r.L;i<31;i++){H j=r[i],14=j.14,1T=E.K(14);9(!e[1T]){H c=1;M(H n=14.1t;n;n=n.2i)9(n.1z==1)n.4U=c++;e[1T]=Q}H b=P;9(3o==1){9(d==0||j.4U==d)b=Q}J 9((j.4U+d)%3o==0)b=Q;9(b^h)g.1a(j)}r=g}J{H f=E.55[m[1]];9(1n f!="1M")f=E.55[m[1]][m[2]];f=3p("P||G(a,i){I "+f+"}");r=E.2T(r,f,h)}}I{r:r,t:t}},4e:G(b,c){H d=[];H a=b[c];1Y(a&&a!=U){9(a.1z==1)d.1a(a);a=a[c]}I d},2R:G(a,e,c,b){e=e||1;H d=0;M(;a;a=a[c])9(a.1z==1&&++d==e)22;I a},5c:G(n,a){H r=[];M(;n;n=n.2i){9(n.1z==1&&(!a||n!=a))r.1a(n)}I r}});E.1h={1f:G(g,e,c,h){9(E.V.1g&&g.41!=11)g=17;9(!c.2r)c.2r=6.2r++;9(h!=11){H d=c;c=G(){I d.15(6,1k)};c.K=h;c.2r=d.2r}H i=e.2p(".");e=i[0];c.N=i[1];H b=E.K(g,"2A")||E.K(g,"2A",{});H f=E.K(g,"2m",G(){H a;9(1n E=="11"||E.1h.4T)I a;a=E.1h.2m.15(g,1k);I a});H j=b[e];9(!j){j=b[e]={};9(g.4R)g.4R(e,f,P);J g.7N("40"+e,f)}j[c.2r]=c;6.23[e]=Q},2r:1,23:{},2e:G(d,c,b){H e=E.K(d,"2A"),2O,4J;9(1n c=="1M"){H a=c.2p(".");c=a[0]}9(e){9(c&&c.N){b=c.4P;c=c.N}9(!c){M(c 1j e)6.2e(d,c)}J 9(e[c]){9(b)2G e[c][b.2r];J M(b 1j e[c])9(!a[1]||e[c][b].N==a[1])2G e[c][b];M(2O 1j e[c])22;9(!2O){9(d.4O)d.4O(c,E.K(d,"2m"),P);J d.7M("40"+c,E.K(d,"2m"));2O=S;2G e[c]}}M(2O 1j e)22;9(!2O){E.30(d,"2A");E.30(d,"2m")}}},1L:G(d,b,e,c,f){b=E.2h(b||[]);9(!e){9(6.23[d])E("*").1f([17,U]).1L(d,b)}J{H a,2O,1b=E.1p(e[d]||S),4N=!b[0]||!b[0].2B;9(4N)b.4Z(6.4M({N:d,2o:e}));9(E.1p(E.K(e,"2m")))a=E.K(e,"2m").15(e,b);9(!1b&&e["40"+d]&&e["40"+d].15(e,b)===P)a=P;9(4N)b.44();9(f&&f.15(e,b)===P)a=P;9(1b&&c!==P&&a!==P&&!(E.Y(e,\'a\')&&d=="4L")){6.4T=Q;e[d]()}6.4T=P}I a},2m:G(d){H a;d=E.1h.4M(d||17.1h||{});H b=d.N.2p(".");d.N=b[0];H c=E.K(6,"2A")&&E.K(6,"2A")[d.N],3m=1C.3x.2s.3c(1k,1);3m.4Z(d);M(H j 1j c){3m[0].4P=c[j];3m[0].K=c[j].K;9(!b[1]||c[j].N==b[1]){H e=c[j].15(6,3m);9(a!==P)a=e;9(e===P){d.2B();d.3L()}}}9(E.V.1g)d.2o=d.2B=d.3L=d.4P=d.K=S;I a},4M:G(c){H a=c;c=E.1i({},a);c.2B=G(){9(a.2B)a.2B();a.7I=P};c.3L=G(){9(a.3L)a.3L();a.7H=Q};9(!c.2o&&c.64)c.2o=c.64;9(E.V.1H&&c.2o.1z==3)c.2o=a.2o.14;9(!c.4H&&c.4G)c.4H=c.4G==c.2o?c.7E:c.4G;9(c.63==S&&c.62!=S){H e=U.35,b=U.1K;c.63=c.62+(e&&e.2D||b.2D||0);c.7C=c.7B+(e&&e.2z||b.2z||0)}9(!c.3R&&(c.60||c.5Z))c.3R=c.60||c.5Z;9(!c.5Y&&c.5W)c.5Y=c.5W;9(!c.3R&&c.2y)c.3R=(c.2y&1?1:(c.2y&2?3:(c.2y&4?2:0)));I c}};E.1b.1i({3Q:G(c,a,b){I c=="5V"?6.2P(c,a,b):6.O(G(){E.1h.1f(6,c,b||a,b&&a)})},2P:G(d,b,c){I 6.O(G(){E.1h.1f(6,d,G(a){E(6).5U(a);I(c||b).15(6,1k)},c&&b)})},5U:G(a,b){I 6.O(G(){E.1h.2e(6,a,b)})},1L:G(c,a,b){I 6.O(G(){E.1h.1L(c,a,6,Q,b)})},7y:G(c,a,b){9(6[0])I E.1h.1L(c,a,6[0],P,b)},25:G(){H a=1k;I 6.4L(G(e){6.4E=0==6.4E?1:0;e.2B();I a[6.4E].15(6,[e])||P})},7x:G(f,g){G 4x(e){H p=e.4H;1Y(p&&p!=6)2c{p=p.14}27(e){p=6};9(p==6)I P;I(e.N=="4w"?f:g).15(6,[e])}I 6.4w(4x).5S(4x)},2d:G(f){5R();9(E.3W)f.15(U,[E]);J E.3i.1a(G(){I f.15(6,[E])});I 6}});E.1i({3W:P,3i:[],2d:G(){9(!E.3W){E.3W=Q;9(E.3i){E.O(E.3i,G(){6.15(U)});E.3i=S}9(E.V.39||E.V.3a)U.4O("5Q",E.2d,P);9(!17.7v.L)E(17).37(G(){E("#4C").2e()})}}});E.O(("7u,7o,37,7n,6n,5V,4L,7m,"+"7l,7j,7i,4w,5S,7p,24,"+"50,7q,7r,7s,3U").2p(","),G(i,o){E.1b[o]=G(f){I f?6.3Q(o,f):6.1L(o)}});H x=P;G 5R(){9(x)I;x=Q;9(E.V.39||E.V.3a)U.4R("5Q",E.2d,P);J 9(E.V.1g){U.7e("<7d"+"7c 1T=4C 7b=Q "+"3g=//:><\\/1P>");H a=U.42("4C");9(a)a.5O=G(){9(6.2C!="1l")I;E.2d()};a=S}J 9(E.V.1H)E.4B=41(G(){9(U.2C=="5N"||U.2C=="1l"){4A(E.4B);E.4B=S;E.2d()}},10);E.1h.1f(17,"37",E.2d)}E.1b.1i({37:G(g,d,c){9(E.1p(g))I 6.3Q("37",g);H e=g.1e(" ");9(e>=0){H i=g.2s(e,g.L);g=g.2s(0,e)}c=c||G(){};H f="4F";9(d)9(E.1p(d)){c=d;d=S}J{d=E.3f(d);f="5M"}H h=6;E.3w({1u:g,N:f,K:d,1l:G(a,b){9(b=="1E"||b=="5L")h.4n(i?E("<1r/>").3e(a.4p.1o(/<1P(.|\\s)*?\\/1P>/g,"")).1X(i):a.4p);58(G(){h.O(c,[a.4p,b,a])},13)}});I 6},7a:G(){I E.3f(6.5K())},5K:G(){I 6.1W(G(){I E.Y(6,"3B")?E.2h(6.79):6}).1A(G(){I 6.2J&&!6.36&&(6.2K||/24|6a/i.12(6.Y)||/2t|1O|51/i.12(6.N))}).1W(G(i,c){H b=E(6).2V();I b==S?S:b.1d==1C?E.1W(b,G(i,a){I{2J:c.2J,1N:a}}):{2J:c.2J,1N:b}}).28()}});E.O("5J,5I,5H,6e,5G,5F".2p(","),G(i,o){E.1b[o]=G(f){I 6.3Q(o,f)}});H B=(1q 3v).3u();E.1i({28:G(d,b,a,c){9(E.1p(b)){a=b;b=S}I E.3w({N:"4F",1u:d,K:b,1E:a,1Z:c})},78:G(b,a){I E.28(b,S,a,"1P")},77:G(c,b,a){I E.28(c,b,a,"3S")},76:G(d,b,a,c){9(E.1p(b)){a=b;b={}}I E.3w({N:"5M",1u:d,K:b,1E:a,1Z:c})},80:G(a){E.1i(E.4u,a)},4u:{23:Q,N:"4F",2H:0,5E:"75/x-73-3B-72",6l:Q,3h:Q,K:S},4b:{},3w:G(s){H f,48=/=(\\?|%3F)/g,1s,K;s=E.1i(Q,s,E.1i(Q,{},E.4u,s));9(s.K&&s.6l&&1n s.K!="1M")s.K=E.3f(s.K);H q=s.1u.1e("?");9(q>-1){s.K=(s.K?s.K+"&":"")+s.1u.2s(q+1);s.1u=s.1u.2s(0,q)}9(s.1Z=="5b"){9(!s.K||!s.K.1U(48))s.K=(s.K?s.K+"&":"")+(s.5b||"6X")+"=?";s.1Z="3S"}9(s.1Z=="3S"&&s.K&&s.K.1U(48)){f="5b"+B++;s.K=s.K.1o(48,"="+f);s.1Z="1P";17[f]=G(a){K=a;1E();17[f]=11;2c{2G 17[f]}27(e){}}}9(s.1Z=="1P"&&s.1I==S)s.1I=P;9(s.1I===P&&s.N.2F()=="28")s.K=(s.K?s.K+"&":"")+"56="+(1q 3v()).3u();9(s.K&&s.N.2F()=="28"){s.1u+="?"+s.K;s.K=S}9(s.23&&!E.5a++)E.1h.1L("5J");9(!s.1u.1e("6W")&&s.1Z=="1P"){H h=U.4q("8g")[0];H g=U.5r("1P");g.3g=s.1u;9(!f&&(s.1E||s.1l)){H j=P;g.9Q=g.5O=G(){9(!j&&(!6.2C||6.2C=="5N"||6.2C=="1l")){j=Q;1E();1l();h.3k(g)}}}h.57(g);I}H k=P;H i=17.6V?1q 6V("9O.9N"):1q 6U();i.9M(s.N,s.1u,s.3h);9(s.K)i.5B("9J-9H",s.5E);9(s.5A)i.5B("9G-5z-9F",E.4b[s.1u]||"9E, 9C 9B 9z 5v:5v:5v 9y");i.5B("X-9w-9v","6U");9(s.6R)s.6R(i);9(s.23)E.1h.1L("5F",[i,s]);H c=G(a){9(!k&&i&&(i.2C==4||a=="2H")){k=Q;9(d){4A(d);d=S}1s=a=="2H"&&"2H"||!E.6Q(i)&&"3U"||s.5A&&E.6O(i,s.1u)&&"5L"||"1E";9(1s=="1E"){2c{K=E.6N(i,s.1Z)}27(e){1s="5t"}}9(1s=="1E"){H b;2c{b=i.5i("6M-5z")}27(e){}9(s.5A&&b)E.4b[s.1u]=b;9(!f)1E()}J E.5s(s,i,1s);1l();9(s.3h)i=S}};9(s.3h){H d=41(c,13);9(s.2H>0)58(G(){9(i){i.9p();9(!k)c("2H")}},s.2H)}2c{i.9n(s.K)}27(e){E.5s(s,i,S,e)}9(!s.3h)c();I i;G 1E(){9(s.1E)s.1E(K,1s);9(s.23)E.1h.1L("5G",[i,s])}G 1l(){9(s.1l)s.1l(i,1s);9(s.23)E.1h.1L("5H",[i,s]);9(s.23&&!--E.5a)E.1h.1L("5I")}},5s:G(s,a,b,e){9(s.3U)s.3U(a,b,e);9(s.23)E.1h.1L("6e",[a,s,e])},5a:0,6Q:G(r){2c{I!r.1s&&9l.9k=="52:"||(r.1s>=6K&&r.1s<9j)||r.1s==6J||E.V.1H&&r.1s==11}27(e){}I P},6O:G(a,c){2c{H b=a.5i("6M-5z");I a.1s==6J||b==E.4b[c]||E.V.1H&&a.1s==11}27(e){}I P},6N:G(r,b){H c=r.5i("9i-N");H d=b=="6y"||!b&&c&&c.1e("6y")>=0;H a=d?r.9h:r.4p;9(d&&a.35.34=="5t")6E"5t";9(b=="1P")E.5h(a);9(b=="3S")a=3p("("+a+")");I a},3f:G(a){H s=[];9(a.1d==1C||a.4d)E.O(a,G(){s.1a(3b(6.2J)+"="+3b(6.1N))});J M(H j 1j a)9(a[j]&&a[j].1d==1C)E.O(a[j],G(){s.1a(3b(j)+"="+3b(6))});J s.1a(3b(j)+"="+3b(a[j]));I s.65("&").1o(/%20/g,"+")}});E.1b.1i({1x:G(b,a){I b?6.1V({1G:"1x",2E:"1x",1v:"1x"},b,a):6.1A(":1O").O(G(){6.R.19=6.3d?6.3d:"";9(E.18(6,"19")=="2j")6.R.19="2U"}).1B()},1w:G(b,a){I b?6.1V({1G:"1w",2E:"1w",1v:"1w"},b,a):6.1A(":3X").O(G(){6.3d=6.3d||E.18(6,"19");9(6.3d=="2j")6.3d="2U";6.R.19="2j"}).1B()},6G:E.1b.25,25:G(a,b){I E.1p(a)&&E.1p(b)?6.6G(a,b):a?6.1V({1G:"25",2E:"25",1v:"25"},a,b):6.O(G(){E(6)[E(6).3j(":1O")?"1x":"1w"]()})},9c:G(b,a){I 6.1V({1G:"1x"},b,a)},9a:G(b,a){I 6.1V({1G:"1w"},b,a)},99:G(b,a){I 6.1V({1G:"25"},b,a)},98:G(b,a){I 6.1V({1v:"1x"},b,a)},97:G(b,a){I 6.1V({1v:"1w"},b,a)},95:G(c,a,b){I 6.1V({1v:a},c,b)},1V:G(j,h,g,f){H i=E.6C(h,g,f);I 6[i.3I===P?"O":"3I"](G(){i=E.1i({},i);H d=E(6).3j(":1O"),3r=6;M(H p 1j j){9(j[p]=="1w"&&d||j[p]=="1x"&&!d)I E.1p(i.1l)&&i.1l.15(6);9(p=="1G"||p=="2E"){i.19=E.18(6,"19");i.2N=6.R.2N}}9(i.2N!=S)6.R.2N="1O";i.3H=E.1i({},j);E.O(j,G(c,a){H e=1q E.2w(3r,i,c);9(/25|1x|1w/.12(a))e[a=="25"?d?"1x":"1w":a](j);J{H b=a.3z().1U(/^([+-]?)([\\d.]+)(.*)$/),1Q=e.2b(Q)||0;9(b){1B=3K(b[2]),2k=b[3]||"2I";9(2k!="2I"){3r.R[c]=1B+2k;1Q=(1B/e.2b(Q))*1Q;3r.R[c]=1Q+2k}9(b[1])1B=((b[1]=="-"?-1:1)*1B)+1Q;e.3J(1Q,1B,2k)}J e.3J(1Q,a,"")}});I Q})},3I:G(a,b){9(!b){b=a;a="2w"}9(!1k.L)I A(6[0],a);I 6.O(G(){9(b.1d==1C)A(6,a,b);J{A(6,a).1a(b);9(A(6,a).L==1)b.15(6)}})},9f:G(){H a=E.2Z;I 6.O(G(){M(H i=0;i<a.L;i++)9(a[i].T==6)a.6D(i--,1)}).5p()}});H A=G(b,c,a){9(!b)I;H q=E.K(b,c+"3I");9(!q||a)q=E.K(b,c+"3I",a?E.2h(a):[]);I q};E.1b.5p=G(a){a=a||"2w";I 6.O(G(){H q=A(6,a);q.44();9(q.L)q[0].15(6)})};E.1i({6C:G(b,a,c){H d=b&&b.1d==8Z?b:{1l:c||!c&&a||E.1p(b)&&b,2a:b,3E:c&&a||a&&a.1d!=8Y&&a};d.2a=(d.2a&&d.2a.1d==4X?d.2a:{8X:8W,8U:6K}[d.2a])||9o;d.3C=d.1l;d.1l=G(){E(6).5p();9(E.1p(d.3C))d.3C.15(6)};I d},3E:{6I:G(p,n,b,a){I b+a*p},5q:G(p,n,b,a){I((-32.8S(p*32.8R)/2)+0.5)*a+b}},2Z:[],2w:G(b,c,a){6.W=c;6.T=b;6.1c=a;9(!c.3A)c.3A={}}});E.2w.3x={4j:G(){9(6.W.2M)6.W.2M.15(6.T,[6.2l,6]);(E.2w.2M[6.1c]||E.2w.2M.6w)(6);9(6.1c=="1G"||6.1c=="2E")6.T.R.19="2U"},2b:G(a){9(6.T[6.1c]!=S&&6.T.R[6.1c]==S)I 6.T[6.1c];H r=3K(E.3O(6.T,6.1c,a));I r&&r>-8P?r:3K(E.18(6.T,6.1c))||0},3J:G(c,b,e){6.5n=(1q 3v()).3u();6.1Q=c;6.1B=b;6.2k=e||6.2k||"2I";6.2l=6.1Q;6.4g=6.4i=0;6.4j();H f=6;G t(){I f.2M()}t.T=6.T;E.2Z.1a(t);9(E.2Z.L==1){H d=41(G(){H a=E.2Z;M(H i=0;i<a.L;i++)9(!a[i]())a.6D(i--,1);9(!a.L)4A(d)},13)}},1x:G(){6.W.3A[6.1c]=E.1y(6.T.R,6.1c);6.W.1x=Q;6.3J(0,6.2b());9(6.1c=="2E"||6.1c=="1G")6.T.R[6.1c]="8N";E(6.T).1x()},1w:G(){6.W.3A[6.1c]=E.1y(6.T.R,6.1c);6.W.1w=Q;6.3J(6.2b(),0)},2M:G(){H t=(1q 3v()).3u();9(t>6.W.2a+6.5n){6.2l=6.1B;6.4g=6.4i=1;6.4j();6.W.3H[6.1c]=Q;H a=Q;M(H i 1j 6.W.3H)9(6.W.3H[i]!==Q)a=P;9(a){9(6.W.19!=S){6.T.R.2N=6.W.2N;6.T.R.19=6.W.19;9(E.18(6.T,"19")=="2j")6.T.R.19="2U"}9(6.W.1w)6.T.R.19="2j";9(6.W.1w||6.W.1x)M(H p 1j 6.W.3H)E.1y(6.T.R,p,6.W.3A[p])}9(a&&E.1p(6.W.1l))6.W.1l.15(6.T);I P}J{H n=t-6.5n;6.4i=n/6.W.2a;6.4g=E.3E[6.W.3E||(E.3E.5q?"5q":"6I")](6.4i,n,0,1,6.W.2a);6.2l=6.1Q+((6.1B-6.1Q)*6.4g);6.4j()}I Q}};E.2w.2M={2D:G(a){a.T.2D=a.2l},2z:G(a){a.T.2z=a.2l},1v:G(a){E.1y(a.T.R,"1v",a.2l)},6w:G(a){a.T.R[a.1c]=a.2l+a.2k}};E.1b.6m=G(){H c=0,3y=0,T=6[0],5m;9(T)8L(E.V){H b=E.18(T,"2W")=="4D",1D=T.14,21=T.21,2Q=T.3N,5y=1H&&!b&&3q(4f)<8J;9(T.6v){5x=T.6v();1f(5x.1R+32.2Y(2Q.35.2D,2Q.1K.2D),5x.3y+32.2Y(2Q.35.2z,2Q.1K.2z));9(1g){H d=E("4n").18("9L");d=(d=="8G"||E.5f&&3q(4f)>=7)&&2||d;1f(-d,-d)}}J{1f(T.5j,T.5C);1Y(21){1f(21.5j,21.5C);9(39&&/^t[d|h]$/i.12(1D.34)||!5y)d(21);9(5y&&!b&&E.18(21,"2W")=="4D")b=Q;21=21.21}1Y(1D.34&&/^1K|4n$/i.12(1D.34)){9(/^8D|1F-9R.*$/i.12(E.18(1D,"19")))1f(-1D.2D,-1D.2z);9(39&&E.18(1D,"2N")!="3X")d(1D);1D=1D.14}9(1H&&b)1f(-2Q.1K.5j,-2Q.1K.5C)}5m={3y:3y,1R:c}}I 5m;G d(a){1f(E.18(a,"8C"),E.18(a,"9T"))}G 1f(l,t){c+=3q(l)||0;3y+=3q(t)||0}}})();',62,615,'||||||this|||if|||||||||||||||||||||||||||||||||function|var|return|else|data|length|for|type|each|false|true|style|null|elem|document|browser|options||nodeName|||undefined|test||parentNode|apply|jQuery|window|css|display|push|fn|prop|constructor|indexOf|add|msie|event|extend|in|arguments|complete|className|typeof|replace|isFunction|new|div|status|firstChild|url|opacity|hide|show|attr|nodeType|filter|end|Array|parent|success|table|height|safari|cache|tbody|body|trigger|string|value|hidden|script|start|left|merge|id|match|animate|map|find|while|dataType||offsetParent|break|global|select|toggle|toUpperCase|catch|get|selected|duration|cur|try|ready|remove|done|al|makeArray|nextSibling|none|unit|now|handle||target|split|swap|guid|slice|text|stack|pushStack|fx|tb|button|scrollTop|events|preventDefault|readyState|scrollLeft|width|toLowerCase|delete|timeout|px|name|checked|exec|step|overflow|ret|one|doc|nth|inArray|grep|block|val|position|childNodes|max|timers|removeData|rl|Math|trim|tagName|documentElement|disabled|load|insertBefore|mozilla|opera|encodeURIComponent|call|oldblock|append|param|src|async|readyList|is|removeChild|color|args|last|first|eval|parseInt|self|domManip|has|getTime|Date|ajax|prototype|top|toString|orig|form|old|innerHTML|easing||multiFilter|curAnim|queue|custom|parseFloat|stopPropagation|defaultView|ownerDocument|curCSS|getComputedStyle|bind|which|json|String|error|static|isReady|visible|oWidth|oHeight|on|setInterval|getElementById|currentStyle|shift|ol|child|RegExp|jsre|input|isXMLDoc|lastModified|previousSibling|jquery|dir|version|pos|styleFloat|state|update|tr|getAttribute|el|html|empty|responseText|getElementsByTagName|float|radio|runtimeStyle|ajaxSettings|visibility|mouseover|handleHover|getPropertyValue|selectedIndex|clearInterval|safariTimer|__ie_init|absolute|lastToggle|GET|fromElement|relatedTarget|clean|index|init|click|fix|evt|removeEventListener|handler|andSelf|addEventListener|cloneNode|triggered|nodeIndex|unique|classFilter|Number|prevObject|unshift|submit|password|file|after|removeAttribute|expr|_|appendChild|setTimeout|client|active|jsonp|sibling|win|deep|boxModel|cssFloat|globalEval|getResponseHeader|offsetLeft|lastChild|wrapAll|results|startTime|props|dequeue|swing|createElement|handleError|parsererror|checkbox|00|object|box|safari2|Modified|ifModified|setRequestHeader|offsetTop|col|contentType|ajaxSend|ajaxSuccess|ajaxComplete|ajaxStop|ajaxStart|serializeArray|notmodified|POST|loaded|onreadystatechange|appendTo|DOMContentLoaded|bindReady|mouseout|not|unbind|unload|ctrlKey|removeAttr|metaKey|keyCode|charCode|Width|clientX|pageX|srcElement|join|outerHTML|substr|parse|zoom|textarea|reset|image|odd|ajaxError|even|before|quickClass|quickID|quickChild|prepend|processData|offset|scroll|execScript|contents|uuid|continue|textContent|clone|setArray|getBoundingClientRect|_default|nodeValue|xml|100|alpha|href|speed|splice|throw|createTextNode|_toggle|replaceWith|linear|304|200|colgroup|Last|httpData|httpNotModified|fl|httpSuccess|beforeSend|fieldset|webkit|XMLHttpRequest|ActiveXObject|http|callback|img|br|attributes|abbr|urlencoded|www|pixelLeft|application|post|getJSON|getScript|elements|serialize|defer|ipt|scr|write|clientWidth|hasClass|clientHeight|mousemove|mouseup|relative|mousedown|dblclick|resize|focus|change|keydown|keypress|keyup|FORM|blur|frames|right|hover|triggerHandler|offsetWidth|offsetHeight|clientY|pageY|border|toElement|padding|Left|cancelBubble|returnValue|Right|Bottom|Top|detachEvent|attachEvent|substring|animated|line|header|weight|font|enabled|innerText|contains|only|eq|gt|ajaxSetup|lt|size|uFFFF|u0128|417|inner|Height|toggleClass|removeClass|addClass|replaceAll|insertAfter|prependTo|contentWindow|contentDocument|head|wrap|iframe|children|noConflict|siblings|prevAll|nextAll|prev|wrapInner|next|parents|maxLength|maxlength|readOnly|Boolean|readonly|class|htmlFor|CSS1Compat|compatMode|compatible|borderLeftWidth|inline|ie|ra|medium|it|rv|522|userAgent|with|navigator|1px|concat|10000|array|PI|cos|ig|fast|NaN|600|slow|Function|Object|setAttribute|reverse|changed|be|can|fadeTo|property|fadeOut|fadeIn|slideToggle|slideUp|getAttributeNode|slideDown|method|action|stop|cssText|responseXML|content|300|protocol|location|option|send|400|abort|th|td|cap|colg|tfoot|With|Requested|thead|GMT|1970|leg|Jan|01|opt|Thu|Since|If|Type|area|Content|hr|borderWidth|open|XMLHTTP|Microsoft|meta|onload|row|link|borderTopWidth|specified'.split('|'),0,{}))
281
+ </script>
282
+ <script type="text/javascript">
283
+ jQuery.cookie = function(name, value, options) {
284
+ if (typeof value != 'undefined') { // name and value given, set cookie
285
+ options = options || {};
286
+ if (value === null) {
287
+ value = '';
288
+ options.expires = -1;
289
+ }
290
+ var expires = '';
291
+ if (options.expires && (typeof options.expires == 'number' || options.expires.toUTCString)) {
292
+ var date;
293
+ if (typeof options.expires == 'number') {
294
+ date = new Date();
295
+ date.setTime(date.getTime() + (options.expires * 24 * 60 * 60 * 1000));
296
+ } else {
297
+ date = options.expires;
298
+ }
299
+ expires = '; expires=' + date.toUTCString(); // use expires attribute, max-age is not supported by IE
300
+ }
301
+ var path = options.path ? '; path=' + options.path : '';
302
+ var domain = options.domain ? '; domain=' + options.domain : '';
303
+ var secure = options.secure ? '; secure' : '';
304
+ document.cookie = [name, '=', encodeURIComponent(value), expires, path, domain, secure].join('');
305
+ } else { // only name given, get cookie
306
+ var cookieValue = null;
307
+ if (document.cookie && document.cookie != '') {
308
+ var cookies = document.cookie.split(';');
309
+ for (var i = 0; i < cookies.length; i++) {
310
+ var cookie = jQuery.trim(cookies[i]);
311
+ // Does this cookie string begin with the name we want?
312
+ if (cookie.substring(0, name.length + 1) == (name + '=')) {
313
+ cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
314
+ break;
315
+ }
316
+ }
317
+ }
318
+ return cookieValue;
319
+ }
320
+ };
321
+ </script>
322
+ <script type="text/javascript">
323
+ (function($) {
324
+
325
+ $.extend($.fn, {
326
+ swapClass: function(c1, c2) {
327
+ var c1Elements = this.filter('.' + c1);
328
+ this.filter('.' + c2).removeClass(c2).addClass(c1);
329
+ c1Elements.removeClass(c1).addClass(c2);
330
+ return this;
331
+ },
332
+ replaceClass: function(c1, c2) {
333
+ return this.filter('.' + c1).removeClass(c1).addClass(c2).end();
334
+ },
335
+ hoverClass: function(className) {
336
+ className = className || "hover";
337
+ return this.hover(function() {
338
+ $(this).addClass(className);
339
+ }, function() {
340
+ $(this).removeClass(className);
341
+ });
342
+ },
343
+ heightToggle: function(animated, callback) {
344
+ animated ?
345
+ this.animate({ height: "toggle" }, animated, callback) :
346
+ this.each(function(){
347
+ jQuery(this)[ jQuery(this).is(":hidden") ? "show" : "hide" ]();
348
+ if(callback)
349
+ callback.apply(this, arguments);
350
+ });
351
+ },
352
+ heightHide: function(animated, callback) {
353
+ if (animated) {
354
+ this.animate({ height: "hide" }, animated, callback);
355
+ } else {
356
+ this.hide();
357
+ if (callback)
358
+ this.each(callback);
359
+ }
360
+ },
361
+ prepareBranches: function(settings) {
362
+ if (!settings.prerendered) {
363
+ // mark last tree items
364
+ this.filter(":last-child:not(ul)").addClass(CLASSES.last);
365
+ // collapse whole tree, or only those marked as closed, anyway except those marked as open
366
+ this.filter((settings.collapsed ? "" : "." + CLASSES.closed) + ":not(." + CLASSES.open + ")").find(">ul").hide();
367
+ }
368
+ // return all items with sublists
369
+ return this.filter(":has(>ul)");
370
+ },
371
+ applyClasses: function(settings, toggler) {
372
+ this.filter(":has(>ul):not(:has(>a))").find(">span").click(function(event) {
373
+ toggler.apply($(this).next());
374
+ }).add( $("a", this) ).hoverClass();
375
+
376
+ if (!settings.prerendered) {
377
+ // handle closed ones first
378
+ this.filter(":has(>ul:hidden)")
379
+ .addClass(CLASSES.expandable)
380
+ .replaceClass(CLASSES.last, CLASSES.lastExpandable);
381
+
382
+ // handle open ones
383
+ this.not(":has(>ul:hidden)")
384
+ .addClass(CLASSES.collapsable)
385
+ .replaceClass(CLASSES.last, CLASSES.lastCollapsable);
386
+
387
+ // create hitarea
388
+ this.prepend("<div class=\"" + CLASSES.hitarea + "\"/>").find("div." + CLASSES.hitarea).each(function() {
389
+ var classes = "";
390
+ $.each($(this).parent().attr("class").split(" "), function() {
391
+ classes += this + "-hitarea ";
392
+ });
393
+ $(this).addClass( classes );
394
+ });
395
+ }
396
+
397
+ // apply event to hitarea
398
+ this.find("div." + CLASSES.hitarea).click( toggler );
399
+ },
400
+ treeview: function(settings) {
401
+
402
+ settings = $.extend({
403
+ cookieId: "treeview"
404
+ }, settings);
405
+
406
+ if (settings.add) {
407
+ return this.trigger("add", [settings.add]);
408
+ }
409
+
410
+ if ( settings.toggle ) {
411
+ var callback = settings.toggle;
412
+ settings.toggle = function() {
413
+ return callback.apply($(this).parent()[0], arguments);
414
+ };
415
+ }
416
+
417
+ // factory for treecontroller
418
+ function treeController(tree, control) {
419
+ // factory for click handlers
420
+ function handler(filter) {
421
+ return function() {
422
+ // reuse toggle event handler, applying the elements to toggle
423
+ // start searching for all hitareas
424
+ toggler.apply( $("div." + CLASSES.hitarea, tree).filter(function() {
425
+ // for plain toggle, no filter is provided, otherwise we need to check the parent element
426
+ return filter ? $(this).parent("." + filter).length : true;
427
+ }) );
428
+ return false;
429
+ };
430
+ }
431
+ // click on first element to collapse tree
432
+ $("a:eq(0)", control).click( handler(CLASSES.collapsable) );
433
+ // click on second to expand tree
434
+ $("a:eq(1)", control).click( handler(CLASSES.expandable) );
435
+ // click on third to toggle tree
436
+ $("a:eq(2)", control).click( handler() );
437
+ }
438
+
439
+ // handle toggle event
440
+ function toggler() {
441
+ $(this)
442
+ .parent()
443
+ // swap classes for hitarea
444
+ .find(">.hitarea")
445
+ .swapClass( CLASSES.collapsableHitarea, CLASSES.expandableHitarea )
446
+ .swapClass( CLASSES.lastCollapsableHitarea, CLASSES.lastExpandableHitarea )
447
+ .end()
448
+ // swap classes for parent li
449
+ .swapClass( CLASSES.collapsable, CLASSES.expandable )
450
+ .swapClass( CLASSES.lastCollapsable, CLASSES.lastExpandable )
451
+ // find child lists
452
+ .find( ">ul" )
453
+ // toggle them
454
+ .heightToggle( settings.animated, settings.toggle );
455
+ if ( settings.unique ) {
456
+ $(this).parent()
457
+ .siblings()
458
+ // swap classes for hitarea
459
+ .find(">.hitarea")
460
+ .replaceClass( CLASSES.collapsableHitarea, CLASSES.expandableHitarea )
461
+ .replaceClass( CLASSES.lastCollapsableHitarea, CLASSES.lastExpandableHitarea )
462
+ .end()
463
+ .replaceClass( CLASSES.collapsable, CLASSES.expandable )
464
+ .replaceClass( CLASSES.lastCollapsable, CLASSES.lastExpandable )
465
+ .find( ">ul" )
466
+ .heightHide( settings.animated, settings.toggle );
467
+ }
468
+ }
469
+
470
+ function serialize() {
471
+ function binary(arg) {
472
+ return arg ? 1 : 0;
473
+ }
474
+ var data = [];
475
+ branches.each(function(i, e) {
476
+ data[i] = $(e).is(":has(>ul:visible)") ? 1 : 0;
477
+ });
478
+ $.cookie(settings.cookieId, data.join("") );
479
+ }
480
+
481
+ function deserialize() {
482
+ var stored = $.cookie(settings.cookieId);
483
+ if ( stored ) {
484
+ var data = stored.split("");
485
+ branches.each(function(i, e) {
486
+ $(e).find(">ul")[ parseInt(data[i]) ? "show" : "hide" ]();
487
+ });
488
+ }
489
+ }
490
+
491
+ // add treeview class to activate styles
492
+ this.addClass("treeview");
493
+
494
+ // prepare branches and find all tree items with child lists
495
+ var branches = this.find("li").prepareBranches(settings);
496
+
497
+ switch(settings.persist) {
498
+ case "cookie":
499
+ var toggleCallback = settings.toggle;
500
+ settings.toggle = function() {
501
+ serialize();
502
+ if (toggleCallback) {
503
+ toggleCallback.apply(this, arguments);
504
+ }
505
+ };
506
+ deserialize();
507
+ break;
508
+ case "location":
509
+ var current = this.find("a").filter(function() { return this.href.toLowerCase() == location.href.toLowerCase(); });
510
+ if ( current.length ) {
511
+ current.addClass("selected").parents("ul, li").add( current.next() ).show();
512
+ }
513
+ break;
514
+ }
515
+
516
+ branches.applyClasses(settings, toggler);
517
+
518
+ // if control option is set, create the treecontroller and show it
519
+ if ( settings.control ) {
520
+ treeController(this, settings.control);
521
+ $(settings.control).show();
522
+ }
523
+
524
+ return this.bind("add", function(event, branches) {
525
+ $(branches).prev()
526
+ .removeClass(CLASSES.last)
527
+ .removeClass(CLASSES.lastCollapsable)
528
+ .removeClass(CLASSES.lastExpandable)
529
+ .find(">.hitarea")
530
+ .removeClass(CLASSES.lastCollapsableHitarea)
531
+ .removeClass(CLASSES.lastExpandableHitarea);
532
+ $(branches).find("li").andSelf().prepareBranches(settings).applyClasses(settings, toggler);
533
+ });
534
+ }
535
+ });
536
+
537
+ var CLASSES = $.fn.treeview.classes = {
538
+ open: "open",
539
+ closed: "closed",
540
+ expandable: "expandable",
541
+ expandableHitarea: "expandable-hitarea",
542
+ lastExpandableHitarea: "lastExpandable-hitarea",
543
+ collapsable: "collapsable",
544
+ collapsableHitarea: "collapsable-hitarea",
545
+ lastCollapsableHitarea: "lastCollapsable-hitarea",
546
+ lastCollapsable: "lastCollapsable",
547
+ lastExpandable: "lastExpandable",
548
+ last: "last",
549
+ hitarea: "hitarea"
550
+ };
551
+
552
+ $.fn.Treeview = $.fn.treeview;
553
+
554
+ })(jQuery);
555
+ </script>
556
+ <script type="text/javascript">
557
+ $(document).ready(function(){
558
+ $("#tree").treeview({
559
+ control: "#treecontrol",
560
+ animated: "fast",
561
+ collapsed: true,
562
+ toggle: function() {
563
+ window.console && console.log("%o was toggled", this);
564
+ }
565
+ });
566
+
567
+ $("#content").css("padding-top", $("#header").height());
568
+ });
569
+ </script>
570
+
571
+ </head>
572
+ <body>
573
+ <div id="container">
574
+ <div id="header">
575
+ <div class="time">20.93 s</div>
576
+ <h1>discovery_interface: <strong><span class="total">18 total, </span><span class="error">3 error, </span><span class="ignored">3 ignored, </span><span class="passed">12 passed</span></strong>
577
+ </h1>
578
+ <div id="treecontrol">
579
+ <ul>
580
+ <li>
581
+ <a title="Collapse the entire tree below" href="#">Collapse</a>
582
+ |
583
+ </li>
584
+ <li>
585
+ <a title="Expand the entire tree below" href="#">Expand</a>
586
+ </li>
587
+ </ul>
588
+ </div>
589
+ </div>
590
+ <div id="content">
591
+ <ul id="tree">
592
+ <li xmlns="" class="level top failed open">
593
+ <span><em class="time">
594
+ <div class="time">20.93 s</div>
595
+ </em>Feature: Discovery Interface</span>
596
+ <ul>
597
+ <li class="level suite failed open">
598
+ <span><em class="time">
599
+ <div class="time">20.93 s</div>
600
+ </em>Scenario Outline: Retrieving all OCCI Categories supported by the OCCI Server</span>
601
+ <ul>
602
+ <li class="level suite failed open">
603
+ <span><em class="time">
604
+ <div class="time">20.93 s</div>
605
+ </em>Scenarios: </span>
606
+ <ul>
607
+ <li class="level suite failed open">
608
+ <span><em class="time">
609
+ <div class="time">2.80 s</div>
610
+ </em>Scenario: Line: 18</span>
611
+ <ul>
612
+ <li class="level test">
613
+ <span><em class="time">
614
+ <div class="time">11 ms</div>
615
+ </em><em class="status">passed</em>Given I use endpoint http://141.5.99.69/</span>
616
+ </li>
617
+ <li class="level test">
618
+ <span><em class="time">
619
+ <div class="time">12 ms</div>
620
+ </em><em class="status">passed</em>And as protocol http</span>
621
+ </li>
622
+ <li class="level test">
623
+ <span><em class="time">
624
+ <div class="time">12 ms</div>
625
+ </em><em class="status">passed</em>And the clients accept type is text/occi</span>
626
+ </li>
627
+ <li class="level test">
628
+ <span><em class="time">
629
+ <div class="time">921 ms</div>
630
+ </em><em class="status">passed</em>When OCCI Client request all OCCI Categories supported by the OCCI Server</span>
631
+ </li>
632
+ <li class="level test failed open">
633
+ <span><em class="time">
634
+ <div class="time">922 ms</div>
635
+ </em><em class="status">error</em>Then the Client should have the response code 200</span>
636
+ <ul>
637
+ <li class="text">
638
+ <span class="stdout"></span>
639
+ </li>
640
+ <li class="text">
641
+ <span class="stdout"> <br/></span>
642
+ </li>
643
+ <li class="text">
644
+ <span class="stdout"></span>
645
+ </li>
646
+ <li class="text">
647
+ <span class="stdout">You can implement step definitions for undefined steps with these snippets:<br/></span>
648
+ </li>
649
+ <li class="text">
650
+ <span class="stdout"></span>
651
+ </li>
652
+ <li class="text">
653
+ <span class="stdout">Then /^the Client should have the response code (\d+)$/ do |arg1|<br/></span>
654
+ </li>
655
+ <li class="text">
656
+ <span class="stdout"></span>
657
+ </li>
658
+ <li class="text">
659
+ <span class="stdout"> pending # express the regexp above with the code you wish you had<br/></span>
660
+ </li>
661
+ <li class="text">
662
+ <span class="stdout"></span>
663
+ </li>
664
+ <li class="text">
665
+ <span class="stdout">end<br/></span>
666
+ </li>
667
+ <li class="text">
668
+ <span class="stdout"></span>
669
+ </li>
670
+ <li class="text">
671
+ <span class="stderr">opening connection to 141.5.99.69...<br/></span>
672
+ </li>
673
+ </ul>
674
+ </li>
675
+ <li class="level test ignored open">
676
+ <span><em class="time">
677
+ <div class="time">923 ms</div>
678
+ </em><em class="status">ignored</em>And OCCI Client should display the OCCI Categories received from the OCCI Server</span>
679
+ <ul>
680
+ <li class="text">
681
+ <span class="stdout">Skipped step<br/></span>
682
+ </li>
683
+ </ul>
684
+ </li>
685
+ </ul>
686
+ </li>
687
+ <li class="level suite failed open">
688
+ <span><em class="time">
689
+ <div class="time">7.60 s</div>
690
+ </em>Scenario: Line: 19</span>
691
+ <ul>
692
+ <li class="level test">
693
+ <span><em class="time">
694
+ <div class="time">924 ms</div>
695
+ </em><em class="status">passed</em>Given I use endpoint http://141.5.99.69</span>
696
+ </li>
697
+ <li class="level test">
698
+ <span><em class="time">
699
+ <div class="time">924 ms</div>
700
+ </em><em class="status">passed</em>And as protocol http</span>
701
+ </li>
702
+ <li class="level test">
703
+ <span><em class="time">
704
+ <div class="time">925 ms</div>
705
+ </em><em class="status">passed</em>And the clients accept type is text/plain</span>
706
+ </li>
707
+ <li class="level test">
708
+ <span><em class="time">
709
+ <div class="time">1.61 s</div>
710
+ </em><em class="status">passed</em>When OCCI Client request all OCCI Categories supported by the OCCI Server</span>
711
+ </li>
712
+ <li class="level test failed open">
713
+ <span><em class="time">
714
+ <div class="time">1.61 s</div>
715
+ </em><em class="status">error</em>Then the Client should have the response code 200</span>
716
+ <ul>
717
+ <li class="text">
718
+ <span class="stdout"></span>
719
+ </li>
720
+ <li class="text">
721
+ <span class="stdout"> <br/></span>
722
+ </li>
723
+ <li class="text">
724
+ <span class="stdout"></span>
725
+ </li>
726
+ <li class="text">
727
+ <span class="stdout">You can implement step definitions for undefined steps with these snippets:<br/></span>
728
+ </li>
729
+ <li class="text">
730
+ <span class="stdout"></span>
731
+ </li>
732
+ <li class="text">
733
+ <span class="stdout">Then /^the Client should have the response code (\d+)$/ do |arg1|<br/></span>
734
+ </li>
735
+ <li class="text">
736
+ <span class="stdout"></span>
737
+ </li>
738
+ <li class="text">
739
+ <span class="stdout"> pending # express the regexp above with the code you wish you had<br/></span>
740
+ </li>
741
+ <li class="text">
742
+ <span class="stdout"></span>
743
+ </li>
744
+ <li class="text">
745
+ <span class="stdout">end<br/></span>
746
+ </li>
747
+ <li class="text">
748
+ <span class="stdout"></span>
749
+ </li>
750
+ </ul>
751
+ </li>
752
+ <li class="level test ignored open">
753
+ <span><em class="time">
754
+ <div class="time">1.61 s</div>
755
+ </em><em class="status">ignored</em>And OCCI Client should display the OCCI Categories received from the OCCI Server</span>
756
+ <ul>
757
+ <li class="text">
758
+ <span class="stdout">Skipped step<br/></span>
759
+ </li>
760
+ </ul>
761
+ </li>
762
+ </ul>
763
+ </li>
764
+ <li class="level suite failed open">
765
+ <span><em class="time">
766
+ <div class="time">10.53 s</div>
767
+ </em>Scenario: Line: 20</span>
768
+ <ul>
769
+ <li class="level test">
770
+ <span><em class="time">
771
+ <div class="time">1.61 s</div>
772
+ </em><em class="status">passed</em>Given I use endpoint http://46.231.128.85:8086/</span>
773
+ <ul>
774
+ <li class="text">
775
+ <span class="stdout"></span>
776
+ </li>
777
+ <li class="text">
778
+ <span class="stderr">opening connection to 46.231.128.85...<br/></span>
779
+ </li>
780
+ </ul>
781
+ </li>
782
+ <li class="level test">
783
+ <span><em class="time">
784
+ <div class="time">1.61 s</div>
785
+ </em><em class="status">passed</em>And as protocol http</span>
786
+ </li>
787
+ <li class="level test">
788
+ <span><em class="time">
789
+ <div class="time">1.61 s</div>
790
+ </em><em class="status">passed</em>And the clients accept type is text/occi</span>
791
+ </li>
792
+ <li class="level test">
793
+ <span><em class="time">
794
+ <div class="time">1.90 s</div>
795
+ </em><em class="status">passed</em>When OCCI Client request all OCCI Categories supported by the OCCI Server</span>
796
+ </li>
797
+ <li class="level test failed open">
798
+ <span><em class="time">
799
+ <div class="time">1.90 s</div>
800
+ </em><em class="status">error</em>Then the Client should have the response code 200</span>
801
+ <ul>
802
+ <li class="text">
803
+ <span class="stdout"></span>
804
+ </li>
805
+ <li class="text">
806
+ <span class="stdout"> <br/></span>
807
+ </li>
808
+ <li class="text">
809
+ <span class="stdout"></span>
810
+ </li>
811
+ <li class="text">
812
+ <span class="stdout">You can implement step definitions for undefined steps with these snippets:<br/></span>
813
+ </li>
814
+ <li class="text">
815
+ <span class="stdout"></span>
816
+ </li>
817
+ <li class="text">
818
+ <span class="stdout">Then /^the Client should have the response code (\d+)$/ do |arg1|<br/></span>
819
+ </li>
820
+ <li class="text">
821
+ <span class="stdout"></span>
822
+ </li>
823
+ <li class="text">
824
+ <span class="stdout"> pending # express the regexp above with the code you wish you had<br/></span>
825
+ </li>
826
+ <li class="text">
827
+ <span class="stdout"></span>
828
+ </li>
829
+ <li class="text">
830
+ <span class="stdout">end<br/></span>
831
+ </li>
832
+ <li class="text">
833
+ <span class="stdout"></span>
834
+ </li>
835
+ </ul>
836
+ </li>
837
+ <li class="level test ignored open">
838
+ <span><em class="time">
839
+ <div class="time">1.90 s</div>
840
+ </em><em class="status">ignored</em>And OCCI Client should display the OCCI Categories received from the OCCI Server</span>
841
+ <ul>
842
+ <li class="text">
843
+ <span class="stdout">Skipped step<br/></span>
844
+ </li>
845
+ </ul>
846
+ </li>
847
+ </ul>
848
+ </li>
849
+ </ul>
850
+ </li>
851
+ </ul>
852
+ </li>
853
+ </ul>
854
+ </li>
855
+ </ul>
856
+ </div>
857
+ </div>
858
+ <div id="footer">
859
+ <p>Generated by JetBrains RubyMine on 11.12.12 23:23</p>
860
+ </div>
861
+ </body>
862
+ </html>