mirror of
https://github.com/gohugoio/hugo.git
synced 2024-12-23 18:12:13 +00:00
f9978ed164
This commit pulls most of the image related logic into its own package, to make it easier to reason about and extend. This is also a rewrite of the transformation logic used in Hugo Pipes, mostly to allow constructs like the one below: {{ ($myimg | fingerprint ).Width }} Fixes #5903 Fixes #6234 Fixes #6266
231 lines
6.1 KiB
Go
231 lines
6.1 KiB
Go
// Copyright 2019 The Hugo Authors. All rights reserved.
|
|
//
|
|
// 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.
|
|
|
|
package resources
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"github.com/gohugoio/hugo/media"
|
|
"github.com/gohugoio/hugo/resources/resource"
|
|
|
|
qt "github.com/frankban/quicktest"
|
|
)
|
|
|
|
func TestAssignMetadata(t *testing.T) {
|
|
c := qt.New(t)
|
|
spec := newTestResourceSpec(specDescriptor{c: c})
|
|
|
|
var foo1, foo2, foo3, logo1, logo2, logo3 resource.Resource
|
|
var resources resource.Resources
|
|
|
|
for _, this := range []struct {
|
|
metaData []map[string]interface{}
|
|
assertFunc func(err error)
|
|
}{
|
|
{[]map[string]interface{}{
|
|
{
|
|
"title": "My Resource",
|
|
"name": "My Name",
|
|
"src": "*",
|
|
},
|
|
}, func(err error) {
|
|
c.Assert(logo1.Title(), qt.Equals, "My Resource")
|
|
c.Assert(logo1.Name(), qt.Equals, "My Name")
|
|
c.Assert(foo2.Name(), qt.Equals, "My Name")
|
|
|
|
}},
|
|
{[]map[string]interface{}{
|
|
{
|
|
"title": "My Logo",
|
|
"src": "*loGo*",
|
|
},
|
|
{
|
|
"title": "My Resource",
|
|
"name": "My Name",
|
|
"src": "*",
|
|
},
|
|
}, func(err error) {
|
|
c.Assert(logo1.Title(), qt.Equals, "My Logo")
|
|
c.Assert(logo2.Title(), qt.Equals, "My Logo")
|
|
c.Assert(logo1.Name(), qt.Equals, "My Name")
|
|
c.Assert(foo2.Name(), qt.Equals, "My Name")
|
|
c.Assert(foo3.Name(), qt.Equals, "My Name")
|
|
c.Assert(foo3.Title(), qt.Equals, "My Resource")
|
|
|
|
}},
|
|
{[]map[string]interface{}{
|
|
{
|
|
"title": "My Logo",
|
|
"src": "*loGo*",
|
|
"params": map[string]interface{}{
|
|
"Param1": true,
|
|
"icon": "logo",
|
|
},
|
|
},
|
|
{
|
|
"title": "My Resource",
|
|
"src": "*",
|
|
"params": map[string]interface{}{
|
|
"Param2": true,
|
|
"icon": "resource",
|
|
},
|
|
},
|
|
}, func(err error) {
|
|
c.Assert(err, qt.IsNil)
|
|
c.Assert(logo1.Title(), qt.Equals, "My Logo")
|
|
c.Assert(foo3.Title(), qt.Equals, "My Resource")
|
|
_, p1 := logo2.Params()["param1"]
|
|
_, p2 := foo2.Params()["param2"]
|
|
_, p1_2 := foo2.Params()["param1"]
|
|
_, p2_2 := logo2.Params()["param2"]
|
|
|
|
icon1 := logo2.Params()["icon"]
|
|
icon2 := foo2.Params()["icon"]
|
|
|
|
c.Assert(p1, qt.Equals, true)
|
|
c.Assert(p2, qt.Equals, true)
|
|
|
|
// Check merge
|
|
c.Assert(p2_2, qt.Equals, true)
|
|
c.Assert(p1_2, qt.Equals, false)
|
|
|
|
c.Assert(icon1, qt.Equals, "logo")
|
|
c.Assert(icon2, qt.Equals, "resource")
|
|
|
|
}},
|
|
{[]map[string]interface{}{
|
|
{
|
|
"name": "Logo Name #:counter",
|
|
"src": "*logo*",
|
|
},
|
|
{
|
|
"title": "Resource #:counter",
|
|
"name": "Name #:counter",
|
|
"src": "*",
|
|
},
|
|
}, func(err error) {
|
|
c.Assert(err, qt.IsNil)
|
|
c.Assert(logo2.Title(), qt.Equals, "Resource #2")
|
|
c.Assert(logo2.Name(), qt.Equals, "Logo Name #1")
|
|
c.Assert(logo1.Title(), qt.Equals, "Resource #4")
|
|
c.Assert(logo1.Name(), qt.Equals, "Logo Name #2")
|
|
c.Assert(foo2.Title(), qt.Equals, "Resource #1")
|
|
c.Assert(foo1.Title(), qt.Equals, "Resource #3")
|
|
c.Assert(foo1.Name(), qt.Equals, "Name #2")
|
|
c.Assert(foo3.Title(), qt.Equals, "Resource #5")
|
|
|
|
c.Assert(resources.GetMatch("logo name #1*"), qt.Equals, logo2)
|
|
|
|
}},
|
|
{[]map[string]interface{}{
|
|
{
|
|
"title": "Third Logo #:counter",
|
|
"src": "logo3.png",
|
|
},
|
|
{
|
|
"title": "Other Logo #:counter",
|
|
"name": "Name #:counter",
|
|
"src": "logo*",
|
|
},
|
|
}, func(err error) {
|
|
c.Assert(err, qt.IsNil)
|
|
c.Assert(logo3.Title(), qt.Equals, "Third Logo #1")
|
|
c.Assert(logo3.Name(), qt.Equals, "Name #3")
|
|
c.Assert(logo2.Title(), qt.Equals, "Other Logo #1")
|
|
c.Assert(logo2.Name(), qt.Equals, "Name #1")
|
|
c.Assert(logo1.Title(), qt.Equals, "Other Logo #2")
|
|
c.Assert(logo1.Name(), qt.Equals, "Name #2")
|
|
|
|
}},
|
|
{[]map[string]interface{}{
|
|
{
|
|
"title": "Third Logo",
|
|
"src": "logo3.png",
|
|
},
|
|
{
|
|
"title": "Other Logo #:counter",
|
|
"name": "Name #:counter",
|
|
"src": "logo*",
|
|
},
|
|
}, func(err error) {
|
|
c.Assert(err, qt.IsNil)
|
|
c.Assert(logo3.Title(), qt.Equals, "Third Logo")
|
|
c.Assert(logo3.Name(), qt.Equals, "Name #3")
|
|
c.Assert(logo2.Title(), qt.Equals, "Other Logo #1")
|
|
c.Assert(logo2.Name(), qt.Equals, "Name #1")
|
|
c.Assert(logo1.Title(), qt.Equals, "Other Logo #2")
|
|
c.Assert(logo1.Name(), qt.Equals, "Name #2")
|
|
|
|
}},
|
|
{[]map[string]interface{}{
|
|
{
|
|
"name": "third-logo",
|
|
"src": "logo3.png",
|
|
},
|
|
{
|
|
"title": "Logo #:counter",
|
|
"name": "Name #:counter",
|
|
"src": "logo*",
|
|
},
|
|
}, func(err error) {
|
|
c.Assert(err, qt.IsNil)
|
|
c.Assert(logo3.Title(), qt.Equals, "Logo #3")
|
|
c.Assert(logo3.Name(), qt.Equals, "third-logo")
|
|
c.Assert(logo2.Title(), qt.Equals, "Logo #1")
|
|
c.Assert(logo2.Name(), qt.Equals, "Name #1")
|
|
c.Assert(logo1.Title(), qt.Equals, "Logo #2")
|
|
c.Assert(logo1.Name(), qt.Equals, "Name #2")
|
|
|
|
}},
|
|
{[]map[string]interface{}{
|
|
{
|
|
"title": "Third Logo #:counter",
|
|
},
|
|
}, func(err error) {
|
|
// Missing src
|
|
c.Assert(err, qt.Not(qt.IsNil))
|
|
|
|
}},
|
|
{[]map[string]interface{}{
|
|
{
|
|
"title": "Title",
|
|
"src": "[]",
|
|
},
|
|
}, func(err error) {
|
|
// Invalid pattern
|
|
c.Assert(err, qt.Not(qt.IsNil))
|
|
|
|
}},
|
|
} {
|
|
|
|
foo2 = spec.newGenericResource(nil, nil, nil, "/b/foo2.css", "foo2.css", media.CSSType)
|
|
logo2 = spec.newGenericResource(nil, nil, nil, "/b/Logo2.png", "Logo2.png", pngType)
|
|
foo1 = spec.newGenericResource(nil, nil, nil, "/a/foo1.css", "foo1.css", media.CSSType)
|
|
logo1 = spec.newGenericResource(nil, nil, nil, "/a/logo1.png", "logo1.png", pngType)
|
|
foo3 = spec.newGenericResource(nil, nil, nil, "/b/foo3.css", "foo3.css", media.CSSType)
|
|
logo3 = spec.newGenericResource(nil, nil, nil, "/b/logo3.png", "logo3.png", pngType)
|
|
|
|
resources = resource.Resources{
|
|
foo2,
|
|
logo2,
|
|
foo1,
|
|
logo1,
|
|
foo3,
|
|
logo3,
|
|
}
|
|
|
|
this.assertFunc(AssignMetadata(this.metaData, resources...))
|
|
}
|
|
|
|
}
|