puppet 5.0.1-x64-mingw32 → 5.1.0-x64-mingw32
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of puppet might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/lib/puppet/agent.rb +1 -0
- data/lib/puppet/defaults.rb +1 -1
- data/lib/puppet/functions.rb +6 -7
- data/lib/puppet/functions/all.rb +100 -0
- data/lib/puppet/functions/any.rb +105 -0
- data/lib/puppet/functions/defined.rb +3 -3
- data/lib/puppet/functions/new.rb +2 -1
- data/lib/puppet/functions/reduce.rb +31 -0
- data/lib/puppet/functions/tree_each.rb +200 -0
- data/lib/puppet/module.rb +30 -0
- data/lib/puppet/parser/functions/new.rb +67 -0
- data/lib/puppet/parser/functions/reduce.rb +31 -0
- data/lib/puppet/parser/relationship.rb +2 -2
- data/lib/puppet/parser/resource.rb +39 -10
- data/lib/puppet/parser/scope.rb +1 -1
- data/lib/puppet/pops/evaluator/access_operator.rb +11 -4
- data/lib/puppet/pops/evaluator/collector_transformer.rb +1 -1
- data/lib/puppet/pops/evaluator/evaluator_impl.rb +4 -4
- data/lib/puppet/pops/evaluator/relationship_operator.rb +1 -1
- data/lib/puppet/pops/evaluator/runtime3_converter.rb +3 -3
- data/lib/puppet/pops/evaluator/runtime3_resource_support.rb +1 -1
- data/lib/puppet/pops/loader/module_loaders.rb +1 -1
- data/lib/puppet/pops/loader/static_loader.rb +1 -2
- data/lib/puppet/pops/loaders.rb +1 -2
- data/lib/puppet/pops/lookup/context.rb +1 -1
- data/lib/puppet/pops/lookup/lookup_adapter.rb +2 -1
- data/lib/puppet/pops/model/ast.rb +440 -436
- data/lib/puppet/pops/model/factory.rb +140 -140
- data/lib/puppet/pops/pcore.rb +1 -2
- data/lib/puppet/pops/resource/param.rb +1 -1
- data/lib/puppet/pops/resource/resource_type_impl.rb +1 -1
- data/lib/puppet/pops/serialization/from_data_converter.rb +0 -12
- data/lib/puppet/pops/time/timestamp.rb +29 -17
- data/lib/puppet/pops/types/annotatable.rb +2 -2
- data/lib/puppet/pops/types/annotation.rb +8 -8
- data/lib/puppet/pops/types/class_loader.rb +3 -3
- data/lib/puppet/pops/types/implementation_registry.rb +1 -1
- data/lib/puppet/pops/types/iterable.rb +2 -2
- data/lib/puppet/pops/types/p_binary_type.rb +2 -2
- data/lib/puppet/pops/types/p_init_type.rb +238 -0
- data/lib/puppet/pops/types/p_meta_type.rb +14 -11
- data/lib/puppet/pops/types/p_object_type.rb +15 -15
- data/lib/puppet/pops/types/p_sem_ver_range_type.rb +2 -2
- data/lib/puppet/pops/types/p_sem_ver_type.rb +2 -2
- data/lib/puppet/pops/types/p_sensitive_type.rb +2 -2
- data/lib/puppet/pops/types/p_timespan_type.rb +6 -6
- data/lib/puppet/pops/types/p_timestamp_type.rb +6 -2
- data/lib/puppet/pops/types/p_type_set_type.rb +10 -9
- data/lib/puppet/pops/types/ruby_generator.rb +6 -5
- data/lib/puppet/pops/types/ruby_method.rb +2 -2
- data/lib/puppet/pops/types/string_converter.rb +1 -1
- data/lib/puppet/pops/types/tree_iterators.rb +250 -0
- data/lib/puppet/pops/types/type_calculator.rb +13 -13
- data/lib/puppet/pops/types/type_factory.rb +26 -7
- data/lib/puppet/pops/types/type_formatter.rb +9 -4
- data/lib/puppet/pops/types/type_parser.rb +8 -3
- data/lib/puppet/pops/types/type_set_reference.rb +2 -2
- data/lib/puppet/pops/types/types.rb +168 -109
- data/lib/puppet/provider/package/gem.rb +10 -9
- data/lib/puppet/provider/package/pip.rb +12 -3
- data/lib/puppet/provider/package/yum.rb +9 -1
- data/lib/puppet/resource/capability_finder.rb +30 -11
- data/lib/puppet/type/file.rb +21 -13
- data/lib/puppet/util/execution.rb +67 -14
- data/lib/puppet/util/suidmanager.rb +1 -0
- data/lib/puppet/version.rb +1 -1
- data/locales/puppet.pot +130 -66
- data/man/man5/puppet.conf.5 +1 -1
- data/spec/fixtures/unit/provider/package/yum/yum-check-update-simple.txt +1 -0
- data/spec/integration/parser/collection_spec.rb +40 -1
- data/spec/shared_contexts/types_setup.rb +41 -2
- data/spec/unit/agent_spec.rb +11 -0
- data/spec/unit/file_bucket/dipper_spec.rb +13 -4
- data/spec/unit/functions/all_spec.rb +97 -0
- data/spec/unit/functions/any_spec.rb +109 -0
- data/spec/unit/functions/hiera_spec.rb +5 -0
- data/spec/unit/functions/new_spec.rb +66 -0
- data/spec/unit/functions/tree_each_spec.rb +444 -0
- data/spec/unit/module_spec.rb +29 -0
- data/spec/unit/pops/serialization/serialization_spec.rb +2 -2
- data/spec/unit/pops/serialization/to_from_hr_spec.rb +2 -2
- data/spec/unit/pops/types/iterable_spec.rb +9 -9
- data/spec/unit/pops/types/p_init_type_spec.rb +285 -0
- data/spec/unit/pops/types/p_object_type_spec.rb +8 -8
- data/spec/unit/pops/types/p_sensitive_type_spec.rb +4 -0
- data/spec/unit/pops/types/p_timespan_type_spec.rb +14 -0
- data/spec/unit/pops/types/p_timestamp_type_spec.rb +19 -1
- data/spec/unit/pops/types/p_type_set_type_spec.rb +2 -2
- data/spec/unit/pops/types/ruby_generator_spec.rb +9 -22
- data/spec/unit/pops/types/string_converter_spec.rb +2 -2
- data/spec/unit/pops/types/type_acceptor_spec.rb +2 -2
- data/spec/unit/pops/types/type_calculator_spec.rb +43 -38
- data/spec/unit/pops/types/type_factory_spec.rb +6 -6
- data/spec/unit/pops/types/type_formatter_spec.rb +6 -6
- data/spec/unit/pops/types/types_spec.rb +16 -4
- data/spec/unit/provider/package/gem_spec.rb +6 -6
- data/spec/unit/provider/package/pip_spec.rb +44 -23
- data/spec/unit/provider/package/puppet_gem_spec.rb +1 -1
- data/spec/unit/provider/package/yum_spec.rb +8 -0
- data/spec/unit/resource/capability_finder_spec.rb +4 -5
- data/spec/unit/type/file_spec.rb +19 -14
- data/spec/unit/util/execution_spec.rb +216 -82
- data/tasks/generate_ast_model.rake +10 -2
- metadata +15 -2
@@ -12,6 +12,11 @@ describe 'Timestamp type' do
|
|
12
12
|
expect(t).to eql(TypeFactory.timestamp('2015-03-01', '2016-12-24'))
|
13
13
|
end
|
14
14
|
|
15
|
+
it 'DateTime#_strptime creates hash with :leftover field' do
|
16
|
+
expect(DateTime._strptime('2015-05-04 and bogus', '%F')).to include(:leftover)
|
17
|
+
expect(DateTime._strptime('2015-05-04T10:34:11.003 UTC and bogus', '%FT%T.%N %Z')).to include(:leftover)
|
18
|
+
end
|
19
|
+
|
15
20
|
context 'when used in Puppet expressions' do
|
16
21
|
include PuppetSpec::Compiler
|
17
22
|
it 'is equal to itself only' do
|
@@ -25,6 +30,20 @@ describe 'Timestamp type' do
|
|
25
30
|
expect(eval_and_collect_notices(code)).to eq(%w(true true false false))
|
26
31
|
end
|
27
32
|
|
33
|
+
it 'does not consider an Integer to be an instance' do
|
34
|
+
code = <<-CODE
|
35
|
+
notice(assert_type(Timestamp, 1234))
|
36
|
+
CODE
|
37
|
+
expect { eval_and_collect_notices(code) }.to raise_error(/expects a Timestamp value, got Integer/)
|
38
|
+
end
|
39
|
+
|
40
|
+
it 'does not consider a Float to be an instance' do
|
41
|
+
code = <<-CODE
|
42
|
+
notice(assert_type(Timestamp, 1.234))
|
43
|
+
CODE
|
44
|
+
expect { eval_and_collect_notices(code) }.to raise_error(/expects a Timestamp value, got Float/)
|
45
|
+
end
|
46
|
+
|
28
47
|
context "when parameterized" do
|
29
48
|
it 'is equal other types with the same parameterization' do
|
30
49
|
code = <<-CODE
|
@@ -82,7 +101,6 @@ describe 'Timestamp type' do
|
|
82
101
|
end
|
83
102
|
|
84
103
|
it 'should error when only part of the string is parsed' do
|
85
|
-
pending("Requires full rewrite of Timestamp parse since there's no way to detect trailing garbage using DateTime#strptime")
|
86
104
|
code = <<-CODE
|
87
105
|
notice(Timestamp('2015-03-01T11:12:13 bogus after'))
|
88
106
|
CODE
|
@@ -14,8 +14,8 @@ module Puppet::Pops
|
|
14
14
|
let(:loader) { loaders.find_loader(nil) }
|
15
15
|
|
16
16
|
def type_set_t(name, body_string, name_authority)
|
17
|
-
|
18
|
-
typeset = PTypeSetType.new(name,
|
17
|
+
init_literal_hash = pp_parser.parse_string("{#{body_string}}").body
|
18
|
+
typeset = PTypeSetType.new(name, init_literal_hash, name_authority)
|
19
19
|
loader.set_entry(Loader::TypedName.new(:type, name, name_authority), typeset)
|
20
20
|
typeset
|
21
21
|
end
|
@@ -379,28 +379,15 @@ describe 'Puppet Ruby Generator' do
|
|
379
379
|
|
380
380
|
context 'the typeset' do
|
381
381
|
it 'produces expected string representation' do
|
382
|
-
typeset.to_s
|
383
|
-
"pcore_version => '1.0.0', "+
|
384
|
-
|
385
|
-
|
386
|
-
|
387
|
-
|
388
|
-
|
389
|
-
|
390
|
-
|
391
|
-
"'first' => MyModule::FirstGenerated}}], "+
|
392
|
-
"FourthGenerated => Object[{"+
|
393
|
-
"parent => MyModule::SecondGenerated, "+
|
394
|
-
"attributes => {"+
|
395
|
-
"'complex' => {"+
|
396
|
-
"type => Optional[ThirdGenerated], "+
|
397
|
-
"value => ?}, "+
|
398
|
-
"'n1' => MyModule::MyInteger, "+
|
399
|
-
"'n2' => MyFloat}}]}, "+
|
400
|
-
"references => [{"+
|
401
|
-
"'name' => 'MyModule', "+
|
402
|
-
"'alias' => 'My', "+
|
403
|
-
"'version_range' => '1.x'}]}]"
|
382
|
+
expect(typeset.to_s).to eq(
|
383
|
+
"TypeSet[{pcore_version => '1.0.0', name_authority => 'http://puppet.com/2016.1/runtime', name => 'OtherModule', version => '1.0.0', types => {"+
|
384
|
+
"MyFloat => Float, "+
|
385
|
+
"ThirdGenerated => Object[{attributes => {'first' => My::FirstGenerated}}], "+
|
386
|
+
"FourthGenerated => Object[{parent => My::SecondGenerated, attributes => {"+
|
387
|
+
"'complex' => {type => Optional[ThirdGenerated], value => ?}, "+
|
388
|
+
"'n1' => My::MyInteger, "+
|
389
|
+
"'n2' => MyFloat"+
|
390
|
+
"}}]}, references => {My => {'name' => 'MyModule', 'version_range' => '1.x'}}}]")
|
404
391
|
end
|
405
392
|
end
|
406
393
|
|
@@ -1109,14 +1109,14 @@ describe 'The string converter' do
|
|
1109
1109
|
"%#p" => 'Integer',
|
1110
1110
|
}.each do |fmt, result |
|
1111
1111
|
it "the format #{fmt} produces #{result}" do
|
1112
|
-
string_formats = { Puppet::Pops::Types::
|
1112
|
+
string_formats = { Puppet::Pops::Types::PTypeType::DEFAULT => fmt}
|
1113
1113
|
expect(converter.convert(factory.integer, string_formats)).to eq(result)
|
1114
1114
|
end
|
1115
1115
|
end
|
1116
1116
|
|
1117
1117
|
it 'errors when format is not recognized' do
|
1118
1118
|
expect do
|
1119
|
-
string_formats = { Puppet::Pops::Types::
|
1119
|
+
string_formats = { Puppet::Pops::Types::PTypeType::DEFAULT => "%k"}
|
1120
1120
|
converter.convert(factory.integer, string_formats)
|
1121
1121
|
end.to raise_error(/Illegal format 'k' specified for value of Type type - expected one of the characters 'sp'/)
|
1122
1122
|
end
|
@@ -35,13 +35,13 @@ describe 'the Puppet::Pops::Types::TypeAcceptor' do
|
|
35
35
|
end
|
36
36
|
|
37
37
|
it "should get a visit from the type of a Type that accepts it" do
|
38
|
-
t =
|
38
|
+
t = PTypeType.new(PAnyType::DEFAULT)
|
39
39
|
t.accept(acceptor, nil)
|
40
40
|
expect(acceptor.visitors).to include(t, PAnyType::DEFAULT)
|
41
41
|
end
|
42
42
|
|
43
43
|
[
|
44
|
-
|
44
|
+
PTypeType,
|
45
45
|
PNotUndefType,
|
46
46
|
PIterableType,
|
47
47
|
PIteratorType,
|
@@ -188,11 +188,11 @@ describe 'The type calculator' do
|
|
188
188
|
end
|
189
189
|
end
|
190
190
|
|
191
|
-
it 'Class Foo translates to
|
191
|
+
it 'Class Foo translates to PTypeType[PRuntimeType[ruby, Foo]]' do
|
192
192
|
::Foo = Class.new
|
193
193
|
begin
|
194
194
|
t = calculator.infer(::Foo)
|
195
|
-
expect(t.class).to eq(
|
195
|
+
expect(t.class).to eq(PTypeType)
|
196
196
|
tt = t.type
|
197
197
|
expect(tt.class).to eq(PRuntimeType)
|
198
198
|
expect(tt.runtime).to eq(:ruby)
|
@@ -202,11 +202,11 @@ describe 'The type calculator' do
|
|
202
202
|
end
|
203
203
|
end
|
204
204
|
|
205
|
-
it 'Module FooModule translates to
|
205
|
+
it 'Module FooModule translates to PTypeType[PRuntimeType[ruby, FooModule]]' do
|
206
206
|
::FooModule = Module.new
|
207
207
|
begin
|
208
208
|
t = calculator.infer(::FooModule)
|
209
|
-
expect(t.class).to eq(
|
209
|
+
expect(t.class).to eq(PTypeType)
|
210
210
|
tt = t.type
|
211
211
|
expect(tt.class).to eq(PRuntimeType)
|
212
212
|
expect(tt.runtime).to eq(:ruby)
|
@@ -563,17 +563,17 @@ describe 'The type calculator' do
|
|
563
563
|
end
|
564
564
|
|
565
565
|
it 'computes given hostclass type commonality' do
|
566
|
-
r1 =
|
567
|
-
r2 =
|
566
|
+
r1 = PClassType.new('foo')
|
567
|
+
r2 = PClassType.new('foo')
|
568
568
|
expect(calculator.common_type(r1, r2).to_s).to eq('Class[foo]')
|
569
569
|
|
570
|
-
r2 =
|
570
|
+
r2 = PClassType.new('bar')
|
571
571
|
expect(calculator.common_type(r1, r2).to_s).to eq('Class')
|
572
572
|
|
573
|
-
r2 =
|
573
|
+
r2 = PClassType.new(nil)
|
574
574
|
expect(calculator.common_type(r1, r2).to_s).to eq('Class')
|
575
575
|
|
576
|
-
r1 =
|
576
|
+
r1 = PClassType.new(nil)
|
577
577
|
expect(calculator.common_type(r1, r2).to_s).to eq('Class')
|
578
578
|
end
|
579
579
|
|
@@ -841,7 +841,7 @@ describe 'The type calculator' do
|
|
841
841
|
# Add a non-empty variant
|
842
842
|
all_instances << variant_t(PAnyType::DEFAULT, PUnitType::DEFAULT)
|
843
843
|
# Add a type alias that doesn't resolve to 't'
|
844
|
-
all_instances << type_alias_t('MyInt', 'Integer').resolve(
|
844
|
+
all_instances << type_alias_t('MyInt', 'Integer').resolve(nil)
|
845
845
|
|
846
846
|
all_instances.each { |i| expect(i).not_to be_assignable_to(t) }
|
847
847
|
end
|
@@ -873,7 +873,7 @@ describe 'The type calculator' do
|
|
873
873
|
end
|
874
874
|
|
875
875
|
it 'Data is not assignable to any disjunct type' do
|
876
|
-
tested_types = all_types - [PAnyType, POptionalType] - scalar_types
|
876
|
+
tested_types = all_types - [PAnyType, POptionalType, PInitType] - scalar_types
|
877
877
|
tested_types.each {|t2| expect(data).not_to be_assignable_to(t2::DEFAULT) }
|
878
878
|
end
|
879
879
|
end
|
@@ -909,7 +909,7 @@ describe 'The type calculator' do
|
|
909
909
|
end
|
910
910
|
|
911
911
|
it 'Scalar is not assignable to any disjunct type' do
|
912
|
-
tested_types = all_types - [PAnyType, POptionalType, PNotUndefType] - scalar_types
|
912
|
+
tested_types = all_types - [PAnyType, POptionalType, PInitType, PNotUndefType] - scalar_types
|
913
913
|
t = PScalarType::DEFAULT
|
914
914
|
tested_types.each {|t2| expect(t).not_to be_assignable_to(t2::DEFAULT) }
|
915
915
|
end
|
@@ -931,6 +931,7 @@ describe 'The type calculator' do
|
|
931
931
|
tested_types = all_types - [
|
932
932
|
PAnyType,
|
933
933
|
POptionalType,
|
934
|
+
PInitType,
|
934
935
|
PNotUndefType,
|
935
936
|
PScalarType,
|
936
937
|
PScalarDataType,
|
@@ -1087,6 +1088,7 @@ describe 'The type calculator' do
|
|
1087
1088
|
tested_types = all_types - [
|
1088
1089
|
PAnyType,
|
1089
1090
|
POptionalType,
|
1091
|
+
PInitType,
|
1090
1092
|
PNotUndefType,
|
1091
1093
|
PIterableType] - collection_types
|
1092
1094
|
t = PTupleType::DEFAULT
|
@@ -1100,7 +1102,8 @@ describe 'The type calculator' do
|
|
1100
1102
|
tested_types = collection_types - [
|
1101
1103
|
PCollectionType,
|
1102
1104
|
PStructType,
|
1103
|
-
PHashType
|
1105
|
+
PHashType,
|
1106
|
+
PInitType]
|
1104
1107
|
tested_types.each {|t2| expect(t).not_to be_assignable_to(t2::DEFAULT) }
|
1105
1108
|
end
|
1106
1109
|
|
@@ -1109,7 +1112,8 @@ describe 'The type calculator' do
|
|
1109
1112
|
PAnyType,
|
1110
1113
|
POptionalType,
|
1111
1114
|
PNotUndefType,
|
1112
|
-
PIterableType
|
1115
|
+
PIterableType,
|
1116
|
+
PInitType] - collection_types
|
1113
1117
|
t = PStructType::DEFAULT
|
1114
1118
|
tested_types.each {|t2| expect(t).not_to be_assignable_to(t2::DEFAULT) }
|
1115
1119
|
end
|
@@ -1585,12 +1589,12 @@ describe 'The type calculator' do
|
|
1585
1589
|
let!(:parser) { TypeParser.singleton }
|
1586
1590
|
|
1587
1591
|
it 'it is assignable to the type that it is an alias for' do
|
1588
|
-
t = type_alias_t('Alias', 'Integer').resolve(
|
1592
|
+
t = type_alias_t('Alias', 'Integer').resolve(nil)
|
1589
1593
|
expect(calculator.assignable?(integer_t, t)).to be_truthy
|
1590
1594
|
end
|
1591
1595
|
|
1592
1596
|
it 'the type that it is an alias for is assignable to it' do
|
1593
|
-
t = type_alias_t('Alias', 'Integer').resolve(
|
1597
|
+
t = type_alias_t('Alias', 'Integer').resolve(nil)
|
1594
1598
|
expect(calculator.assignable?(t, integer_t)).to be_truthy
|
1595
1599
|
end
|
1596
1600
|
|
@@ -1603,7 +1607,7 @@ describe 'The type calculator' do
|
|
1603
1607
|
|
1604
1608
|
Adapters::LoaderAdapter.expects(:loader_for_model_object).at_least_once.returns loader
|
1605
1609
|
|
1606
|
-
t.resolve(
|
1610
|
+
t.resolve(scope)
|
1607
1611
|
expect(calculator.assignable?(t, parser.parse('Hash[String,Variant[String,Hash[String,Variant[String,String]]]]'))).to be_truthy
|
1608
1612
|
end
|
1609
1613
|
|
@@ -1619,8 +1623,8 @@ describe 'The type calculator' do
|
|
1619
1623
|
|
1620
1624
|
Adapters::LoaderAdapter.expects(:loader_for_model_object).at_least_once.returns loader
|
1621
1625
|
|
1622
|
-
t1.resolve(
|
1623
|
-
t2.resolve(
|
1626
|
+
t1.resolve(scope)
|
1627
|
+
t2.resolve(scope)
|
1624
1628
|
expect(calculator.assignable?(t1, t2)).to be_truthy
|
1625
1629
|
end
|
1626
1630
|
|
@@ -1633,8 +1637,8 @@ describe 'The type calculator' do
|
|
1633
1637
|
|
1634
1638
|
Adapters::LoaderAdapter.expects(:loader_for_model_object).at_least_once.returns loader
|
1635
1639
|
|
1636
|
-
t1.resolve(
|
1637
|
-
t2.resolve(
|
1640
|
+
t1.resolve(loader)
|
1641
|
+
t2.resolve(loader)
|
1638
1642
|
expect(calculator.assignable?(t1, t2)).to be_truthy
|
1639
1643
|
end
|
1640
1644
|
|
@@ -1723,11 +1727,12 @@ describe 'The type calculator' do
|
|
1723
1727
|
expect(calculator.instance?(POptionalType::DEFAULT, :undef)).to eq(true)
|
1724
1728
|
end
|
1725
1729
|
|
1726
|
-
it 'should not consider undef to be an instance of any other type than Any,
|
1730
|
+
it 'should not consider undef to be an instance of any other type than Any, Undef, Optional, and Init' do
|
1727
1731
|
types_to_test = all_types - [
|
1728
1732
|
PAnyType,
|
1729
1733
|
PUndefType,
|
1730
1734
|
POptionalType,
|
1735
|
+
PInitType
|
1731
1736
|
]
|
1732
1737
|
|
1733
1738
|
types_to_test.each {|t| expect(calculator.instance?(t::DEFAULT, nil)).to eq(false) }
|
@@ -1969,12 +1974,12 @@ describe 'The type calculator' do
|
|
1969
1974
|
let!(:parser) { TypeParser.singleton }
|
1970
1975
|
|
1971
1976
|
it 'should consider x an instance of the aliased simple type' do
|
1972
|
-
t = type_alias_t('Alias', 'Integer').resolve(
|
1977
|
+
t = type_alias_t('Alias', 'Integer').resolve(nil)
|
1973
1978
|
expect(calculator.instance?(t, 15)).to be_truthy
|
1974
1979
|
end
|
1975
1980
|
|
1976
1981
|
it 'should consider x an instance of the aliased parameterized type' do
|
1977
|
-
t = type_alias_t('Alias', 'Integer[0,20]').resolve(
|
1982
|
+
t = type_alias_t('Alias', 'Integer[0,20]').resolve(nil)
|
1978
1983
|
expect(calculator.instance?(t, 15)).to be_truthy
|
1979
1984
|
end
|
1980
1985
|
|
@@ -1985,7 +1990,7 @@ describe 'The type calculator' do
|
|
1985
1990
|
|
1986
1991
|
Adapters::LoaderAdapter.expects(:loader_for_model_object).at_least_once.returns loader
|
1987
1992
|
|
1988
|
-
t.resolve(
|
1993
|
+
t.resolve(loader)
|
1989
1994
|
expect(calculator.instance?(t, {'a'=>{'aa'=>{'aaa'=>'aaaa'}}, 'b'=>'bb'})).to be_truthy
|
1990
1995
|
end
|
1991
1996
|
|
@@ -1998,7 +2003,7 @@ describe 'The type calculator' do
|
|
1998
2003
|
|
1999
2004
|
Adapters::LoaderAdapter.expects(:loader_for_model_object).at_least_once.returns loader
|
2000
2005
|
|
2001
|
-
t1.resolve(
|
2006
|
+
t1.resolve(loader)
|
2002
2007
|
expect(calculator.instance?(t1, {'a'=>{'aa'=>{'aaa'=>'aaaa'}}, 'b'=>'bb'})).to be_truthy
|
2003
2008
|
end
|
2004
2009
|
end
|
@@ -2054,8 +2059,8 @@ describe 'The type calculator' do
|
|
2054
2059
|
end
|
2055
2060
|
|
2056
2061
|
context 'when processing meta type' do
|
2057
|
-
it 'should infer
|
2058
|
-
ptype =
|
2062
|
+
it 'should infer PTypeType as the type of all other types' do
|
2063
|
+
ptype = PTypeType
|
2059
2064
|
expect(calculator.infer(PUndefType::DEFAULT ).is_a?(ptype)).to eq(true)
|
2060
2065
|
expect(calculator.infer(PScalarType::DEFAULT ).is_a?(ptype)).to eq(true)
|
2061
2066
|
expect(calculator.infer(PScalarDataType::DEFAULT).is_a?(ptype)).to eq(true)
|
@@ -2070,7 +2075,7 @@ describe 'The type calculator' do
|
|
2070
2075
|
expect(calculator.infer(PHashType::DEFAULT ).is_a?(ptype)).to eq(true)
|
2071
2076
|
expect(calculator.infer(PIterableType::DEFAULT ).is_a?(ptype)).to eq(true)
|
2072
2077
|
expect(calculator.infer(PRuntimeType::DEFAULT ).is_a?(ptype)).to eq(true)
|
2073
|
-
expect(calculator.infer(
|
2078
|
+
expect(calculator.infer(PClassType::DEFAULT ).is_a?(ptype)).to eq(true)
|
2074
2079
|
expect(calculator.infer(PResourceType::DEFAULT ).is_a?(ptype)).to eq(true)
|
2075
2080
|
expect(calculator.infer(PEnumType::DEFAULT ).is_a?(ptype)).to eq(true)
|
2076
2081
|
expect(calculator.infer(PPatternType::DEFAULT ).is_a?(ptype)).to eq(true)
|
@@ -2080,7 +2085,7 @@ describe 'The type calculator' do
|
|
2080
2085
|
expect(calculator.infer(PCallableType::DEFAULT ).is_a?(ptype)).to eq(true)
|
2081
2086
|
end
|
2082
2087
|
|
2083
|
-
it 'should infer
|
2088
|
+
it 'should infer PTypeType as the type of all other types' do
|
2084
2089
|
expect(calculator.infer(PUndefType::DEFAULT ).to_s).to eq('Type[Undef]')
|
2085
2090
|
expect(calculator.infer(PScalarType::DEFAULT ).to_s).to eq('Type[Scalar]')
|
2086
2091
|
expect(calculator.infer(PScalarDataType::DEFAULT).to_s).to eq('Type[ScalarData]')
|
@@ -2094,8 +2099,8 @@ describe 'The type calculator' do
|
|
2094
2099
|
expect(calculator.infer(PArrayType::DEFAULT ).to_s).to eq('Type[Array]')
|
2095
2100
|
expect(calculator.infer(PHashType::DEFAULT ).to_s).to eq('Type[Hash]')
|
2096
2101
|
expect(calculator.infer(PIterableType::DEFAULT ).to_s).to eq('Type[Iterable]')
|
2097
|
-
expect(calculator.infer(PRuntimeType::DEFAULT ).to_s).to eq('Type[Runtime
|
2098
|
-
expect(calculator.infer(
|
2102
|
+
expect(calculator.infer(PRuntimeType::DEFAULT ).to_s).to eq('Type[Runtime]')
|
2103
|
+
expect(calculator.infer(PClassType::DEFAULT ).to_s).to eq('Type[Class]')
|
2099
2104
|
expect(calculator.infer(PResourceType::DEFAULT ).to_s).to eq('Type[Resource]')
|
2100
2105
|
expect(calculator.infer(PEnumType::DEFAULT ).to_s).to eq('Type[Enum]')
|
2101
2106
|
expect(calculator.infer(PVariantType::DEFAULT ).to_s).to eq('Type[Variant]')
|
@@ -2109,23 +2114,23 @@ describe 'The type calculator' do
|
|
2109
2114
|
expect(calculator.infer(PResourceType.new('Foo::Fee::Fum')).to_s).to eq('Type[Foo::Fee::Fum]')
|
2110
2115
|
end
|
2111
2116
|
|
2112
|
-
it "computes the common type of
|
2117
|
+
it "computes the common type of PTypeType's type parameter" do
|
2113
2118
|
int_t = PIntegerType::DEFAULT
|
2114
2119
|
string_t = PStringType::DEFAULT
|
2115
2120
|
expect(calculator.infer([int_t]).to_s).to eq('Array[Type[Integer], 1, 1]')
|
2116
2121
|
expect(calculator.infer([int_t, string_t]).to_s).to eq('Array[Type[ScalarData], 2, 2]')
|
2117
2122
|
end
|
2118
2123
|
|
2119
|
-
it 'should infer
|
2124
|
+
it 'should infer PTypeType as the type of ruby classes' do
|
2120
2125
|
class Foo
|
2121
2126
|
end
|
2122
2127
|
[Object, Numeric, Integer, Fixnum, Bignum, Float, String, Regexp, Array, Hash, Foo].each do |c|
|
2123
|
-
expect(calculator.infer(c).is_a?(
|
2128
|
+
expect(calculator.infer(c).is_a?(PTypeType)).to eq(true)
|
2124
2129
|
end
|
2125
2130
|
end
|
2126
2131
|
|
2127
|
-
it 'should infer
|
2128
|
-
expect(calculator.infer(
|
2132
|
+
it 'should infer PTypeType as the type of PTypeType (meta regression short-circuit)' do
|
2133
|
+
expect(calculator.infer(PTypeType::DEFAULT).is_a?(PTypeType)).to eq(true)
|
2129
2134
|
end
|
2130
2135
|
|
2131
2136
|
it 'computes instance? to be true if parameterized and type match' do
|
@@ -2148,7 +2153,7 @@ describe 'The type calculator' do
|
|
2148
2153
|
it 'computes instance? to be true if unparameterized and matched against a type[?]' do
|
2149
2154
|
int_t = PIntegerType::DEFAULT
|
2150
2155
|
type_t = TypeFactory.type_type(int_t)
|
2151
|
-
expect(calculator.instance?(
|
2156
|
+
expect(calculator.instance?(PTypeType::DEFAULT, type_t)).to eq(true)
|
2152
2157
|
end
|
2153
2158
|
end
|
2154
2159
|
|
@@ -133,21 +133,21 @@ describe 'The type factory' do
|
|
133
133
|
expect(pr.type_name).to eq('X')
|
134
134
|
end
|
135
135
|
|
136
|
-
it 'host_class() creates a generic
|
136
|
+
it 'host_class() creates a generic PClassType' do
|
137
137
|
hc = TypeFactory.host_class()
|
138
|
-
expect(hc.class()).to eq(
|
138
|
+
expect(hc.class()).to eq(PClassType)
|
139
139
|
expect(hc.class_name).to eq(nil)
|
140
140
|
end
|
141
141
|
|
142
|
-
it 'host_class(x) creates a
|
142
|
+
it 'host_class(x) creates a PClassType[x]' do
|
143
143
|
hc = TypeFactory.host_class('x')
|
144
|
-
expect(hc.class()).to eq(
|
144
|
+
expect(hc.class()).to eq(PClassType)
|
145
145
|
expect(hc.class_name).to eq('x')
|
146
146
|
end
|
147
147
|
|
148
|
-
it 'host_class(::x) creates a
|
148
|
+
it 'host_class(::x) creates a PClassType[x]' do
|
149
149
|
hc = TypeFactory.host_class('::x')
|
150
|
-
expect(hc.class()).to eq(
|
150
|
+
expect(hc.class()).to eq(PClassType)
|
151
151
|
expect(hc.class_name).to eq('x')
|
152
152
|
end
|
153
153
|
|
@@ -83,7 +83,7 @@ FORMATTED
|
|
83
83
|
context 'when representing the type as string' do
|
84
84
|
include_context 'types_setup'
|
85
85
|
|
86
|
-
it "should yield 'Type' for
|
86
|
+
it "should yield 'Type' for PTypeType" do
|
87
87
|
expect(s.string(f.type_type)).to eq('Type')
|
88
88
|
end
|
89
89
|
|
@@ -265,11 +265,11 @@ FORMATTED
|
|
265
265
|
expect(s.string(f.hash_of_any)).to eq('Hash')
|
266
266
|
end
|
267
267
|
|
268
|
-
it "should yield 'Class' for a
|
268
|
+
it "should yield 'Class' for a PClassType" do
|
269
269
|
expect(s.string(f.host_class)).to eq('Class')
|
270
270
|
end
|
271
271
|
|
272
|
-
it "should yield 'Class[x]' for a
|
272
|
+
it "should yield 'Class[x]' for a PClassType[x]" do
|
273
273
|
expect(s.string(f.host_class('x'))).to eq('Class[x]')
|
274
274
|
end
|
275
275
|
|
@@ -397,12 +397,12 @@ FORMATTED
|
|
397
397
|
end
|
398
398
|
|
399
399
|
it 'should present a valid simple name' do
|
400
|
-
(all_types - [
|
400
|
+
(all_types - [PTypeType, PClassType]).each do |t|
|
401
401
|
name = t::DEFAULT.simple_name
|
402
402
|
expect(t.name).to match("^Puppet::Pops::Types::P#{name}Type$")
|
403
403
|
end
|
404
|
-
expect(
|
405
|
-
expect(
|
404
|
+
expect(PTypeType::DEFAULT.simple_name).to eql('Type')
|
405
|
+
expect(PClassType::DEFAULT.simple_name).to eql('Class')
|
406
406
|
end
|
407
407
|
end
|
408
408
|
end
|