1
0
Fork 0

Adding upstream version 3.10.8.

Signed-off-by: Daniel Baumann <daniel@debian.org>
This commit is contained in:
Daniel Baumann 2025-05-18 09:37:23 +02:00
parent 37e9b6d587
commit 03bfe4079e
Signed by: daniel
GPG key ID: FBB4F0E80A80222F
356 changed files with 28857 additions and 0 deletions

View file

@ -0,0 +1,166 @@
// Copyright Earl Warren <contact@earl-warren.org>
// Copyright Loïc Dachary <loic@dachary.org>
// SPDX-License-Identifier: MIT
package generic
import (
"context"
"testing"
"code.forgejo.org/f3/gof3/v3/f3"
"code.forgejo.org/f3/gof3/v3/id"
"code.forgejo.org/f3/gof3/v3/kind"
"code.forgejo.org/f3/gof3/v3/path"
"github.com/stretchr/testify/assert"
)
type referenceFormat struct {
f3.Common
R *f3.Reference
}
func (o *referenceFormat) Clone() f3.Interface {
clone := &referenceFormat{}
*clone = *o
return clone
}
func (o *referenceFormat) GetReferences() f3.References {
references := o.Common.GetReferences()
if o.R != nil {
references = append(references, o.R)
}
return references
}
type referencesNodeDriver struct {
NullDriver
f referenceFormat
}
func (o *referencesNodeDriver) GetIDFromName(ctx context.Context, name string) id.NodeID {
return id.NilID
}
func (o *referencesNodeDriver) Get(context.Context) bool {
return true
}
func (o *referencesNodeDriver) NewFormat() f3.Interface {
return &referenceFormat{}
}
func (o *referencesNodeDriver) ToFormat() f3.Interface {
return &o.f
}
func (o *referencesNodeDriver) FromFormat(f f3.Interface) {
o.f = *f.(*referenceFormat)
}
func newReferencesNodeDriver() NodeDriverInterface {
return &referencesNodeDriver{}
}
type testTreeReferencesDriver struct {
NullTreeDriver
}
func newTestTreeReferencesDriver() TreeDriverInterface {
return &testTreeReferencesDriver{}
}
func (o *testTreeReferencesDriver) Factory(ctx context.Context, kind kind.Kind) NodeDriverInterface {
d := newReferencesNodeDriver()
d.SetTreeDriver(o)
return d
}
var kindTestNodeReferences = kind.Kind("references")
type testNodeReferences struct {
testNode
}
func newTestTreeReferences() TreeInterface {
tree := &testTree{}
tree.Init(tree, newTestOptions())
tree.SetDriver(newTestTreeReferencesDriver())
tree.Register(kindTestNodeReferences, func(ctx context.Context, kind kind.Kind) NodeInterface {
node := &testNodeReferences{}
return node.Init(node)
})
return tree
}
func TestTreeCollectReferences(t *testing.T) {
tree := newTestTreeReferences()
root := tree.Factory(context.Background(), kindTestNodeReferences)
tree.SetRoot(root)
one := tree.Factory(context.Background(), kindTestNodeReferences)
one.FromFormat(&referenceFormat{R: f3.NewReference("/somewhere")})
one.SetID(id.NewNodeID("one"))
root.SetChild(one)
// the second node that has the same reference is here to ensure
// they are deduplicated
two := tree.Factory(context.Background(), kindTestNodeReferences)
two.FromFormat(&referenceFormat{R: f3.NewReference("/somewhere")})
two.SetID(id.NewNodeID("two"))
root.SetChild(two)
references := TreeCollectReferences(context.Background(), tree, path.NewPathFromString(NewElementNode, "/"))
assert.Len(t, references, 1)
assert.EqualValues(t, "/somewhere", references[0].String())
}
func TestRemapReferences(t *testing.T) {
tree := newTestTreeReferences()
root := tree.Factory(context.Background(), kindTestNodeReferences)
tree.SetRoot(root)
one := tree.Factory(context.Background(), kindTestNodeReferences)
one.SetID(id.NewNodeID("one"))
one.SetMappedID(id.NewNodeID("remappedone"))
one.SetParent(root)
root.SetChild(one)
two := tree.Factory(context.Background(), kindTestNodeReferences)
two.FromFormat(&referenceFormat{R: f3.NewReference("/one")})
two.SetID(id.NewNodeID("two"))
two.SetMappedID(id.NewNodeID("two"))
two.SetParent(root)
root.SetChild(two)
{
f := two.ToFormat()
RemapReferences(context.Background(), two, f)
r := f.GetReferences()
if assert.Len(t, r, 1) {
assert.Equal(t, "/remappedone", r[0].Get())
}
}
three := tree.Factory(context.Background(), kindTestNodeReferences)
three.FromFormat(&referenceFormat{R: f3.NewReference("../../one")})
three.SetID(id.NewNodeID("three"))
three.SetMappedID(id.NewNodeID("three"))
three.SetParent(two)
two.SetChild(three)
{
f := three.ToFormat()
RemapReferences(context.Background(), three, f)
r := f.GetReferences()
if assert.Len(t, r, 1) {
assert.Equal(t, "../../remappedone", r[0].Get())
}
}
assert.Panics(t, func() { RemapReferences(context.Background(), three, &referenceFormat{R: f3.NewReference("./one")}) })
}