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.rb20
-rw-r--r--spec/ruby/library/singleton/new_spec.rb8
8 files changed, 114 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..a0094fb32a
--- /dev/null
+++ b/spec/ruby/library/singleton/allocate_spec.rb
@@ -0,0 +1,8 @@
+require_relative '../../spec_helper'
+require_relative 'fixtures/classes'
+
+describe "Singleton.allocate" do
+ it "is a private method" do
+ -> { SingletonSpecs::MyClass.allocate }.should.raise(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..a7b7b731f5
--- /dev/null
+++ b/spec/ruby/library/singleton/clone_spec.rb
@@ -0,0 +1,8 @@
+require_relative '../../spec_helper'
+require_relative 'fixtures/classes'
+
+describe "Singleton#clone" do
+ it "is prevented" do
+ -> { SingletonSpecs::MyClass.instance.clone }.should.raise(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..333e3bc4b0
--- /dev/null
+++ b/spec/ruby/library/singleton/dump_spec.rb
@@ -0,0 +1,14 @@
+require_relative '../../spec_helper'
+require_relative 'fixtures/classes'
+
+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..a0455f37b7
--- /dev/null
+++ b/spec/ruby/library/singleton/dup_spec.rb
@@ -0,0 +1,8 @@
+require_relative '../../spec_helper'
+require_relative 'fixtures/classes'
+
+describe "Singleton#dup" do
+ it "is prevented" do
+ -> { SingletonSpecs::MyClass.instance.dup }.should.raise(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..20cac602b5
--- /dev/null
+++ b/spec/ruby/library/singleton/instance_spec.rb
@@ -0,0 +1,30 @@
+require_relative '../../spec_helper'
+require_relative 'fixtures/classes'
+
+describe "Singleton.instance" do
+ it "returns an instance of the singleton class" do
+ SingletonSpecs::MyClass.instance.should.is_a?(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.is_a?(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.is_a?(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..ab95d14640
--- /dev/null
+++ b/spec/ruby/library/singleton/load_spec.rb
@@ -0,0 +1,20 @@
+require_relative '../../spec_helper'
+require_relative 'fixtures/classes'
+
+# 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..6167231a29
--- /dev/null
+++ b/spec/ruby/library/singleton/new_spec.rb
@@ -0,0 +1,8 @@
+require_relative '../../spec_helper'
+require_relative 'fixtures/classes'
+
+describe "Singleton.new" do
+ it "is a private method" do
+ -> { SingletonSpecs::NewSpec.new }.should.raise(NoMethodError)
+ end
+end