Layout multiple inheritance works with operators

The case of using relative operators and multiple inheritance is handled now.

Fixes #244
This commit is contained in:
Andy Meneely
2018-07-31 15:07:33 -04:00
parent 3d1f1ff989
commit 248eb2fb91
7 changed files with 108 additions and 14 deletions
@@ -0,0 +1,12 @@
# Here's a complex test case inspired by bug 244
socrates:
x: 100
y: 1000
plato:
y: 2000
aristotle:
extends:
- socrates
- plato
x: += 0.1in # 0.1in -> 30.0, so 100 + 30 = 130.0
y: += 18 # From Plato, 2000 + 18
@@ -0,0 +1,9 @@
socrates:
x: 100
plato:
x: 200
aristotle:
extends:
- socrates
- plato
x: += 50 # evaluates to 250 from plato
@@ -0,0 +1,9 @@
socrates:
x: 100
plato:
y: 200
aristotle:
extends:
- socrates
- plato
x: += 50 # evaluates to 150 from socrates
+51
View File
@@ -92,6 +92,57 @@ describe Squib::LayoutParser do
)
end
it 'applies multiple extends with relative operators' do
layout = subject.load_layout(layout_file('multi-extends-operators.yml'))
expect(layout).to eq({
'socrates' => {
'x' => 100,
},
'plato' => {
'y' => 200,
},
'aristotle' => {
'extends' => ['socrates', 'plato'],
'x' => 150.0, # do the += 50 on socrates
'y' => 200,
},
})
end
it 'applies multiple extends with relative operators on same key' do
layout = subject.load_layout(layout_file('multi-extends-operators-same.yml'))
expect(layout).to eq({
'socrates' => {
'x' => 100,
},
'plato' => {
'x' => 200,
},
'aristotle' => {
'extends' => ['socrates', 'plato'],
'x' => 250, # do the += 50 from plato, NOT socrates
},
})
end
it 'applies multiple extends with relative operators with ' do
layout = subject.load_layout(layout_file('multi-extends-operators-complex.yml'))
expect(layout).to eq({
'socrates' => {
'x' => 100,
'y' => 1000,
},
'plato' => {
'y' => 2000,
},
'aristotle' => {
'extends' => ['socrates', 'plato'],
'x' => 130.0, # 0.1in -> 30.0, so 100 + 30 = 130.0
'y' => 2018.0, # From Plato, 2000 + 18
},
})
end
it 'applies multi-level extends' do
layout = subject.load_layout(layout_file('multi-level-extends.yml'))
expect(layout).to eq({ 'frame' => {
+1 -1
View File
@@ -1,6 +1,6 @@
require 'simplecov'
require 'coveralls'
# require 'byebug'
require 'byebug'
SimpleCov.formatter = SimpleCov::Formatter::MultiFormatter.new([
SimpleCov::Formatter::HTMLFormatter,