summaryrefslogtreecommitdiff
path: root/spec/ruby/library/singleton
diff options
context:
space:
mode:
Diffstat (limited to 'spec/ruby/library/singleton')
-rw-r--r--spec/ruby/library/singleton/allocate_spec.rb8
-rw-r--r--spec/ruby/library/singleton/clone_spec.rb8
-rw-r--r--spec/ruby/library/singleton/dump_spec.rb14
-rw-r--r--spec/ruby/library/singleton/dup_spec.rb8
-rw-r--r--spec/ruby/library/singleton/fixtures/classes.rb18
-rw-r--r--spec/ruby/library/singleton/instance_spec.rb30
-rw-r--r--spec/ruby/library/singleton/load_spec.rb21
-rw-r--r--spec/ruby/library/singleton/new_spec.rb8
8 files changed, 115 insertions, 0 deletions
diff --git a/spec/ruby/library/singleton/allocate_spec.rb b/spec/ruby/library/singleton/allocate_spec.rb
new file mode 100644
index 0000000000..ce6a501db7
--- /dev/null
+++ b/spec/ruby/library/singleton/allocate_spec.rb
@@ -0,0 +1,8 @@
+require File.expand_path('../../../spec_helper', __FILE__)
+require File.expand_path('../fixtures/classes', __FILE__)
+
+describe "Singleton.allocate" do
+ it "is a private method" do
+ lambda { SingletonSpecs::MyClass.allocate }.should raise_error(NoMethodError)
+ end
+end
diff --git a/spec/ruby/library/singleton/clone_spec.rb b/spec/ruby/library/singleton/clone_spec.rb
new file mode 100644
index 0000000000..964a57bdee
--- /dev/null
+++ b/spec/ruby/library/singleton/clone_spec.rb
@@ -0,0 +1,8 @@
+require File.expand_path('../../../spec_helper', __FILE__)
+require File.expand_path('../fixtures/classes', __FILE__)
+
+describe "Singleton#clone" do
+ it "is prevented" do
+ lambda { SingletonSpecs::MyClass.instance.clone }.should raise_error(TypeError)
+ end
+end
diff --git a/spec/ruby/library/singleton/dump_spec.rb b/spec/ruby/library/singleton/dump_spec.rb
new file mode 100644
index 0000000000..03f94cffd2
--- /dev/null
+++ b/spec/ruby/library/singleton/dump_spec.rb
@@ -0,0 +1,14 @@
+require File.expand_path('../../../spec_helper', __FILE__)
+require File.expand_path('../fixtures/classes', __FILE__)
+
+describe "Singleton#_dump" do
+
+ it "returns an empty string" do
+ SingletonSpecs::MyClass.instance.send(:_dump).should == ""
+ end
+
+ it "returns an empty string from a singleton subclass" do
+ SingletonSpecs::MyClassChild.instance.send(:_dump).should == ""
+ end
+
+end
diff --git a/spec/ruby/library/singleton/dup_spec.rb b/spec/ruby/library/singleton/dup_spec.rb
new file mode 100644
index 0000000000..16fe147f26
--- /dev/null
+++ b/spec/ruby/library/singleton/dup_spec.rb
@@ -0,0 +1,8 @@
+require File.expand_path('../../../spec_helper', __FILE__)
+require File.expand_path('../fixtures/classes', __FILE__)
+
+describe "Singleton#dup" do
+ it "is prevented" do
+ lambda { SingletonSpecs::MyClass.instance.dup }.should raise_error(TypeError)
+ end
+end
diff --git a/spec/ruby/library/singleton/fixtures/classes.rb b/spec/ruby/library/singleton/fixtures/classes.rb
new file mode 100644
index 0000000000..c718ebaec8
--- /dev/null
+++ b/spec/ruby/library/singleton/fixtures/classes.rb
@@ -0,0 +1,18 @@
+require 'singleton'
+
+module SingletonSpecs
+ class MyClass
+ attr_accessor :data
+ include Singleton
+ end
+
+ class NewSpec
+ include Singleton
+ end
+
+ class MyClassChild < MyClass
+ end
+
+ class NotInstantiated < MyClass
+ end
+end
diff --git a/spec/ruby/library/singleton/instance_spec.rb b/spec/ruby/library/singleton/instance_spec.rb
new file mode 100644
index 0000000000..84cc081510
--- /dev/null
+++ b/spec/ruby/library/singleton/instance_spec.rb
@@ -0,0 +1,30 @@
+require File.expand_path('../../../spec_helper', __FILE__)
+require File.expand_path('../fixtures/classes', __FILE__)
+
+describe "Singleton.instance" do
+ it "returns an instance of the singleton class" do
+ SingletonSpecs::MyClass.instance.should be_kind_of(SingletonSpecs::MyClass)
+ end
+
+ it "returns the same instance for multiple calls to instance" do
+ SingletonSpecs::MyClass.instance.should equal(SingletonSpecs::MyClass.instance)
+ end
+
+ it "returns an instance of the singleton's subclasses" do
+ SingletonSpecs::MyClassChild.instance.should be_kind_of(SingletonSpecs::MyClassChild)
+ end
+
+ it "returns the same instance for multiple class to instance on subclasses" do
+ SingletonSpecs::MyClassChild.instance.should equal(SingletonSpecs::MyClassChild.instance)
+ end
+
+ it "returns an instance of the singleton's clone" do
+ klone = SingletonSpecs::MyClassChild.clone
+ klone.instance.should be_kind_of(klone)
+ end
+
+ it "returns the same instance for multiple class to instance on clones" do
+ klone = SingletonSpecs::MyClassChild.clone
+ klone.instance.should equal(klone.instance)
+ end
+end
diff --git a/spec/ruby/library/singleton/load_spec.rb b/spec/ruby/library/singleton/load_spec.rb
new file mode 100644
index 0000000000..fa5868693b
--- /dev/null
+++ b/spec/ruby/library/singleton/load_spec.rb
@@ -0,0 +1,21 @@
+require File.expand_path('../../../spec_helper', __FILE__)
+require File.expand_path('../fixtures/classes', __FILE__)
+
+# TODO: change to a.should be_equal(b)
+# TODO: write spec for cloning classes and calling private methods
+# TODO: write spec for private_methods not showing up via extended
+describe "Singleton._load" do
+ it "returns the singleton instance for anything passed in" do
+ klass = SingletonSpecs::MyClass
+ klass._load("").should equal(klass.instance)
+ klass._load("42").should equal(klass.instance)
+ klass._load(42).should equal(klass.instance)
+ end
+
+ it "returns the singleton instance for anything passed in to subclass" do
+ subklass = SingletonSpecs::MyClassChild
+ subklass._load("").should equal(subklass.instance)
+ subklass._load("42").should equal(subklass.instance)
+ subklass._load(42).should equal(subklass.instance)
+ end
+end
diff --git a/spec/ruby/library/singleton/new_spec.rb b/spec/ruby/library/singleton/new_spec.rb
new file mode 100644
index 0000000000..cd20bebc2b
--- /dev/null
+++ b/spec/ruby/library/singleton/new_spec.rb
@@ -0,0 +1,8 @@
+require File.expand_path('../../../spec_helper', __FILE__)
+require File.expand_path('../fixtures/classes', __FILE__)
+
+describe "Singleton.new" do
+ it "is a private method" do
+ lambda { SingletonSpecs::NewSpec.new }.should raise_error(NoMethodError)
+ end
+end