aboutsummaryrefslogtreecommitdiffstats
path: root/activesupport/test
diff options
context:
space:
mode:
Diffstat (limited to 'activesupport/test')
-rw-r--r--activesupport/test/caching_test.rb70
-rw-r--r--activesupport/test/core_ext/file_test.rb50
-rw-r--r--activesupport/test/memoizable_test.rb35
3 files changed, 94 insertions, 61 deletions
diff --git a/activesupport/test/caching_test.rb b/activesupport/test/caching_test.rb
index 0af4251962..c5f7fb7fdd 100644
--- a/activesupport/test/caching_test.rb
+++ b/activesupport/test/caching_test.rb
@@ -71,69 +71,29 @@ uses_mocha 'high-level cache store tests' do
end
end
-class ThreadSafetyCacheStoreTest < Test::Unit::TestCase
+class FileStoreTest < Test::Unit::TestCase
def setup
- @cache = ActiveSupport::Cache.lookup_store(:memory_store).threadsafe!
- @cache.write('foo', 'bar')
-
- # No way to have mocha proxy to the original method
- @mutex = @cache.instance_variable_get(:@mutex)
- @mutex.instance_eval %(
- def calls; @calls; end
- def synchronize
- @calls ||= 0
- @calls += 1
- yield
- end
- )
+ @cache = ActiveSupport::Cache.lookup_store(:file_store, Dir.pwd)
end
- def test_read_is_synchronized
+ def test_should_read_and_write_strings
+ @cache.write('foo', 'bar')
assert_equal 'bar', @cache.read('foo')
- assert_equal 1, @mutex.calls
- end
-
- def test_write_is_synchronized
- @cache.write('foo', 'baz')
- assert_equal 'baz', @cache.read('foo')
- assert_equal 2, @mutex.calls
+ ensure
+ File.delete("foo.cache")
end
- def test_delete_is_synchronized
- assert_equal 'bar', @cache.read('foo')
- @cache.delete('foo')
- assert_equal nil, @cache.read('foo')
- assert_equal 3, @mutex.calls
+ def test_should_read_and_write_hash
+ @cache.write('foo', {:a => "b"})
+ assert_equal({:a => "b"}, @cache.read('foo'))
+ ensure
+ File.delete("foo.cache")
end
- def test_delete_matched_is_synchronized
- assert_equal 'bar', @cache.read('foo')
- @cache.delete_matched(/foo/)
+ def test_should_read_and_write_nil
+ @cache.write('foo', nil)
assert_equal nil, @cache.read('foo')
- assert_equal 3, @mutex.calls
- end
-
- def test_fetch_is_synchronized
- assert_equal 'bar', @cache.fetch('foo') { 'baz' }
- assert_equal 'fu', @cache.fetch('bar') { 'fu' }
- assert_equal 3, @mutex.calls
- end
-
- def test_exist_is_synchronized
- assert @cache.exist?('foo')
- assert !@cache.exist?('bar')
- assert_equal 2, @mutex.calls
- end
-
- def test_increment_is_synchronized
- @cache.write('foo_count', 1)
- assert_equal 2, @cache.increment('foo_count')
- assert_equal 4, @mutex.calls
- end
-
- def test_decrement_is_synchronized
- @cache.write('foo_count', 1)
- assert_equal 0, @cache.decrement('foo_count')
- assert_equal 4, @mutex.calls
+ ensure
+ File.delete("foo.cache")
end
end
diff --git a/activesupport/test/core_ext/file_test.rb b/activesupport/test/core_ext/file_test.rb
index 5efe357e9f..eedc6b592b 100644
--- a/activesupport/test/core_ext/file_test.rb
+++ b/activesupport/test/core_ext/file_test.rb
@@ -1,9 +1,8 @@
require 'abstract_unit'
class AtomicWriteTest < Test::Unit::TestCase
-
def test_atomic_write_without_errors
- contents = "Atomic Text"
+ contents = "Atomic Text"
File.atomic_write(file_name, Dir.pwd) do |file|
file.write(contents)
assert !File.exist?(file_name)
@@ -13,7 +12,7 @@ class AtomicWriteTest < Test::Unit::TestCase
ensure
File.unlink(file_name) rescue nil
end
-
+
def test_atomic_write_doesnt_write_when_block_raises
File.atomic_write(file_name) do |file|
file.write("testing")
@@ -22,8 +21,47 @@ class AtomicWriteTest < Test::Unit::TestCase
rescue
assert !File.exist?(file_name)
end
-
- def file_name
- "atomic.file"
+
+ def test_atomic_write_preserves_file_permissions
+ contents = "Atomic Text"
+ File.open(file_name, "w", 0755) do |file|
+ file.write(contents)
+ assert File.exist?(file_name)
+ end
+ assert File.exist?(file_name)
+ assert_equal 0100755, file_mode
+ assert_equal contents, File.read(file_name)
+
+ File.atomic_write(file_name, Dir.pwd) do |file|
+ file.write(contents)
+ assert File.exist?(file_name)
+ end
+ assert File.exist?(file_name)
+ assert_equal 0100755, file_mode
+ assert_equal contents, File.read(file_name)
+ ensure
+ File.unlink(file_name) rescue nil
+ end
+
+ def test_atomic_write_preserves_default_file_permissions
+ contents = "Atomic Text"
+ File.atomic_write(file_name, Dir.pwd) do |file|
+ file.write(contents)
+ assert !File.exist?(file_name)
+ end
+ assert File.exist?(file_name)
+ assert_equal 0100666 ^ File.umask, file_mode
+ assert_equal contents, File.read(file_name)
+ ensure
+ File.unlink(file_name) rescue nil
end
+
+ private
+ def file_name
+ "atomic.file"
+ end
+
+ def file_mode
+ File.stat(file_name).mode
+ end
end
diff --git a/activesupport/test/memoizable_test.rb b/activesupport/test/memoizable_test.rb
index cd84dcda53..135d56f14a 100644
--- a/activesupport/test/memoizable_test.rb
+++ b/activesupport/test/memoizable_test.rb
@@ -16,6 +16,16 @@ uses_mocha 'Memoizable' do
"Josh"
end
+ def name?
+ true
+ end
+ memoize :name?
+
+ def update(name)
+ "Joshua"
+ end
+ memoize :update
+
def age
@age_calls += 1
nil
@@ -88,6 +98,10 @@ uses_mocha 'Memoizable' do
assert_equal 1, @person.name_calls
end
+ def test_memoization_with_punctuation
+ assert_equal true, @person.name?
+ end
+
def test_memoization_with_nil_value
assert_equal nil, @person.age
assert_equal 1, @person.age_calls
@@ -96,6 +110,11 @@ uses_mocha 'Memoizable' do
assert_equal 1, @person.age_calls
end
+ def test_memorized_results_are_immutable
+ assert_equal "Josh", @person.name
+ assert_raise(ActiveSupport::FrozenObjectError) { @person.name.gsub!("Josh", "Gosh") }
+ end
+
def test_reloadable
counter = @calculator.counter
assert_equal 1, @calculator.counter
@@ -105,6 +124,21 @@ uses_mocha 'Memoizable' do
assert_equal 3, @calculator.counter
end
+ def test_unmemoize_all
+ assert_equal 1, @calculator.counter
+
+ assert @calculator.instance_variable_get(:@_memoized_counter).any?
+ @calculator.unmemoize_all
+ assert @calculator.instance_variable_get(:@_memoized_counter).empty?
+
+ assert_equal 2, @calculator.counter
+ end
+
+ def test_memoize_all
+ @calculator.memoize_all
+ assert @calculator.instance_variable_defined?(:@_memoized_counter)
+ end
+
def test_memoization_cache_is_different_for_each_instance
assert_equal 1, @calculator.counter
assert_equal 2, @calculator.counter(:reload)
@@ -114,6 +148,7 @@ uses_mocha 'Memoizable' do
def test_memoized_is_not_affected_by_freeze
@person.freeze
assert_equal "Josh", @person.name
+ assert_equal "Joshua", @person.update("Joshua")
end
def test_memoization_with_args