Commit 833ca9b9 authored by Rene Saarsoo's avatar Rene Saarsoo
Browse files

Enhance Class#members_hash tests.

More granularity plus tests for mixins.
parent 8549419a
Loading
Loading
Loading
Loading
+51 −12
Original line number Diff line number Diff line
@@ -18,9 +18,23 @@ describe JsDuck::Class do
        });
      @classes["ParentClass"] = @parent
      @parent.relations = @classes

      @mixin = JsDuck::Class.new({
          :name => "MixinClass",
          :members => {
            :method => [
              {:name => "xxx", :owner => "MixinClass"},
              {:name => "pri", :owner => "MixinClass", :private => true},
            ]
          }
        });
      @classes["MixinClass"] = @mixin
      @mixin.relations = @classes

      @child = JsDuck::Class.new({
          :name => "ChildClass",
          :extends => "ParentClass",
          :mixins => ["MixinClass"],
          :members => {
            :method => [
              {:name => "foo", :owner => "ChildClass"},
@@ -31,21 +45,46 @@ describe JsDuck::Class do
        });
      @classes["ChildClass"] = @child
      @child.relations = @classes

      @members = @child.members_hash(:method)
    end

    it "returns all public members in current class" do
      ms = @parent.members_hash(:method)
      ms.values.length.should == 2
      ms["foo"][:owner].should == "ParentClass"
      ms["baz"][:owner].should == "ParentClass"
    end

    it "also returns all public members in parent class" do
      ms = @child.members_hash(:method)
      ms.values.length.should == 3
      ms["foo"][:owner].should == "ChildClass"
      ms["bar"][:owner].should == "ChildClass"
      ms["baz"][:owner].should == "ParentClass"
      @members.should have_key("foo")
      @members.should have_key("bar")
    end

    it "doesn't return private members of current class" do
      @members.should_not have_key("zappa")
    end

    it "inherites public members of parent class" do
      @members.should have_key("baz")
      @members.should have_key("foo")
    end

    it "doesn't inherit private members of parent class" do
      @members.should_not have_key("frank")
    end

    it "inherites public members of mixin classes" do
      @members.should have_key("xxx")
    end

    it "doesn't inherit private members of mixin classes" do
      @members.should_not have_key("pri")
    end

    it "keeps ownership of current class members" do
      @members["bar"][:owner].should == "ChildClass"
    end

    it "keeps ownership of non-overridden parent class members" do
      @members["baz"][:owner].should == "ParentClass"
    end

    it "overrides parent class members with the same name" do
      @members["foo"][:owner].should == "ChildClass"
    end
  end