aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--activemodel/spec/observing_spec.rb120
-rw-r--r--activemodel/spec/spec_helper.rb17
-rw-r--r--activemodel/test/observing_test.rb123
-rw-r--r--activemodel/test/test_helper.rb23
4 files changed, 146 insertions, 137 deletions
diff --git a/activemodel/spec/observing_spec.rb b/activemodel/spec/observing_spec.rb
deleted file mode 100644
index 1919bb5991..0000000000
--- a/activemodel/spec/observing_spec.rb
+++ /dev/null
@@ -1,120 +0,0 @@
-require File.join(File.dirname(__FILE__), 'spec_helper')
-
-class ObservedModel < ActiveModel::Base
- class Observer
- end
-end
-
-class FooObserver < ActiveModel::Observer
- class << self
- public :new
- end
-
- attr_accessor :stub
-
- def on_spec(record)
- stub.event_with(record) if stub
- end
-end
-
-class Foo < ActiveModel::Base
-end
-
-module ActiveModel
- describe Observing do
- before do
- ObservedModel.observers.clear
- end
-
- it "initializes model with no cached observers" do
- ObservedModel.observers.should be_empty
- end
-
- it "stores cached observers in an array" do
- ObservedModel.observers << :foo
- ObservedModel.observers.should include(:foo)
- end
-
- it "flattens array of assigned cached observers" do
- ObservedModel.observers = [[:foo], :bar]
- ObservedModel.observers.should include(:foo)
- ObservedModel.observers.should include(:bar)
- end
-
- it "instantiates observer names passed as strings" do
- ObservedModel.observers << 'foo_observer'
- FooObserver.should_receive(:instance)
- ObservedModel.instantiate_observers
- end
-
- it "instantiates observer names passed as symbols" do
- ObservedModel.observers << :foo_observer
- FooObserver.should_receive(:instance)
- ObservedModel.instantiate_observers
- end
-
- it "instantiates observer classes" do
- ObservedModel.observers << ObservedModel::Observer
- ObservedModel::Observer.should_receive(:instance)
- ObservedModel.instantiate_observers
- end
-
- it "should pass observers to subclasses" do
- FooObserver.instance
- bar = Class.new(Foo)
- bar.count_observers.should == 1
- end
- end
-
- describe Observer do
- before do
- ObservedModel.observers = :foo_observer
- FooObserver.models = nil
- end
-
- it "guesses implicit observable model name" do
- FooObserver.observed_class_name.should == 'Foo'
- end
-
- it "tracks implicit observable models" do
- instance = FooObserver.new
- instance.send(:observed_classes).should include(Foo)
- instance.send(:observed_classes).should_not include(ObservedModel)
- end
-
- it "tracks explicit observed model class" do
- FooObserver.new.send(:observed_classes).should_not include(ObservedModel)
- FooObserver.observe ObservedModel
- instance = FooObserver.new
- instance.send(:observed_classes).should include(ObservedModel)
- end
-
- it "tracks explicit observed model as string" do
- FooObserver.new.send(:observed_classes).should_not include(ObservedModel)
- FooObserver.observe 'observed_model'
- instance = FooObserver.new
- instance.send(:observed_classes).should include(ObservedModel)
- end
-
- it "tracks explicit observed model as symbol" do
- FooObserver.new.send(:observed_classes).should_not include(ObservedModel)
- FooObserver.observe :observed_model
- instance = FooObserver.new
- instance.send(:observed_classes).should include(ObservedModel)
- end
-
- it "calls existing observer event" do
- foo = Foo.new
- FooObserver.instance.stub = stub!(:stub)
- FooObserver.instance.stub.should_receive(:event_with).with(foo)
- Foo.send(:changed)
- Foo.send(:notify_observers, :on_spec, foo)
- end
-
- it "skips nonexistent observer event" do
- foo = Foo.new
- Foo.send(:changed)
- Foo.send(:notify_observers, :whatever, foo)
- end
- end
-end \ No newline at end of file
diff --git a/activemodel/spec/spec_helper.rb b/activemodel/spec/spec_helper.rb
deleted file mode 100644
index 004fdfca07..0000000000
--- a/activemodel/spec/spec_helper.rb
+++ /dev/null
@@ -1,17 +0,0 @@
-ENV['LOG_NAME'] = 'spec'
-$LOAD_PATH << File.join(File.dirname(__FILE__), '..', 'vendor', 'rspec', 'lib')
-$LOAD_PATH << File.join(File.dirname(__FILE__), '..', 'lib')
-require 'active_model'
-begin
- require 'spec'
-rescue LoadError
- require 'rubygems'
- require 'spec'
-end
-
-begin
- require 'ruby-debug'
- Debugger.start
-rescue LoadError
- # you do not know the ways of ruby-debug yet, what a shame
-end \ No newline at end of file
diff --git a/activemodel/test/observing_test.rb b/activemodel/test/observing_test.rb
new file mode 100644
index 0000000000..37291ae4c6
--- /dev/null
+++ b/activemodel/test/observing_test.rb
@@ -0,0 +1,123 @@
+require File.join(File.dirname(__FILE__), 'test_helper')
+
+class ObservedModel < ActiveModel::Base
+ class Observer
+ end
+end
+
+class FooObserver < ActiveModel::Observer
+ class << self
+ public :new
+ end
+
+ attr_accessor :stub
+
+ def on_spec(record)
+ stub.event_with(record) if stub
+ end
+end
+
+class Foo < ActiveModel::Base
+end
+
+class ObservingTest < ActiveSupport::TestCase
+ def setup
+ ObservedModel.observers.clear
+ end
+
+ test "initializes model with no cached observers" do
+ assert ObservedModel.observers.empty?, "Not empty: #{ObservedModel.observers.inspect}"
+ end
+
+ test "stores cached observers in an array" do
+ ObservedModel.observers << :foo
+ assert ObservedModel.observers.include?(:foo), ":foo not in #{ObservedModel.observers.inspect}"
+ end
+
+ test "flattens array of assigned cached observers" do
+ ObservedModel.observers = [[:foo], :bar]
+ assert ObservedModel.observers.include?(:foo), ":foo not in #{ObservedModel.observers.inspect}"
+ assert ObservedModel.observers.include?(:bar), ":bar not in #{ObservedModel.observers.inspect}"
+ end
+
+ uses_mocha "observer instantiation" do
+ test "instantiates observer names passed as strings" do
+ ObservedModel.observers << 'foo_observer'
+ FooObserver.expects(:instance)
+ ObservedModel.instantiate_observers
+ end
+
+ test "instantiates observer names passed as symbols" do
+ ObservedModel.observers << :foo_observer
+ FooObserver.expects(:instance)
+ ObservedModel.instantiate_observers
+ end
+
+ test "instantiates observer classes" do
+ ObservedModel.observers << ObservedModel::Observer
+ ObservedModel::Observer.expects(:instance)
+ ObservedModel.instantiate_observers
+ end
+ end
+
+ test "passes observers to subclasses" do
+ FooObserver.instance
+ bar = Class.new(Foo)
+ assert_equal Foo.count_observers, bar.count_observers
+ end
+end
+
+class ObserverTest < ActiveSupport::TestCase
+ def setup
+ ObservedModel.observers = :foo_observer
+ FooObserver.models = nil
+ end
+
+ test "guesses implicit observable model name" do
+ assert_equal 'Foo', FooObserver.observed_class_name
+ end
+
+ test "tracks implicit observable models" do
+ instance = FooObserver.new
+ assert instance.send(:observed_classes).include?(Foo), "Foo not in #{instance.send(:observed_classes).inspect}"
+ assert !instance.send(:observed_classes).include?(ObservedModel), "ObservedModel in #{instance.send(:observed_classes).inspect}"
+ end
+
+ test "tracks explicit observed model class" do
+ old_instance = FooObserver.new
+ assert !old_instance.send(:observed_classes).include?(ObservedModel), "ObservedModel in #{old_instance.send(:observed_classes).inspect}"
+ FooObserver.observe ObservedModel
+ instance = FooObserver.new
+ assert instance.send(:observed_classes).include?(ObservedModel), "ObservedModel not in #{instance.send(:observed_classes).inspect}"
+ end
+
+ test "tracks explicit observed model as string" do
+ old_instance = FooObserver.new
+ assert !old_instance.send(:observed_classes).include?(ObservedModel), "ObservedModel in #{old_instance.send(:observed_classes).inspect}"
+ FooObserver.observe 'observed_model'
+ instance = FooObserver.new
+ assert instance.send(:observed_classes).include?(ObservedModel), "ObservedModel not in #{instance.send(:observed_classes).inspect}"
+ end
+
+ test "tracks explicit observed model as symbol" do
+ old_instance = FooObserver.new
+ assert !old_instance.send(:observed_classes).include?(ObservedModel), "ObservedModel in #{old_instance.send(:observed_classes).inspect}"
+ FooObserver.observe :observed_model
+ instance = FooObserver.new
+ assert instance.send(:observed_classes).include?(ObservedModel), "ObservedModel not in #{instance.send(:observed_classes).inspect}"
+ end
+
+ test "calls existing observer event" do
+ foo = Foo.new
+ FooObserver.instance.stub = stub
+ FooObserver.instance.stub.expects(:event_with).with(foo)
+ Foo.send(:changed)
+ Foo.send(:notify_observers, :on_spec, foo)
+ end
+
+ test "skips nonexistent observer event" do
+ foo = Foo.new
+ Foo.send(:changed)
+ Foo.send(:notify_observers, :whatever, foo)
+ end
+end \ No newline at end of file
diff --git a/activemodel/test/test_helper.rb b/activemodel/test/test_helper.rb
new file mode 100644
index 0000000000..8e608fa0bc
--- /dev/null
+++ b/activemodel/test/test_helper.rb
@@ -0,0 +1,23 @@
+$:.unshift "#{File.dirname(__FILE__)}/../lib"
+$:.unshift File.dirname(__FILE__)
+
+require 'test/unit'
+require 'active_model'
+require 'active_support/callbacks' # needed by ActiveSupport::TestCase
+require 'active_support/test_case'
+
+def uses_gem(gem_name, test_name, version = '> 0')
+ require 'rubygems'
+ gem gem_name.to_s, version
+ require gem_name.to_s
+ yield
+rescue LoadError
+ $stderr.puts "Skipping #{test_name} tests. `gem install #{gem_name}` and try again."
+end
+
+# Wrap tests that use Mocha and skip if unavailable.
+unless defined? uses_mocha
+ def uses_mocha(test_name, &block)
+ uses_gem('mocha', test_name, '>= 0.5.5', &block)
+ end
+end