mirror of
https://github.com/gohugoio/hugo.git
synced 2024-11-21 20:46:30 -05:00
parent
f4e1cb8d05
commit
5e66094775
2 changed files with 50 additions and 13 deletions
|
@ -90,17 +90,13 @@ func (*Namespace) Default(dflt interface{}, given ...interface{}) (interface{},
|
|||
return dflt, nil
|
||||
}
|
||||
|
||||
// Eq returns the boolean truth of arg1 == arg2.
|
||||
func (ns *Namespace) Eq(x, y interface{}) bool {
|
||||
if ns.caseInsensitive {
|
||||
// Eq returns the boolean truth of arg1 == arg2 || arg1 == arg3 || arg1 == arg4.
|
||||
func (n *Namespace) Eq(first interface{}, others ...interface{}) bool {
|
||||
if n.caseInsensitive {
|
||||
panic("caseInsensitive not implemented for Eq")
|
||||
}
|
||||
if e, ok := x.(compare.Eqer); ok {
|
||||
return e.Eq(y)
|
||||
}
|
||||
|
||||
if e, ok := y.(compare.Eqer); ok {
|
||||
return e.Eq(x)
|
||||
if len(others) == 0 {
|
||||
panic("missing arguments for comparison")
|
||||
}
|
||||
|
||||
normalize := func(v interface{}) interface{} {
|
||||
|
@ -119,9 +115,24 @@ func (ns *Namespace) Eq(x, y interface{}) bool {
|
|||
return v
|
||||
}
|
||||
}
|
||||
x = normalize(x)
|
||||
y = normalize(y)
|
||||
return reflect.DeepEqual(x, y)
|
||||
|
||||
normFirst := normalize(first)
|
||||
for _, other := range others {
|
||||
if e, ok := first.(compare.Eqer); ok {
|
||||
return e.Eq(other)
|
||||
}
|
||||
|
||||
if e, ok := other.(compare.Eqer); ok {
|
||||
return e.Eq(first)
|
||||
}
|
||||
|
||||
other = normalize(other)
|
||||
if reflect.DeepEqual(normFirst, other) {
|
||||
return true
|
||||
}
|
||||
}
|
||||
|
||||
return false
|
||||
}
|
||||
|
||||
// Ne returns the boolean truth of arg1 != arg2.
|
||||
|
|
|
@ -145,6 +145,10 @@ func TestCompare(t *testing.T) {
|
|||
|
||||
n := New(false)
|
||||
|
||||
twoEq := func(a, b interface{}) bool {
|
||||
return n.Eq(a, b)
|
||||
}
|
||||
|
||||
for _, test := range []struct {
|
||||
tstCompareType
|
||||
funcUnderTest func(a, b interface{}) bool
|
||||
|
@ -153,7 +157,7 @@ func TestCompare(t *testing.T) {
|
|||
{tstLt, n.Lt},
|
||||
{tstGe, n.Ge},
|
||||
{tstLe, n.Le},
|
||||
{tstEq, n.Eq},
|
||||
{tstEq, twoEq},
|
||||
{tstNe, n.Ne},
|
||||
} {
|
||||
doTestCompare(t, test.tstCompareType, test.funcUnderTest)
|
||||
|
@ -237,6 +241,28 @@ func doTestCompare(t *testing.T, tp tstCompareType, funcUnderTest func(a, b inte
|
|||
}
|
||||
}
|
||||
|
||||
func TestEqualExtend(t *testing.T) {
|
||||
t.Parallel()
|
||||
c := qt.New(t)
|
||||
|
||||
ns := New(false)
|
||||
|
||||
for _, test := range []struct {
|
||||
first interface{}
|
||||
others []interface{}
|
||||
expect bool
|
||||
}{
|
||||
{1, []interface{}{1, 2}, true},
|
||||
{1, []interface{}{2, 1}, true},
|
||||
{1, []interface{}{2, 3}, false},
|
||||
} {
|
||||
|
||||
result := ns.Eq(test.first, test.others...)
|
||||
|
||||
c.Assert(result, qt.Equals, test.expect)
|
||||
}
|
||||
}
|
||||
|
||||
func TestCase(t *testing.T) {
|
||||
c := qt.New(t)
|
||||
n := New(true)
|
||||
|
|
Loading…
Reference in a new issue