Commit a3d6e166 authored by Rene Saarsoo's avatar Rene Saarsoo
Browse files

Ensure extending Object always yields extends == nil.

parent 9983d3cd
Loading
Loading
Loading
Loading
+6 −4
Original line number Diff line number Diff line
@@ -290,14 +290,16 @@ module JsDuck
    def detect_extends(doc_map, code)
      if doc_map[:extends]
        cls = doc_map[:extends].first[:extends]
        # Ignore extending of the Object class
        cls == "Object" ? nil : cls
      elsif code[:type] == :assignment && code[:right] && code[:right][:type] == :ext_extend
        code[:right][:extend].join(".")
        cls = code[:right][:extend].join(".")
      elsif code[:type] == :ext_define
        # Classes defined with Ext.define will automatically inherit from Ext.Base
        code[:extend] || "Ext.Base"
        cls = code[:extend] || "Ext.Base"
      else
        cls = nil
      end
      # Ignore extending of the Object class
      cls == "Object" ? nil : cls
    end

    def detect_default(tagname, doc_map, code)
+48 −0
Original line number Diff line number Diff line
@@ -548,4 +548,52 @@ describe JsDuck::Aggregator do
      @classes.length.should == 1
    end
  end


  shared_examples_for "extending Object" do
    it "has extends == nil" do
      @doc[:extends].should == nil
    end
  end

  describe "Class explicitly extending Object" do
    before do
      @doc = parse(<<-EOS)[0]
        /**
         * @class Foo
         * @extends Object
         */
      EOS
    end
    it_should_behave_like "extending Object"
  end

  describe "Ext.define extending Object" do
    before do
      @doc = parse(<<-EOS)[0]
        /** */
        Ext.define("Foo", {extend: "Object"});
      EOS
    end
    it_should_behave_like "extending Object"
  end

  describe "Ext.extend extending Object" do
    before do
      @doc = parse(<<-EOS)[0]
        /** */
        Foo = Ext.extend(Object, { });
      EOS
    end
    it_should_behave_like "extending Object"
  end

  describe "Explicit class without @extends" do
    before do
      @doc = parse(<<-EOS)[0]
        /** @class Foo */
      EOS
    end
    it_should_behave_like "extending Object"
  end
end