mirror of
https://github.com/unidoc/unioffice.git
synced 2025-04-25 13:48:53 +08:00

* update license and terms * Fixes * Create ACKNOWLEDGEMENTS.md * Update ACKNOWLEDGEMENTS.md * Revert go.mod changes and remove go1.11 tests
156 lines
4.2 KiB
Go
156 lines
4.2 KiB
Go
// Copyright 2017 FoxyUtils ehf. All rights reserved.
|
|
//
|
|
// Use of this software package and source code is governed by the terms of the
|
|
// UniDoc End User License Agreement (EULA) that is available at:
|
|
// https://unidoc.io/eula/
|
|
// A trial license code for evaluation can be obtained at https://unidoc.io.
|
|
|
|
package common_test
|
|
|
|
import (
|
|
"bytes"
|
|
"encoding/xml"
|
|
"os"
|
|
"testing"
|
|
|
|
"github.com/unidoc/unioffice/common"
|
|
"github.com/unidoc/unioffice/testhelper"
|
|
"github.com/unidoc/unioffice/zippkg"
|
|
)
|
|
|
|
func TestRelationshipsUnmarshal(t *testing.T) {
|
|
f, err := os.Open("testdata/rels.xml")
|
|
if err != nil {
|
|
t.Fatalf("error reading content types file")
|
|
}
|
|
dec := xml.NewDecoder(f)
|
|
r := common.NewRelationships()
|
|
if err := dec.Decode(r.X()); err != nil {
|
|
t.Errorf("error decoding content types: %s", err)
|
|
}
|
|
got := &bytes.Buffer{}
|
|
enc := xml.NewEncoder(zippkg.SelfClosingWriter{W: got})
|
|
if err := enc.Encode(r.X()); err != nil {
|
|
t.Errorf("error encoding content types: %s", err)
|
|
}
|
|
|
|
testhelper.CompareGoldenXML(t, "rels.xml", got.Bytes())
|
|
}
|
|
|
|
func TestRelationshipsCreation(t *testing.T) {
|
|
f, err := os.Open("testdata/rels.xml")
|
|
if err != nil {
|
|
t.Fatalf("error reading content types file")
|
|
}
|
|
dec := xml.NewDecoder(f)
|
|
r := common.NewRelationships()
|
|
if err := dec.Decode(r.X()); err != nil {
|
|
t.Errorf("error decoding content types: %s", err)
|
|
}
|
|
|
|
rel := r.AddRelationship("foo", "http://bar")
|
|
|
|
// testdata/rels.xml contains rels with IDs 2,3,4. We used to
|
|
// just use the len, but issue #198 pointed out a problem with
|
|
// that. Now it should check and see that rId4 is in use, and
|
|
// go to the next free ID.
|
|
exp := "rId5"
|
|
if rel.ID() != exp {
|
|
t.Errorf("expected %s, got %s", exp, rel.ID())
|
|
}
|
|
// 6 is unused, so we should get it next
|
|
rel = r.AddRelationship("foo", "http://bar")
|
|
exp = "rId6"
|
|
if rel.ID() != exp {
|
|
t.Errorf("expected %s, got %s", exp, rel.ID())
|
|
}
|
|
}
|
|
|
|
func TestRelationshipsCreationUnordered(t *testing.T) {
|
|
r := common.NewRelationships()
|
|
r.AddRelationship("foo", "http://bar").X().IdAttr = "rId1"
|
|
r.AddRelationship("foo", "http://bar").X().IdAttr = "rId3"
|
|
r.AddRelationship("foo", "http://bar").X().IdAttr = "rId5"
|
|
r.AddRelationship("foo", "http://bar").X().IdAttr = "rId7"
|
|
|
|
// len is 4, but id 5 is used, so we should get 6 next
|
|
rel := r.AddRelationship("foo", "http://bar")
|
|
|
|
exp := "rId6"
|
|
if rel.ID() != exp {
|
|
t.Errorf("expected %s, got %s", exp, rel.ID())
|
|
}
|
|
|
|
// would get 7, but it's in use so we get 8 now
|
|
rel = r.AddRelationship("foo", "http://bar")
|
|
exp = "rId8"
|
|
if rel.ID() != exp {
|
|
t.Errorf("expected %s, got %s", exp, rel.ID())
|
|
}
|
|
|
|
}
|
|
|
|
func TestRelationshipsRemoval(t *testing.T) {
|
|
r := common.NewRelationships()
|
|
r.AddRelationship("foo1", "http://bar")
|
|
r.AddRelationship("foo2", "http://bar")
|
|
r.AddRelationship("foo3", "http://bar")
|
|
|
|
if len(r.Relationships()) != 3 {
|
|
t.Errorf("expected 3, got %d", len(r.Relationships()))
|
|
}
|
|
r.Remove(r.Relationships()[0])
|
|
|
|
if len(r.Relationships()) != 2 {
|
|
t.Errorf("expected 2, got %d", len(r.Relationships()))
|
|
}
|
|
if got := r.Relationships()[0].Target(); got != "foo2" {
|
|
t.Errorf("expected foo2, got %s", got)
|
|
}
|
|
if got := r.Relationships()[1].Target(); got != "foo3" {
|
|
t.Errorf("expected foo3, got %s", got)
|
|
}
|
|
r.Remove(r.Relationships()[1])
|
|
|
|
if len(r.Relationships()) != 1 {
|
|
t.Errorf("expected 1, got %d", len(r.Relationships()))
|
|
}
|
|
if got := r.Relationships()[0].Target(); got != "foo2" {
|
|
t.Errorf("expected foo2, got %s", got)
|
|
}
|
|
|
|
r.Remove(r.Relationships()[0])
|
|
if len(r.Relationships()) != 0 {
|
|
t.Errorf("expected 0, got %d", len(r.Relationships()))
|
|
}
|
|
}
|
|
|
|
func TestCopyRelationship(t *testing.T) {
|
|
r := common.NewRelationships()
|
|
r.AddRelationship("foo1", "http://bar")
|
|
r.AddRelationship("foo2", "http://bar")
|
|
r.AddRelationship("foo3", "http://bar")
|
|
|
|
if len(r.Relationships()) != 3 {
|
|
t.Errorf("expected 3, got %d", len(r.Relationships()))
|
|
}
|
|
|
|
copied, ok := r.CopyRelationship(r.Relationships()[1].ID())
|
|
if !ok {
|
|
t.Errorf("expected true, got %v", ok)
|
|
}
|
|
|
|
if len(r.Relationships()) != 4 {
|
|
t.Errorf("expected 4, got %d", len(r.Relationships()))
|
|
}
|
|
|
|
if got := copied.Target(); got != "foo2" {
|
|
t.Errorf("expected foo2, got %s", got)
|
|
}
|
|
|
|
_, ok = r.CopyRelationship("qweqwe")
|
|
if ok {
|
|
t.Errorf("expected false, got %v", ok)
|
|
}
|
|
}
|