zena 1.0.0 → 1.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.
- data/History.txt +28 -0
- data/README.rdoc +6 -6
- data/Rakefile +3 -0
- data/app/controllers/users_controller.rb +4 -2
- data/app/models/acl.rb +6 -0
- data/app/models/cached_page.rb +2 -1
- data/app/models/document.rb +3 -4
- data/app/models/node.rb +8 -5
- data/app/models/site.rb +1 -1
- data/app/models/template.rb +2 -2
- data/app/models/user.rb +5 -3
- data/app/views/acls/_add.rhtml +2 -1
- data/app/views/acls/_form.rhtml +15 -7
- data/app/views/acls/_li.rhtml +2 -0
- data/app/views/acls/index.rhtml +3 -1
- data/app/views/acls/show.html.erb +1 -1
- data/app/views/links/destroy.rjs +16 -2
- data/app/views/versions/destroy.rjs +1 -1
- data/app/views/zafu/default/Node-admin.zafu +1 -1
- data/bin/zena +5 -3
- data/bricks/acls/lib/bricks/acls.rb +11 -4
- data/bricks/acls/zena/migrate/20110627193757_add_allowed_mode_and_format_to_acl.rb +11 -0
- data/bricks/acls/zena/test/integration/acl_integration_test.rb +42 -0
- data/bricks/acls/zena/test/sites/erebus/acls.yml +8 -0
- data/bricks/mongrel/zena/deploy.rb +19 -0
- data/bricks/single/lib/bricks/single.rb +15 -0
- data/bricks/single/zena/init.rb +1 -0
- data/bricks/sphinx/zena/tasks.rb +1 -1
- data/bricks/static/lib/bricks/static.rb +151 -0
- data/bricks/static/zena/init.rb +1 -0
- data/bricks/static/zena/migrate/20110702010330_add_static_to_idx_templates.rb +12 -0
- data/bricks/static/zena/skins/blog/Image-edit.zafu +6 -0
- data/bricks/static/zena/skins/blog/Image.zafu +19 -0
- data/bricks/static/zena/skins/blog/Node-+index.zafu +1 -0
- data/bricks/static/zena/skins/blog/Node-+notFound.zafu +7 -0
- data/bricks/static/zena/skins/blog/Node-+search.zafu +19 -0
- data/bricks/static/zena/skins/blog/Node.zafu +66 -0
- data/bricks/static/zena/skins/blog/Post.zafu +12 -0
- data/bricks/static/zena/skins/blog/Project--kml.zafu +30 -0
- data/bricks/static/zena/skins/blog/Project.zafu +45 -0
- data/bricks/static/zena/skins/blog/comments.zafu +30 -0
- data/bricks/static/zena/skins/blog/dict.yml +11 -0
- data/bricks/static/zena/skins/blog/img/dateBg.jpg +0 -0
- data/bricks/static/zena/skins/blog/img/header.png +0 -0
- data/bricks/static/zena/skins/blog/img/mapPin.png +0 -0
- data/bricks/static/zena/skins/blog/img/menu.gif +0 -0
- data/bricks/static/zena/skins/blog/img/menuover.gif +0 -0
- data/bricks/static/zena/skins/blog/img/style.css +110 -0
- data/bricks/static/zena/test/integration/static_integration_test.rb +30 -0
- data/bricks/static/zena/test/unit/static_test.rb +33 -0
- data/bricks/zena/zena/migrate/01_base.rb +1 -2
- data/bricks/zena/zena/migrate/20110623072048_fix_cached_path_index.rb +10 -0
- data/bricks/zena/zena/migrate/20110710113731_remove_icon_field.rb +18 -0
- data/config/bricks.yml +4 -0
- data/config/deploy.rb +17 -2
- data/config/gems.yml +9 -7
- data/config/selenium.yml +38 -0
- data/lib/bricks/requirements_validation.rb +8 -2
- data/lib/gettext_strings.rb +2 -1
- data/lib/tasks/zena.rake +5 -0
- data/lib/zena/app.rb +12 -0
- data/lib/zena/console.rb +9 -1
- data/lib/zena/core_ext/string.rb +7 -2
- data/lib/zena/deploy.rb +60 -6
- data/lib/zena/deploy/app_init.rhtml +56 -0
- data/lib/zena/deploy/haproxy.cnf.rhtml +34 -0
- data/lib/zena/deploy/httpd.rhtml +6 -0
- data/lib/zena/deploy/start_stop.rhtml +35 -0
- data/lib/zena/info.rb +1 -1
- data/lib/zena/remote/connection.rb +1 -1
- data/lib/zena/site_worker.rb +9 -5
- data/lib/zena/use.rb +1 -1
- data/lib/zena/use/action.rb +2 -2
- data/lib/zena/use/ajax.rb +22 -9
- data/lib/zena/use/conditional.rb +5 -0
- data/lib/zena/use/context.rb +6 -1
- data/lib/zena/use/dates.rb +17 -2
- data/lib/zena/use/display.rb +14 -3
- data/lib/zena/use/forms.rb +37 -47
- data/lib/zena/use/html_tags.rb +3 -0
- data/lib/zena/use/node_context.rb +17 -17
- data/lib/zena/use/rendering.rb +1 -1
- data/lib/zena/use/urls.rb +11 -2
- data/lib/zena/use/zafu_attributes.rb +1 -0
- data/lib/zena/use/zafu_safe_definitions.rb +16 -1
- data/lib/zena/use/zafu_templates.rb +39 -24
- data/lib/zena/use/zazen.rb +1 -0
- data/locale/de/LC_MESSAGES/zena.mo +0 -0
- data/locale/de/zena.po +105 -89
- data/locale/en/LC_MESSAGES/zena.mo +0 -0
- data/locale/en/zena.mo +0 -0
- data/locale/en/zena.po +188 -253
- data/locale/fr/LC_MESSAGES/zena.mo +0 -0
- data/locale/fr/zena.mo +0 -0
- data/locale/fr/zena.po +200 -257
- data/locale/zena.pot +95 -85
- data/public/javascripts/zena.js +2 -2
- data/test/fixtures/files/{Node-test.zafu → TestNode.zafu} +206 -4
- data/test/functional/nodes_controller_test.rb +2 -2
- data/test/integration/navigation_test.rb +9 -3
- data/test/integration/query_node/basic.yml +4 -4
- data/test/integration/query_node/filters.yml +2 -2
- data/test/integration/zafu_compiler/ajax.yml +6 -6
- data/test/integration/zafu_compiler/basic.yml +1 -1
- data/test/integration/zafu_compiler/calendar.yml +4 -3
- data/test/integration/zafu_compiler/conditional.yml +3 -10
- data/test/integration/zafu_compiler/context.yml +1 -1
- data/test/integration/zafu_compiler/dates.yml +9 -1
- data/test/integration/zafu_compiler/display.yml +7 -1
- data/test/integration/zafu_compiler/eval.yml +12 -46
- data/test/integration/zafu_compiler/forms.yml +1 -1
- data/test/integration/zafu_compiler/query.yml +2 -2
- data/test/integration/zafu_compiler/relations.yml +19 -9
- data/test/integration/zafu_compiler/roles.yml +12 -0
- data/test/integration/zafu_compiler/safe_definitions.yml +1 -1
- data/test/integration/zafu_compiler/urls.yml +13 -5
- data/test/integration/zafu_compiler/version.yml +6 -0
- data/test/integration/zafu_compiler/zafu_attributes.yml +4 -4
- data/test/integration/zafu_compiler_test.rb +1 -1
- data/test/selenium.readme +8 -0
- data/test/selenium/Add/0setup.rsel +12 -0
- data/test/selenium/Add/add1.rsel +22 -0
- data/test/selenium/Add/add2.rsel +22 -0
- data/test/selenium/Add/add3.rsel +22 -0
- data/test/selenium/Drop/0setup.rsel +12 -0
- data/test/selenium/Drop/drop1.rsel +25 -0
- data/test/selenium/Drop/drop2.rsel +25 -0
- data/test/selenium/Drop/drop3.rsel +51 -0
- data/test/selenium/Drop/drop4.rsel +44 -0
- data/test/selenium/Drop/drop5.rsel +16 -0
- data/test/selenium/Edit/0setup.rsel +12 -0
- data/test/selenium/Edit/edit1.rsel +31 -0
- data/test/selenium/Edit/edit2.rsel +39 -0
- data/test/selenium/Edit/edit3.rsel +40 -0
- data/test/selenium/Form/0setup.rsel +12 -0
- data/test/selenium/Form/form1.rsel +9 -0
- data/test/selenium/Form/form2.rsel +9 -0
- data/test/selenium/Paginate/0setup.rsel +12 -0
- data/test/selenium/Paginate/paginate1.rsel +24 -0
- data/test/selenium/Toggle/0setup.rsel +12 -0
- data/test/selenium/Toggle/toggle1.rsel +21 -0
- data/test/sites/zena/nodes.yml +4 -4
- data/test/sites/zena/roles.yml +3 -2
- data/test/sites/zena/versions.yml +12 -11
- data/test/unit/core_ext_test.rb +23 -5
- data/test/unit/document_test.rb +6 -2
- data/test/unit/node_test.rb +2 -2
- data/test/unit/remote_test.rb +1 -2
- data/test/unit/role_test.rb +2 -2
- data/test/unit/user_test.rb +48 -1
- data/test/unit/virtual_class_test.rb +7 -7
- data/test/unit/zena/acts/secure_test.rb +1 -1
- data/test/unit/zena/use/rendering_test.rb +1 -1
- data/test/unit/zena/use/urls_test.rb +3 -3
- data/zena.gemspec +65 -101
- metadata +67 -103
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Commands/Run 2.tmCommand +0 -24
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Commands/Run Context.tmCommand +0 -58
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Commands/Run Focused Should.tmCommand +0 -88
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Commands/Run.tmCommand +0 -27
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Commands/YAML to Shoulda.tmCommand +0 -23
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Preferences/Symbol List: Context.tmPreferences +0 -19
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Preferences/Symbol List: Should.tmPreferences +0 -19
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/Factory attributes for.tmSnippet +0 -16
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/Factory build.tmSnippet +0 -16
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/Factory.tmSnippet +0 -16
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/Factory_define with class.tmSnippet +0 -18
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/Factory_define.tmSnippet +0 -18
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/Factory_next.tmSnippet +0 -16
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/Factory_sequence.tmSnippet +0 -18
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/assert_bad_value.tmSnippet +0 -16
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/assert_contains.tmSnippet +0 -16
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/assert_does_not_contain.tmSnippet +0 -16
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/assert_good_value.tmSnippet +0 -16
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/assert_same_elements.tmSnippet +0 -16
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/assert_save.tmSnippet +0 -16
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/assert_sent_email.tmSnippet +0 -18
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/assert_valid.tmSnippet +0 -16
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/association.tmSnippet +0 -17
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/attribute.tmSnippet +0 -17
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/before_should block.tmSnippet +0 -18
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/context block get.tmSnippet +0 -22
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/context block post.tmSnippet +0 -23
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/context block with setup.tmSnippet +0 -25
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/setup.tmSnippet +0 -18
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should block with before proc.tmSnippet +0 -18
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should block.tmSnippet +0 -18
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_allow_values_for.tmSnippet +0 -16
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_assign_to.tmSnippet +0 -16
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_be_restful denied.tmSnippet +0 -20
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_be_restful.tmSnippet +0 -20
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_belong_to.tmSnippet +0 -16
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_change by.tmSnippet +0 -16
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_change from to.tmSnippet +0 -16
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_ensure_length_at_least.tmSnippet +0 -16
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_ensure_length_in_range.tmSnippet +0 -16
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_ensure_length_is.tmSnippet +0 -16
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_ensure_value_in_range.tmSnippet +0 -16
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_eventually.tmSnippet +0 -18
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_filter_params.tmSnippet +0 -16
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_have_and_belong_to_many.tmSnippet +0 -16
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_have_class_methods.tmSnippet +0 -16
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_have_db_column.tmSnippet +0 -16
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_have_db_columns.tmSnippet +0 -16
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_have_index.tmSnippet +0 -16
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_have_indices.tmSnippet +0 -16
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_have_instance_methods.tmSnippet +0 -16
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_have_many.tmSnippet +0 -16
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_have_named_scope.tmSnippet +0 -16
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_have_one.tmSnippet +0 -16
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_have_readonly_attributes.tmSnippet +0 -16
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_not_allow_mass_assignment_of.tmSnippet +0 -16
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_not_allow_values_for.tmSnippet +0 -16
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_not_assign_to.tmSnippet +0 -16
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_not_change.tmSnippet +0 -16
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_not_set_the_flash.tmSnippet +0 -16
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_redirect_to.tmSnippet +0 -16
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_render_a_form.tmSnippet +0 -16
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_render_template.tmSnippet +0 -16
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_render_with_layout.tmSnippet +0 -16
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_render_without_layout.tmSnippet +0 -16
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_respond_with.tmSnippet +0 -16
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_respond_with_content_type.tmSnippet +0 -16
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_return_from_session.tmSnippet +0 -16
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_route.tmSnippet +0 -16
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_set_the_flash_to.tmSnippet +0 -16
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_validate_acceptance_of.tmSnippet +0 -16
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_validate_numericality_of.tmSnippet +0 -16
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_validate_presence_of.tmSnippet +0 -16
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_validate_uniqueness_of with scope.tmSnippet +0 -16
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_validate_uniqueness_of.tmSnippet +0 -16
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Support/RubyMate/catch_exception.rb +0 -39
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Support/RubyMate/run_script.rb +0 -104
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Support/RubyMate/stdin_dialog.rb +0 -14
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Support/RubyMate/test.rb +0 -17
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Support/RubyMate/todo.txt +0 -13
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Support/bin/yaml_to_shoulda.rb +0 -25
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Syntaxes/Ruby on Rails (Shoulda).tmLanguage +0 -166
- data/vendor/TextMate/Ruby Shoulda.tmbundle/info.plist +0 -304
- data/vendor/TextMate/Zena.tmbundle/Commands/Run all yaml tests.tmCommand +0 -37
- data/vendor/TextMate/Zena.tmbundle/Commands/Run focused yaml test.tmCommand +0 -52
- data/vendor/TextMate/Zena.tmbundle/Support/RubyMate/catch_exception.rb +0 -39
- data/vendor/TextMate/Zena.tmbundle/Support/RubyMate/run_script.rb +0 -118
- data/vendor/TextMate/Zena.tmbundle/Support/RubyMate/stdin_dialog.rb +0 -14
- data/vendor/TextMate/Zena.tmbundle/info.plist +0 -17
|
@@ -6,7 +6,7 @@ default:
|
|
|
6
6
|
|
|
7
7
|
each_group:
|
|
8
8
|
src: "<r:nodes do='group' by='kpath'><p do='each_group'><r:kpath/>: <r:each join=', ' do='title'/></p></r:nodes>"
|
|
9
|
-
res: "<p>NP: crocodiles, status title</p><p>NDI: it's a lake</p><p>
|
|
9
|
+
res: "<p>NP: crocodiles, status title</p><p>NDI: it's a lake</p><p>NRC: The lake we love</p><p>NNP: parc opening</p><p>ND: water</p>"
|
|
10
10
|
|
|
11
11
|
set_var:
|
|
12
12
|
context:
|
|
@@ -122,12 +122,20 @@ date_context:
|
|
|
122
122
|
src: "<r:show eval='parse_date(\"2008-03-02\")' format='%A %d.%m.%Y'/>"
|
|
123
123
|
res: "Sunday 02.03.2008"
|
|
124
124
|
|
|
125
|
+
parse_date:
|
|
126
|
+
src: "<r:void do='parse_date(\"2011-06-16\")'/>"
|
|
127
|
+
tem: "/parse_date\(\"2011-06-16\", \"%Y-%m-%d %H:%M\", visitor.tz\) %>"
|
|
128
|
+
|
|
129
|
+
parse_date_in_tz:
|
|
130
|
+
src: "<r:default tz='Asia/Jakarta' do='parse_date(\"2011-06-16\")'/>"
|
|
131
|
+
tem: "/parse_date\(\"2011-06-16\", \"%Y-%m-%d %H:%M\", _ztz\) %>"
|
|
132
|
+
|
|
125
133
|
date_from_params:
|
|
126
134
|
context:
|
|
127
135
|
year: 1975
|
|
128
136
|
old_src: "<r:date select='[param:year]-01-01'><r:show attr='current_date' format='%A %d.%m.%Y'/></r:date>"
|
|
129
137
|
src: "<r:show eval='parse_date(\"#{params[:year]}-01-01\")' format='%A %d.%m.%Y'/>"
|
|
130
|
-
tem: "<%= format_date(parse_date(\"#{params[:year]}-01-01\"), :format => \"%A %d.%m.%Y\") %>"
|
|
138
|
+
tem: "<%= format_date(parse_date(\"#{params[:year]}-01-01\", \"%Y-%m-%d %H:%M\", visitor.tz), :format => \"%A %d.%m.%Y\") %>"
|
|
131
139
|
res: "Wednesday 01.01.1975"
|
|
132
140
|
|
|
133
141
|
date_from_params_in_query:
|
|
@@ -297,6 +297,12 @@ render_h_label:
|
|
|
297
297
|
src: "<r:default label='t'><li do='show' attr='title'/></r:default>"
|
|
298
298
|
res: "<li><label>titre</label> <span>Etat des travaux</span></li>"
|
|
299
299
|
|
|
300
|
+
render_label_false:
|
|
301
|
+
context:
|
|
302
|
+
lang: fr
|
|
303
|
+
src: "<r:default label='t'><li do='show' label='false' attr='title'/></r:default>"
|
|
304
|
+
res: "<li>Etat des travaux</li>"
|
|
305
|
+
|
|
300
306
|
render_h_disabled:
|
|
301
307
|
src: "<r:default h='false'><r:show attr='title'/></r:default>"
|
|
302
308
|
tem: "<%= @node.prop['title'] %>"
|
|
@@ -326,7 +332,7 @@ each_whitespace:
|
|
|
326
332
|
src: |
|
|
327
333
|
<r:pages in='site' order='id asc' limit='3'><r:each><r:id/><r:node></r:node></r:each>
|
|
328
334
|
</r:pages>.
|
|
329
|
-
res: "53\n12\
|
|
335
|
+
res: "53\n37\n12\n.\n"
|
|
330
336
|
|
|
331
337
|
set_class_before_query:
|
|
332
338
|
# Should use previous node (not list context)
|
|
@@ -3,53 +3,19 @@ default:
|
|
|
3
3
|
lang: 'en'
|
|
4
4
|
visitor: 'ant'
|
|
5
5
|
node: 'status'
|
|
6
|
-
src: "simple text"
|
|
7
|
-
tem: "simple text"
|
|
8
|
-
res: "simple text"
|
|
9
|
-
|
|
10
|
-
sprintf:
|
|
11
|
-
src: "<b do='eval'>sprintf('%.2f', id)</b>"
|
|
12
|
-
res: "<b>22.00</b>"
|
|
13
|
-
|
|
14
|
-
set_var:
|
|
15
|
-
src: "<r:set var='foo'>I am <r:show attr='title'/></r:set> <p do='show' var='foo'/>"
|
|
16
|
-
tem: "<% set_foo = capture do %>I am <%= @node.name %><% end %> <p><%= set_foo %></p>"
|
|
17
|
-
res: " <p>I am status</p>"
|
|
18
|
-
|
|
19
|
-
eval_mult:
|
|
20
|
-
src: "<r:set var='foo'>134</r:set><r:show eval='foo * 0.1'/>"
|
|
21
|
-
tem: "<% set_foo = capture do %>134<% end %><%= (set_foo.to_f * 0.1) %>"
|
|
22
|
-
res: "13.4"
|
|
23
|
-
|
|
24
|
-
eval_with_attr:
|
|
25
|
-
src: "<r:show eval='[id] * 10'/>"
|
|
26
|
-
tem: "<%= (@node.zip.to_f * 10) %>"
|
|
27
|
-
res: "220.0"
|
|
28
|
-
|
|
29
|
-
eval_data:
|
|
30
|
-
context:
|
|
31
|
-
lang: 'en'
|
|
32
|
-
visitor: 'ant'
|
|
33
|
-
node: 'cleanWater'
|
|
34
|
-
src: "<r:data><r:set var='count' do='stat' find='count'/><r:set var='sum' do='stat' find='sum'/><b do='show' eval='sum / count' format='%.3f'/></r:data>"
|
|
35
|
-
res: "<b>32.250</b>"
|
|
36
|
-
|
|
37
|
-
eval_or:
|
|
38
|
-
src: "<r:set var='price'><r:show attr='d_boz'/> 20.3</r:set><r:show eval='price * 10'/>"
|
|
39
|
-
res: "203.0"
|
|
40
|
-
|
|
41
|
-
eval_or_value_exists:
|
|
42
|
-
src: "<r:set var='price'><r:show attr='id'/> 20.3</r:set><r:show eval='price * 10'/>"
|
|
43
|
-
res: "220.0"
|
|
44
|
-
|
|
45
|
-
show_var:
|
|
46
|
-
src: "<r:set var='foo'>12345</r:set><b do='[foo]'/>"
|
|
47
|
-
res: "<b>12345</b>"
|
|
48
6
|
|
|
49
7
|
show_var_overwrites_attribute:
|
|
50
|
-
src: "<r:set
|
|
8
|
+
src: "<r:set title='12345'><b do='title'/></r:set>"
|
|
51
9
|
res: "<b>12345</b>"
|
|
52
10
|
|
|
53
|
-
|
|
54
|
-
src: "<r:set
|
|
55
|
-
res: "you have: 3"
|
|
11
|
+
test_set_in_scope:
|
|
12
|
+
src: "<r:set hours='3'><r:if test='hours > 0'>you have: <r:show eval='hours' format='%.2f'/></r:if></r:set>"
|
|
13
|
+
res: "you have: 3.00"
|
|
14
|
+
|
|
15
|
+
test_set_for_siblings:
|
|
16
|
+
src: "<r:set hours='3'/><r:if test='hours > 0'>you have: <r:show eval='hours' format='%.2f'/></r:if>"
|
|
17
|
+
res: "you have: 3.00"
|
|
18
|
+
|
|
19
|
+
test_set_for_siblings_overwrite:
|
|
20
|
+
src: "<r:set hours='3'/><r:set hours='%{hello}'/><r:if test='!hours.blank?'>you have: <r:eval>hours.gsub(/o/,'')</r:eval></r:if>"
|
|
21
|
+
res: "you have: hell"
|
|
@@ -36,7 +36,7 @@ new:
|
|
|
36
36
|
# Should accept allowed params (from class and roles) and transform ids to zip (back and forth)
|
|
37
37
|
src: "<r:new klass='Letter' title='%q{Joe}' parent_id='project.id' paper='%q{white}' origin='%q{Mars}' bad='%q{value}'><r:form><r:input name='title'/> <r:input name='parent_id'/></r:form></r:new>"
|
|
38
38
|
tem: "/:title => \"Joe\", :parent_id => .*@node.project.zip.*, :paper => \"white\", :origin => \"Mars\"/"
|
|
39
|
-
res: "/<input type='text' name='node\[title\]' value='Joe'/> <input type='text' name='node\[parent_id\]' value='21'/><div class='hidden'><input type='hidden' name='node\[klass\]' value='Letter'/><input type='hidden' name='node\[paper\]' value='white'/><input type='hidden' name='node\[origin\]' value='Mars'/></div>/"
|
|
39
|
+
res: "/<input type='text' name='node\[title\]' value='Joe'/> <input type='text' name='node\[parent_id\]' value='21'/><div class='hidden'><input type='hidden' name='node\[klass\]' value='Letter'/><input type='submit'/><input type='hidden' name='node\[paper\]' value='white'/><input type='hidden' name='node\[origin\]' value='Mars'/></div>/"
|
|
40
40
|
|
|
41
41
|
translate_id_to_zip:
|
|
42
42
|
src: "<b do='hot_id'/><i do='parent_id'/>"
|
|
@@ -165,7 +165,7 @@ query_with_default:
|
|
|
165
165
|
visitor: lion
|
|
166
166
|
node: cleanWater
|
|
167
167
|
src: "<r:query default='nodes in project' do='each' join=', ' do='title'/>"
|
|
168
|
-
res: "crocodiles, it's a lake,
|
|
168
|
+
res: "crocodiles, it's a lake, The lake we love, Nice Bananas, parc opening, status title, water"
|
|
169
169
|
|
|
170
170
|
query_with_param:
|
|
171
171
|
# Live compile and query from params
|
|
@@ -184,7 +184,7 @@ query_eval:
|
|
|
184
184
|
node: cleanWater
|
|
185
185
|
scope: 'self'
|
|
186
186
|
src: "<r:query select='pages in #{params[:scope] || \"project\"}' default='pages in project' do='each' join=', ' do='title'/>"
|
|
187
|
-
res: 'crocodiles,
|
|
187
|
+
res: 'crocodiles, Nice Bananas, status title'
|
|
188
188
|
|
|
189
189
|
query_with_parse:
|
|
190
190
|
context:
|
|
@@ -37,9 +37,9 @@ icon:
|
|
|
37
37
|
|
|
38
38
|
pages:
|
|
39
39
|
context:
|
|
40
|
-
node: '
|
|
40
|
+
node: 'zena'
|
|
41
41
|
src: "<r:pages><r:each join=', '><r:show attr='title'/></r:each></r:pages>"
|
|
42
|
-
res: "
|
|
42
|
+
res: "Collections, Kill the bugs, people, projects list, Skins (layout themes)"
|
|
43
43
|
|
|
44
44
|
root:
|
|
45
45
|
src: "<r:root do='title'/>"
|
|
@@ -79,9 +79,9 @@ pages_do_syntax:
|
|
|
79
79
|
|
|
80
80
|
pages_limit:
|
|
81
81
|
context:
|
|
82
|
-
node: '
|
|
82
|
+
node: 'zena'
|
|
83
83
|
src: "<r:pages limit='2' order='title DESC'><r:each join=', '><r:show attr='title'/></r:each></r:pages>"
|
|
84
|
-
res: "
|
|
84
|
+
res: "Skins (layout themes), projects list"
|
|
85
85
|
|
|
86
86
|
pages_random:
|
|
87
87
|
context:
|
|
@@ -91,11 +91,11 @@ pages_random:
|
|
|
91
91
|
|
|
92
92
|
nodes_in_project:
|
|
93
93
|
src: "<r:nodes in='project' limit='2'><r:each join=', '><r:show attr='title'/></r:each></r:nodes>"
|
|
94
|
-
res: "it's a lake,
|
|
94
|
+
res: "it's a lake, Lake Tanganyika"
|
|
95
95
|
|
|
96
96
|
nodes_in_project_stored:
|
|
97
97
|
src: "<r:void set_foo='this'><r:node where='id = 29 in site'>from <r:show attr='title'/>, look at <r:foo do='title'/>: <r:foo do='pages in project' do='each' join=', ' do='title'/></r:node></r:void>"
|
|
98
|
-
res: "from a wiki with Zena, look at status title:
|
|
98
|
+
res: "from a wiki with Zena, look at status title: status title"
|
|
99
99
|
|
|
100
100
|
nodes_in_site:
|
|
101
101
|
src: "<r:nodes in='site' limit='3'><r:each join=', ' do='show' attr='title'/></r:nodes>"
|
|
@@ -289,7 +289,7 @@ projects:
|
|
|
289
289
|
|
|
290
290
|
nodes:
|
|
291
291
|
src: "<r:nodes in='project'><r:each join=', ' do='show' attr='title'/></r:nodes>"
|
|
292
|
-
res: "it's a lake,
|
|
292
|
+
res: "it's a lake, Lake Tanganyika, parc opening, status title, water"
|
|
293
293
|
|
|
294
294
|
menu_with_favorites:
|
|
295
295
|
context:
|
|
@@ -363,7 +363,7 @@ where_not:
|
|
|
363
363
|
context:
|
|
364
364
|
node: 'cleanWater'
|
|
365
365
|
src: "<r:nodes where='title ne \"status title\"' do='each' join=',' do='title'/>"
|
|
366
|
-
res: "it's a lake,
|
|
366
|
+
res: "it's a lake,Lake Tanganyika,parc opening,water"
|
|
367
367
|
|
|
368
368
|
where_two_attributes:
|
|
369
369
|
src: "<r:nodes where='log_at ne event_at' in='site' do='each' join=', ' do='title'/>"
|
|
@@ -424,7 +424,7 @@ find_count:
|
|
|
424
424
|
context:
|
|
425
425
|
node: 'cleanWater'
|
|
426
426
|
src: "<div do='count(\"nodes\")'/>"
|
|
427
|
-
res: '<div>
|
|
427
|
+
res: '<div>5</div>'
|
|
428
428
|
|
|
429
429
|
same_name_as_class:
|
|
430
430
|
# we create a relation with 'page' role from Letter.
|
|
@@ -464,6 +464,16 @@ array_count:
|
|
|
464
464
|
src: "<r:pages in='site' do='count'/>"
|
|
465
465
|
res: "16"
|
|
466
466
|
|
|
467
|
+
first:
|
|
468
|
+
src: "<div do='nodes in site'><r:first do='link'/></div>"
|
|
469
|
+
tem: "/if var2 = var1.first %><a href='<%= zen_path\(var2\) %>'><%= var2.prop\['title'\] %>/"
|
|
470
|
+
res: '/a href.*a wiki with Zena/'
|
|
471
|
+
|
|
472
|
+
rubyless_first:
|
|
473
|
+
src: "<div do='nodes in site'><span do='first.title'/></div>"
|
|
474
|
+
tem: "/span><%= \(var1.first \? var1.first.prop\['title'\] : nil\) %>/"
|
|
475
|
+
res: '<div><span>a wiki with Zena</span></div>'
|
|
476
|
+
|
|
467
477
|
query_in_array:
|
|
468
478
|
src: "<div do='posts' do='find(\"posts in site\")'/>"
|
|
469
479
|
tem: "/Node\.do_find.*Node\.do_find"
|
|
@@ -62,6 +62,18 @@ vclass_name:
|
|
|
62
62
|
tem: "<% var1 = @node.virtual_class %><%= var1.name %>"
|
|
63
63
|
res: "Letter"
|
|
64
64
|
|
|
65
|
+
vclass_icon:
|
|
66
|
+
src: " <r:Letter do='icon'/>"
|
|
67
|
+
tem: "<% if var1 = VirtualClass[\"Letter\"] %> <%= var1.prop['icon'] %><% end %>"
|
|
68
|
+
res: " /images/page.png"
|
|
69
|
+
|
|
70
|
+
vclass_img:
|
|
71
|
+
context:
|
|
72
|
+
node: letter
|
|
73
|
+
src: "<r:vclass do='img'/>"
|
|
74
|
+
tem: "<% var1 = @node.virtual_class %><img src='<%= var1.prop['icon'] %>'/>"
|
|
75
|
+
res: "<img src='/images/page.png'/>"
|
|
76
|
+
|
|
65
77
|
vclass_roles:
|
|
66
78
|
context:
|
|
67
79
|
node: letter
|
|
@@ -96,7 +96,7 @@ map_join:
|
|
|
96
96
|
node: 'cleanWater'
|
|
97
97
|
src: "<r:children do='map(:title).join(\",\")'/>"
|
|
98
98
|
tem: "/var1.map\{\|_map_obj\| _map_obj.prop\['title'\]\}/"
|
|
99
|
-
res: "crocodiles,it's a lake,
|
|
99
|
+
res: "crocodiles,it's a lake,The lake we love,parc opening,status title,water"
|
|
100
100
|
|
|
101
101
|
map_on_can_be_nil:
|
|
102
102
|
context:
|
|
@@ -129,7 +129,7 @@ link_anchor:
|
|
|
129
129
|
|
|
130
130
|
link_anchor_title:
|
|
131
131
|
old_src: "<r:link anchor='[name]'/>"
|
|
132
|
-
src: "<r:link anchor='#{title.
|
|
132
|
+
src: "<r:link anchor='#{title.url_name}'/>"
|
|
133
133
|
res: "<a href='#status-title'>status title</a>"
|
|
134
134
|
|
|
135
135
|
link_anchor_in:
|
|
@@ -138,7 +138,7 @@ link_anchor_in:
|
|
|
138
138
|
|
|
139
139
|
link_anchor_name_in:
|
|
140
140
|
old_src: "<r:link anchor='[name]' in='parent'/>"
|
|
141
|
-
src: "<r:link anchor='#{title.
|
|
141
|
+
src: "<r:link anchor='#{title.url_name}' href='parent'/>"
|
|
142
142
|
res: "<a href='/oo/projects-list/Clean-Water-project#status-title'>status title</a>"
|
|
143
143
|
|
|
144
144
|
link_stored:
|
|
@@ -222,13 +222,21 @@ live_link_data_mode:
|
|
|
222
222
|
res: "<h2><a id='_title30' href='/en/image30_pv.jpg?967816914293'>bird</a></h2>"
|
|
223
223
|
|
|
224
224
|
url_with_lang:
|
|
225
|
+
context:
|
|
226
|
+
visitor: lion
|
|
225
227
|
src: "window.location = \"<r:url lang='fr'/>\";"
|
|
226
|
-
res: "
|
|
228
|
+
res: "/\?lang=fr/"
|
|
229
|
+
|
|
230
|
+
url_with_prefix:
|
|
231
|
+
context:
|
|
232
|
+
visitor: lion
|
|
233
|
+
src: "window.location = \"<r:url prefix='fr'/>\";"
|
|
234
|
+
res: "/test.host/fr"
|
|
227
235
|
|
|
228
236
|
link_in_list_context:
|
|
229
237
|
src: "<div do='nodes in site'><r:link/></div>"
|
|
230
|
-
tem: "/zen_path\(
|
|
231
|
-
res: '/a href.*
|
|
238
|
+
tem: "/zen_path\(@node\).*@node.prop\['title'\]/"
|
|
239
|
+
res: '/a href.*page22.html.*status title/'
|
|
232
240
|
|
|
233
241
|
link_trans:
|
|
234
242
|
src: "<r:link t='img_next_page'/>"
|
|
@@ -45,3 +45,9 @@ created_at:
|
|
|
45
45
|
updated_at:
|
|
46
46
|
src: "<p do='show' eval='v.updated_at' format='%d %b %y'/>"
|
|
47
47
|
res: "<p>11 Apr 06</p>"
|
|
48
|
+
|
|
49
|
+
versions:
|
|
50
|
+
context:
|
|
51
|
+
node: 'opening'
|
|
52
|
+
src: "<r:versions do='each' join=', '>[<r:updated_at format='%Y-%m-%d'/>/<r:author do='title'/>/<r:lang/>] <r:title/></r:versions>"
|
|
53
|
+
res: "[2006-04-16/Panthera Tigris Sumatran/fr] super ouverture, [2006-04-15/Panthera Tigris Sumatran/en] parc opening, [2006-04-11/Solenopsis Invicta/fr] ouverture du parc"
|
|
@@ -134,11 +134,11 @@ on_if_on_each:
|
|
|
134
134
|
# We use 'this' to make sure we are not in a list context.
|
|
135
135
|
src: "<r:pages><p do='each' on_if='this.title == \"status title\"' do='title'/></r:pages>"
|
|
136
136
|
tem: "/var2.prop\['title'\]==\"status title\"/"
|
|
137
|
-
res: "<p class=''>crocodiles</p><p class='
|
|
137
|
+
res: "<p class=''>crocodiles</p><p class=' on'>status title</p>"
|
|
138
138
|
|
|
139
139
|
on_if_ancestor:
|
|
140
140
|
src: "<r:root><r:pages><li do='each' on_if='is_ancestor?(main)' class='hello' join=', ' do='title'/></r:pages></r:root>"
|
|
141
|
-
res: "<li class='hello'>Collections</li>, <li class='hello'>Nature</li>, <li class='hello'>people</li>, <li class='hello on'>projects list</li>, <li class='hello'>Skins (layout themes)</li>"
|
|
141
|
+
res: "<li class='hello'>Collections</li>, <li class='hello'>Kill the bugs</li>, <li class='hello'>Nature</li>, <li class='hello'>people</li>, <li class='hello on'>projects list</li>, <li class='hello'>Skins (layout themes)</li>"
|
|
142
142
|
|
|
143
143
|
on_if_empty:
|
|
144
144
|
src: "<li do='void' on_if='custom_a.blank?'>hello</li>"
|
|
@@ -151,7 +151,7 @@ test_negative_value:
|
|
|
151
151
|
|
|
152
152
|
anchor_attribute:
|
|
153
153
|
# Use to_s so that the method executed replaces the dummy text.
|
|
154
|
-
src: "<p do='id.to_s' anchor='#{title.
|
|
154
|
+
src: "<p do='id.to_s' anchor='#{title.url_name}'>hello</p>"
|
|
155
155
|
res: "<a class='anchor' name='status-title'></a><p>22</p>"
|
|
156
156
|
|
|
157
157
|
anchor_true:
|
|
@@ -167,7 +167,7 @@ anchor_in_link:
|
|
|
167
167
|
res: "<a class='xx' href='#node22'>status title</a>"
|
|
168
168
|
|
|
169
169
|
anchor_tag:
|
|
170
|
-
src: "<r:anchor/> <r:anchor anchor='#{title.
|
|
170
|
+
src: "<r:anchor/> <r:anchor anchor='#{title.url_name}'/>"
|
|
171
171
|
res: "<a class='anchor' name='node22'></a> <a class='anchor' name='status-title'></a>"
|
|
172
172
|
|
|
173
173
|
live_with_show:
|
|
@@ -35,6 +35,7 @@ class ZafuCompilerTest < Zena::Controller::TestCase
|
|
|
35
35
|
'meta',
|
|
36
36
|
'context',
|
|
37
37
|
'comments',
|
|
38
|
+
'eval',
|
|
38
39
|
]
|
|
39
40
|
|
|
40
41
|
BUG = [
|
|
@@ -42,7 +43,6 @@ class ZafuCompilerTest < Zena::Controller::TestCase
|
|
|
42
43
|
'basic',
|
|
43
44
|
'complex',
|
|
44
45
|
'data',
|
|
45
|
-
'eval',
|
|
46
46
|
'complex',
|
|
47
47
|
]
|
|
48
48
|
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
In order to run these tests, you must install the selenium on rails plugin, start the server and visit the selenium test page or run the rake task:
|
|
2
|
+
|
|
3
|
+
1. script/plugin http://svn.openqa.org/svn/selenium-on-rails/stable/selenium-on-rails
|
|
4
|
+
2. zena test_server
|
|
5
|
+
3. launch tests with
|
|
6
|
+
$ rake test:acceptance
|
|
7
|
+
or by visiting
|
|
8
|
+
http://test.host:3000/selenium
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
# See also the RDoc for SeleniumOnRails::TestBuilder.
|
|
2
|
+
# View result in browser: http://test.host:3000/selenium
|
|
3
|
+
|
|
4
|
+
setup :fixtures => :all
|
|
5
|
+
|
|
6
|
+
# Setup code
|
|
7
|
+
open '/login'
|
|
8
|
+
type 'user_login', 'lion'
|
|
9
|
+
type 'password', 'lion'
|
|
10
|
+
click_and_wait 'commit'
|
|
11
|
+
click_and_wait 'link=Kill the bugs'
|
|
12
|
+
verify_text '_title37', 'Kill the bugs'
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
# Add first element
|
|
2
|
+
open '/oo/testnode37.html?test=add1'
|
|
3
|
+
assert_not_visible 'add11_title'
|
|
4
|
+
click 'css=img[alt=add]'
|
|
5
|
+
assert_visible 'add11_title'
|
|
6
|
+
type 'add11_title', 'add1'
|
|
7
|
+
click 'css=input[type=submit]'
|
|
8
|
+
wait_for_not_visible 'add11_title'
|
|
9
|
+
verify_text 'css=.add1 a', 'add1'
|
|
10
|
+
# should have correct parent
|
|
11
|
+
verify_text 'css=.add1 span', 'Kill the bugs'
|
|
12
|
+
|
|
13
|
+
# Add a second element
|
|
14
|
+
assert_not_visible 'add11_title'
|
|
15
|
+
click 'css=img[alt=add]'
|
|
16
|
+
assert_visible 'add11_title'
|
|
17
|
+
type 'add11_title', 'add1_2'
|
|
18
|
+
click 'css=input[type=submit]'
|
|
19
|
+
wait_for_not_visible 'add11_title'
|
|
20
|
+
verify_text 'css=.add1_2 a', 'add1_2'
|
|
21
|
+
# should have correct parent
|
|
22
|
+
verify_text 'css=.add1_2 span', 'Kill the bugs'
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
# Add first element
|
|
2
|
+
open '/oo/testnode37.html?test=add2'
|
|
3
|
+
assert_not_visible 'add21_title'
|
|
4
|
+
click 'css=img[alt=add]'
|
|
5
|
+
assert_visible 'add21_title'
|
|
6
|
+
type 'add21_title', 'add2'
|
|
7
|
+
click 'css=input[type=submit]'
|
|
8
|
+
wait_for_not_visible 'add21_title'
|
|
9
|
+
verify_text 'css=.add2 a', 'add2'
|
|
10
|
+
# should have set parent
|
|
11
|
+
verify_text 'css=.add2 span', 'Zena the wild CMS'
|
|
12
|
+
|
|
13
|
+
# Add a second element
|
|
14
|
+
assert_not_visible 'add21_title'
|
|
15
|
+
click 'css=img[alt=add]'
|
|
16
|
+
assert_visible 'add21_title'
|
|
17
|
+
type 'add21_title', 'add2_2'
|
|
18
|
+
click 'css=input[type=submit]'
|
|
19
|
+
wait_for_not_visible 'add21_title'
|
|
20
|
+
verify_text 'css=.add2_2 a', 'add2_2'
|
|
21
|
+
# should have set parent
|
|
22
|
+
verify_text 'css=.add2_2 span', 'Zena the wild CMS'
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
# Add first element
|
|
2
|
+
open '/oo/testnode37.html?test=add3'
|
|
3
|
+
assert_not_visible 'add31_title'
|
|
4
|
+
click 'css=img[alt=add]'
|
|
5
|
+
assert_visible 'add31_title'
|
|
6
|
+
type 'add31_title', 'add3'
|
|
7
|
+
click 'css=input[type=submit]'
|
|
8
|
+
wait_for_not_visible 'add31_title'
|
|
9
|
+
verify_text 'css=.add3 a', 'add3'
|
|
10
|
+
# should have correct parent
|
|
11
|
+
verify_text 'css=.add3 span', 'Kill the bugs'
|
|
12
|
+
|
|
13
|
+
# Add a second element
|
|
14
|
+
assert_not_visible 'add31_title'
|
|
15
|
+
click 'css=img[alt=add]'
|
|
16
|
+
assert_visible 'add31_title'
|
|
17
|
+
type 'add31_title', 'add3_2'
|
|
18
|
+
click 'css=input[type=submit]'
|
|
19
|
+
wait_for_not_visible 'add31_title'
|
|
20
|
+
verify_text 'css=.add3_2 a', 'add3_2'
|
|
21
|
+
# should have correct parent
|
|
22
|
+
verify_text 'css=.add3_2 span', 'Kill the bugs'
|