Loading lib/jsduck/js/property.rb +5 −3 Original line number Diff line number Diff line Loading @@ -42,10 +42,12 @@ module JsDuck elsif exp && exp.define_property? name = exp["arguments"][1].to_value if exp.object_descriptor("get") || exp.object_descriptor("set") # Objects with getters/setters don't have a value and also # aren't readonly. if exp.object_descriptor("set") # Object with a setter is not readonly make(name) elsif exp.object_descriptor("get") # Object with a getter and no setter is readonly make(name, nil, true) else writable = exp.object_descriptor("writable") readonly = writable ? !writable.to_value : true Loading spec/aggregator_readonly_spec.rb +18 −2 Original line number Diff line number Diff line Loading @@ -66,7 +66,7 @@ describe JsDuck::Aggregator do end end describe "Object.defineProperty with getter" do describe "Object.defineProperty with only getter" do let(:doc) do parse_member(<<-EOS) /** */ Loading @@ -76,16 +76,32 @@ describe JsDuck::Aggregator do EOS end it "gets a readonly attribute" do doc[:readonly].should == true end end describe "Object.defineProperty with only setter" do let(:doc) do parse_member(<<-EOS) /** */ Object.defineProperty(this, 'myCfg', { set: function(x) { this.x = x; } }); EOS end it "gets no readonly attribute" do doc[:readonly].should_not == true end end describe "Object.defineProperty with setter" do describe "Object.defineProperty with both getter and setter" do let(:doc) do parse_member(<<-EOS) /** */ Object.defineProperty(this, 'myCfg', { get: function() { return 1; }, set: function(x) { this.x = x; } }); EOS Loading Loading
lib/jsduck/js/property.rb +5 −3 Original line number Diff line number Diff line Loading @@ -42,10 +42,12 @@ module JsDuck elsif exp && exp.define_property? name = exp["arguments"][1].to_value if exp.object_descriptor("get") || exp.object_descriptor("set") # Objects with getters/setters don't have a value and also # aren't readonly. if exp.object_descriptor("set") # Object with a setter is not readonly make(name) elsif exp.object_descriptor("get") # Object with a getter and no setter is readonly make(name, nil, true) else writable = exp.object_descriptor("writable") readonly = writable ? !writable.to_value : true Loading
spec/aggregator_readonly_spec.rb +18 −2 Original line number Diff line number Diff line Loading @@ -66,7 +66,7 @@ describe JsDuck::Aggregator do end end describe "Object.defineProperty with getter" do describe "Object.defineProperty with only getter" do let(:doc) do parse_member(<<-EOS) /** */ Loading @@ -76,16 +76,32 @@ describe JsDuck::Aggregator do EOS end it "gets a readonly attribute" do doc[:readonly].should == true end end describe "Object.defineProperty with only setter" do let(:doc) do parse_member(<<-EOS) /** */ Object.defineProperty(this, 'myCfg', { set: function(x) { this.x = x; } }); EOS end it "gets no readonly attribute" do doc[:readonly].should_not == true end end describe "Object.defineProperty with setter" do describe "Object.defineProperty with both getter and setter" do let(:doc) do parse_member(<<-EOS) /** */ Object.defineProperty(this, 'myCfg', { get: function() { return 1; }, set: function(x) { this.x = x; } }); EOS Loading