summaryrefslogtreecommitdiffstats
path: root/test/unit
diff options
context:
space:
mode:
authorJean-Philippe Lang <jp_lang@yahoo.fr>2008-09-05 10:31:06 +0000
committerJean-Philippe Lang <jp_lang@yahoo.fr>2008-09-05 10:31:06 +0000
commitf7acdd1afde3018a9f7c0a7dc3b6bd97a65670a2 (patch)
treeba4070526883885914942b3a0d253eb2a6e63bf8 /test/unit
parent4b9df2eac774aa045aa5207c8bc613ed6ca67d42 (diff)
downloadredmine-f7acdd1afde3018a9f7c0a7dc3b6bd97a65670a2.tar.gz
redmine-f7acdd1afde3018a9f7c0a7dc3b6bd97a65670a2.zip
Merged hooks branch @ r1785 into trunk.
git-svn-id: http://redmine.rubyforge.org/svn/trunk@1786 e93f8b46-1217-0410-a6f0-8f06a7374b81
Diffstat (limited to 'test/unit')
-rw-r--r--test/unit/lib/redmine/hook_test.rb83
1 files changed, 83 insertions, 0 deletions
diff --git a/test/unit/lib/redmine/hook_test.rb b/test/unit/lib/redmine/hook_test.rb
new file mode 100644
index 000000000..0d76374b6
--- /dev/null
+++ b/test/unit/lib/redmine/hook_test.rb
@@ -0,0 +1,83 @@
+# redMine - project management software
+# Copyright (C) 2006-2008 Jean-Philippe Lang
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+
+require File.dirname(__FILE__) + '/../../../test_helper'
+
+class Redmine::Hook::ManagerTest < Test::Unit::TestCase
+
+ # Some hooks that are manually registered in these tests
+ class TestHook < Redmine::Hook::Listener; end
+
+ class TestHook1 < TestHook
+ def view_layouts_base_html_head(context)
+ 'Test hook 1 listener.'
+ end
+ end
+
+ class TestHook2 < TestHook
+ def view_layouts_base_html_head(context)
+ 'Test hook 2 listener.'
+ end
+ end
+
+ class TestHook3 < TestHook
+ def view_layouts_base_html_head(context)
+ "Context keys: #{context.keys.collect(&:to_s).sort.join(', ')}."
+ end
+ end
+ Redmine::Hook.clear_listeners
+
+ def setup
+ @hook_module = Redmine::Hook
+ end
+
+ def teardown
+ @hook_module.clear_listeners
+ end
+
+ def test_clear_listeners
+ assert_equal 0, @hook_module.hook_listeners(:view_layouts_base_html_head).size
+ @hook_module.add_listener(TestHook1)
+ @hook_module.add_listener(TestHook2)
+ assert_equal 2, @hook_module.hook_listeners(:view_layouts_base_html_head).size
+
+ @hook_module.clear_listeners
+ assert_equal 0, @hook_module.hook_listeners(:view_layouts_base_html_head).size
+ end
+
+ def test_add_listener
+ assert_equal 0, @hook_module.hook_listeners(:view_layouts_base_html_head).size
+ @hook_module.add_listener(TestHook1)
+ assert_equal 1, @hook_module.hook_listeners(:view_layouts_base_html_head).size
+ end
+
+ def test_call_hook
+ @hook_module.add_listener(TestHook1)
+ assert_equal 'Test hook 1 listener.', @hook_module.call_hook(:view_layouts_base_html_head)
+ end
+
+ def test_call_hook_with_context
+ @hook_module.add_listener(TestHook3)
+ assert_equal 'Context keys: bar, foo.', @hook_module.call_hook(:view_layouts_base_html_head, :foo => 1, :bar => 'a')
+ end
+
+ def test_call_hook_with_multiple_listeners
+ @hook_module.add_listener(TestHook1)
+ @hook_module.add_listener(TestHook2)
+ assert_equal 'Test hook 1 listener.Test hook 2 listener.', @hook_module.call_hook(:view_layouts_base_html_head)
+ end
+end