Skip to content

Commit a1c6f71

Browse files
wip
1 parent 90b874d commit a1c6f71

8 files changed

Lines changed: 553 additions & 614 deletions

File tree

go.mod

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,15 @@ module github.com/hyphacoop/go-dasl
33
go 1.24.5
44

55
require (
6-
github.com/hyphacoop/cbor/v2 v2.0.0-20250827195905-4b6b4a1b5aef
6+
github.com/hyphacoop/cbor/v2 v2.0.0-20250909151137-0da16f29fd40
77
github.com/multiformats/go-varint v0.1.0
8+
github.com/stretchr/testify v1.11.1
89
pgregory.net/rapid v1.2.0
910
)
1011

11-
require github.com/x448/float16 v0.8.4 // indirect
12+
require (
13+
github.com/davecgh/go-spew v1.1.1 // indirect
14+
github.com/pmezard/go-difflib v1.0.0 // indirect
15+
github.com/x448/float16 v0.8.4 // indirect
16+
gopkg.in/yaml.v3 v3.0.1 // indirect
17+
)

go.sum

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,18 @@
1-
github.com/hyphacoop/cbor/v2 v2.0.0-20250827195905-4b6b4a1b5aef h1:4kTG6LyAEeU8LUlGpQAOg+deIyRf/L06ZnoYGqno4ec=
2-
github.com/hyphacoop/cbor/v2 v2.0.0-20250827195905-4b6b4a1b5aef/go.mod h1:1ny0WdocVllO4iUxV5eXuJ9vMzmZ2nITeZg7uBxVEeU=
1+
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
2+
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
3+
github.com/hyphacoop/cbor/v2 v2.0.0-20250909151137-0da16f29fd40 h1:ZUVZFrDwhTyBKMIQuVoqQdXlRHpWCI9Rx38/XSQvNWY=
4+
github.com/hyphacoop/cbor/v2 v2.0.0-20250909151137-0da16f29fd40/go.mod h1:1ny0WdocVllO4iUxV5eXuJ9vMzmZ2nITeZg7uBxVEeU=
35
github.com/multiformats/go-varint v0.1.0 h1:i2wqFp4sdl3IcIxfAonHQV9qU5OsZ4Ts9IOoETFs5dI=
46
github.com/multiformats/go-varint v0.1.0/go.mod h1:5KVAVXegtfmNQQm/lCY+ATvDzvJJhSkUlGQV9wgObdI=
7+
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
8+
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
9+
github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu7U=
10+
github.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U=
511
github.com/x448/float16 v0.8.4 h1:qLwI1I70+NjRFUR3zs1JPUCgaCXSh3SW62uAKT1mSBM=
612
github.com/x448/float16 v0.8.4/go.mod h1:14CWIYCyZA/cWjXOioeEpHeN/83MdbZDRQHoFcYsOfg=
13+
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM=
14+
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
15+
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
16+
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
717
pgregory.net/rapid v1.2.0 h1:keKAYRcjm+e1F0oAuU5F5+YPAWcyxNNRK2wud503Gnk=
818
pgregory.net/rapid v1.2.0/go.mod h1:PY5XlDGj0+V1FCq0o192FdRhpKHGTRIWBgqjDBTrq04=

masl/example_test.go

Lines changed: 108 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,108 @@
1+
package masl_test
2+
3+
import (
4+
"encoding/json"
5+
"testing"
6+
7+
"github.com/hyphacoop/go-dasl/cid"
8+
"github.com/hyphacoop/go-dasl/drisl"
9+
"github.com/hyphacoop/go-dasl/masl"
10+
"github.com/stretchr/testify/require"
11+
)
12+
13+
func TestMASLSingleMode(t *testing.T) {
14+
// craft a single masl doc
15+
single := `{
16+
"src": "bafkreifn5yxi7nkftsn46b6x26grda57ict7md2xuvfbsgkiahe2e7vnq4",
17+
"mediaType": "text/html",
18+
"content-language": "en",
19+
"service-worker-allowed": "/"
20+
}`
21+
var singleMap map[string]any
22+
err := json.Unmarshal([]byte(single), &singleMap)
23+
require.NoError(t, err)
24+
src, ok := singleMap["src"].(string)
25+
require.True(t, ok)
26+
cid, err := cid.NewCidFromString(src)
27+
require.NoError(t, err)
28+
singleMap["src"] = cid
29+
cborBz, err := drisl.Marshal(singleMap)
30+
require.NoError(t, err)
31+
32+
maslDoc := masl.Document{}
33+
err = drisl.Unmarshal(cborBz, &maslDoc)
34+
require.NoError(t, err, "Could not unmarshal %x", cborBz)
35+
36+
require.Equal(t, maslDoc.Src, &cid)
37+
require.Equal(t, maslDoc.Attributes["mediaType"], "text/html")
38+
require.Equal(t, maslDoc.Attributes["content-language"], "en")
39+
require.Equal(t, maslDoc.Attributes["service-worker-allowed"], "/")
40+
require.False(t, maslDoc.IsBundle())
41+
42+
roundTripped, err := drisl.Marshal(maslDoc)
43+
require.NoError(t, err)
44+
require.Equal(t, cborBz, roundTripped)
45+
}
46+
47+
func TestMASLBundleMode(t *testing.T) {
48+
bundle := `
49+
{
50+
"name": "My Doc",
51+
"resources": {
52+
"/": {
53+
"mediaType": "text/html",
54+
"content-encoding": "gzip",
55+
"content-language": "fr"
56+
},
57+
"/interactive.js": {
58+
"mediaType": "application/javascript",
59+
"sourcemap": "/interactive.js.map"
60+
},
61+
"/interactive.js.map": {
62+
"mediaType": "application/json"
63+
},
64+
"/picture.jpg": {
65+
"mediaType": "image/jpeg"
66+
}
67+
}
68+
}`
69+
var bundleMap map[string]any
70+
err := json.Unmarshal([]byte(bundle), &bundleMap)
71+
require.NoError(t, err)
72+
resourcesMap, ok := bundleMap["resources"].(map[string]any)
73+
require.True(t, ok)
74+
for key, resource := range resourcesMap {
75+
resourceMap, ok := resource.(map[string]any)
76+
require.True(t, ok)
77+
resourceMap["src"] = cid.HashBytes([]byte(key))
78+
}
79+
cborBz, err := drisl.Marshal(bundleMap)
80+
require.NoError(t, err)
81+
82+
maslDoc := masl.Document{}
83+
err = drisl.Unmarshal(cborBz, &maslDoc)
84+
require.NoError(t, err)
85+
require.Nil(t, maslDoc.Src)
86+
require.Equal(t, maslDoc.Name, "My Doc")
87+
require.Len(t, maslDoc.Resources, 4)
88+
for key, resource := range resourcesMap {
89+
expectedResource := resource.(map[string]any)
90+
actualResource := maslDoc.Resources[key]
91+
require.NotNil(t, actualResource)
92+
require.Equal(t, expectedResource["src"], *actualResource.Src)
93+
require.Len(t, actualResource.Attributes, len(expectedResource)-1)
94+
for attr, expectedAttr := range expectedResource {
95+
if attr == "src" {
96+
continue
97+
}
98+
actualAttr, ok := actualResource.Attributes[attr]
99+
require.True(t, ok, "%s not found in %v", attr, actualResource.Attributes)
100+
require.Equal(t, expectedAttr, actualAttr)
101+
}
102+
}
103+
require.True(t, maslDoc.IsBundle())
104+
105+
roundTripped, err := drisl.Marshal(maslDoc)
106+
require.NoError(t, err)
107+
require.Equal(t, cborBz, roundTripped)
108+
}

0 commit comments

Comments
 (0)