diff options
author | Nicholas Seckar <nseckar@gmail.com> | 2006-03-27 03:59:35 +0000 |
---|---|---|
committer | Nicholas Seckar <nseckar@gmail.com> | 2006-03-27 03:59:35 +0000 |
commit | 24403498ba8582d29f55aab16ffd5920dec1c669 (patch) | |
tree | d89f14264d5a4e361e505a31d397b77b2d93702a /activesupport/test | |
parent | 3f496c66384160ba8eedd8f0e04aca4c9161aedb (diff) | |
download | rails-24403498ba8582d29f55aab16ffd5920dec1c669.tar.gz rails-24403498ba8582d29f55aab16ffd5920dec1c669.tar.bz2 rails-24403498ba8582d29f55aab16ffd5920dec1c669.zip |
Add CachingTools::HashCaching to simplify the creation of nested, autofilling hashes.
git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@4059 5ecf4fe2-1ee6-0310-87b1-e25e094e27de
Diffstat (limited to 'activesupport/test')
-rw-r--r-- | activesupport/test/caching_tools_test.rb | 81 |
1 files changed, 81 insertions, 0 deletions
diff --git a/activesupport/test/caching_tools_test.rb b/activesupport/test/caching_tools_test.rb new file mode 100644 index 0000000000..9f3e42e496 --- /dev/null +++ b/activesupport/test/caching_tools_test.rb @@ -0,0 +1,81 @@ +require 'test/unit' +require File.dirname(__FILE__)+'/../lib/active_support/caching_tools' + +class HashCachingTests < Test::Unit::TestCase + + def cached(&proc) + return @cached if @cached + + @cached_class = Class.new(&proc) + @cached_class.class_eval do + extend ActiveSupport::CachingTools::HashCaching + hash_cache :slow_method + end + @cached = @cached_class.new + end + + def test_cache_access_should_call_method + cached do + def slow_method(a) raise "I should be here: #{a}"; end + end + assert_raises(RuntimeError) { cached.slow_method_cache[1] } + end + + def test_cache_access_should_actually_cache + cached do + def slow_method(a) + (@x ||= []) + if @x.include?(a) then raise "Called twice for #{a}!" + else + @x << a + a + 1 + end + end + end + assert_equal 11, cached.slow_method_cache[10] + assert_equal 12, cached.slow_method_cache[11] + assert_equal 11, cached.slow_method_cache[10] + assert_equal 12, cached.slow_method_cache[11] + end + + def test_cache_should_be_clearable + cached do + def slow_method(a) + @x ||= 0 + @x += 1 + end + end + assert_equal 1, cached.slow_method_cache[:a] + assert_equal 2, cached.slow_method_cache[:b] + assert_equal 3, cached.slow_method_cache[:c] + + assert_equal 1, cached.slow_method_cache[:a] + assert_equal 2, cached.slow_method_cache[:b] + assert_equal 3, cached.slow_method_cache[:c] + + cached.slow_method_cache.clear + + assert_equal 4, cached.slow_method_cache[:a] + assert_equal 5, cached.slow_method_cache[:b] + assert_equal 6, cached.slow_method_cache[:c] + end + + def test_deep_caches_should_work_too + cached do + def slow_method(a, b, c) + a + b + c + end + end + assert_equal 3, cached.slow_method_cache[1][1][1] + assert_equal 7, cached.slow_method_cache[1][2][4] + assert_equal 7, cached.slow_method_cache[1][2][4] + assert_equal 7, cached.slow_method_cache[4][2][1] + + assert_equal({ + 1 => {1 => {1 => 3}, 2 => {4 => 7}}, + 4 => {2 => {1 => 7}}}, + cached.slow_method_cache + ) + end + +end |