diff options
author | Nick McSpadden <nmcspadden@gmail.com> | 2018-05-14 23:33:45 -0700 |
---|---|---|
committer | Nick McSpadden <nmcspadden@gmail.com> | 2018-05-14 23:33:45 -0700 |
commit | c935ce85f591e53f2f200e55cb252185e1801387 (patch) | |
tree | dfeee6151c50d805138a3d10761a531c2ffbf984 /spec/unit/decorator | |
parent | c48fd22a51deb74a3d4bc3abca308043689b494a (diff) | |
parent | c0609e449135fae43d436136a4f0fd3889a9b8f1 (diff) | |
download | chef-c935ce85f591e53f2f200e55cb252185e1801387.tar.gz |
Merge branch 'master' into mac_uid
Diffstat (limited to 'spec/unit/decorator')
-rw-r--r-- | spec/unit/decorator/lazy_array_spec.rb | 58 | ||||
-rw-r--r-- | spec/unit/decorator/lazy_spec.rb | 39 |
2 files changed, 97 insertions, 0 deletions
diff --git a/spec/unit/decorator/lazy_array_spec.rb b/spec/unit/decorator/lazy_array_spec.rb new file mode 100644 index 0000000000..0c5c2eeee0 --- /dev/null +++ b/spec/unit/decorator/lazy_array_spec.rb @@ -0,0 +1,58 @@ +# +# Author:: Lamont Granquist (<lamont@chef.io>) +# Copyright:: Copyright 2015-2016, Chef Software Inc. +# License:: Apache License, Version 2.0 +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +require "spec_helper" + +describe Chef::Decorator::LazyArray do + def foo + @foo ||= 1 + end + + def bar + @bar ||= 2 + end + + let(:decorator) do + Chef::Decorator::LazyArray.new { [ foo, bar ] } + end + + it "behaves like an array" do + expect(decorator[0]).to eql(1) + expect(decorator[1]).to eql(2) + end + + it "accessing the array elements is lazy" do + expect(decorator[0].class).to eql(Chef::Decorator::Lazy) + expect(decorator[1].class).to eql(Chef::Decorator::Lazy) + expect(@foo).to be nil + expect(@bar).to be nil + end + + it "calling a method on the array element runs the proc (and both elements are autovivified)" do + expect(decorator[0].nil?).to be false + expect(@foo).to equal(1) + expect(@bar).to equal(2) + end + + it "if we loop over the elements and do nothing then its not lazy" do + # we don't know how many elements there are unless we evaluate the proc + decorator.each { |i| } + expect(@foo).to equal(1) + expect(@bar).to equal(2) + end +end diff --git a/spec/unit/decorator/lazy_spec.rb b/spec/unit/decorator/lazy_spec.rb new file mode 100644 index 0000000000..46c8955ae8 --- /dev/null +++ b/spec/unit/decorator/lazy_spec.rb @@ -0,0 +1,39 @@ +# +# Author:: Lamont Granquist (<lamont@chef.io>) +# Copyright:: Copyright 2015-2016, Chef Software Inc. +# License:: Apache License, Version 2.0 +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +require "spec_helper" + +describe Chef::Decorator::Lazy do + let(:decorator) do + @a = 0 + Chef::Decorator::Lazy.new { @a += 1 } + end + + it "decorates an object" do + expect(decorator.even?).to be false + end + + it "the proc runs and does work" do + expect(decorator).to eql(1) + end + + it "creating the decorator does not cause the proc to run" do + decorator + expect(@a).to eql(0) + end +end |