blob: 0c2614260fd07d7a3f1cd40df5652f050727020c [file] [log] [blame]
package plist
import (
"bytes"
"fmt"
"testing"
)
func BenchmarkXMLEncode(b *testing.B) {
for i := 0; i < b.N; i++ {
NewEncoder(&bytes.Buffer{}).Encode(plistValueTreeRawData)
}
}
func BenchmarkBplistEncode(b *testing.B) {
for i := 0; i < b.N; i++ {
NewBinaryEncoder(&bytes.Buffer{}).Encode(plistValueTreeRawData)
}
}
func BenchmarkOpenStepEncode(b *testing.B) {
for i := 0; i < b.N; i++ {
NewEncoderForFormat(&bytes.Buffer{}, OpenStepFormat).Encode(plistValueTreeRawData)
}
}
func TestEncode(t *testing.T) {
for _, test := range tests {
subtest(t, test.Name, func(t *testing.T) {
for fmt, doc := range test.Documents {
if test.SkipEncode[fmt] {
continue
}
subtest(t, FormatNames[fmt], func(t *testing.T) {
encoded, err := Marshal(test.Value, fmt)
if err != nil {
t.Error(err)
}
if !bytes.Equal(doc, encoded) {
printype := "%s"
if fmt == BinaryFormat {
printype = "%2x"
}
t.Logf("Value: %#v", test.Value)
t.Logf("Expected: "+printype+"\n", doc)
t.Logf("Received: "+printype+"\n", encoded)
t.Fail()
}
})
}
})
}
}
func ExampleEncoder_Encode() {
type sparseBundleHeader struct {
InfoDictionaryVersion string `plist:"CFBundleInfoDictionaryVersion"`
BandSize uint64 `plist:"band-size"`
BackingStoreVersion int `plist:"bundle-backingstore-version"`
DiskImageBundleType string `plist:"diskimage-bundle-type"`
Size uint64 `plist:"size"`
}
data := &sparseBundleHeader{
InfoDictionaryVersion: "6.0",
BandSize: 8388608,
Size: 4 * 1048576 * 1024 * 1024,
DiskImageBundleType: "com.apple.diskimage.sparsebundle",
BackingStoreVersion: 1,
}
buf := &bytes.Buffer{}
encoder := NewEncoder(buf)
err := encoder.Encode(data)
if err != nil {
fmt.Println(err)
}
fmt.Println(buf.String())
// Output: <?xml version="1.0" encoding="UTF-8"?>
// <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
// <plist version="1.0"><dict><key>CFBundleInfoDictionaryVersion</key><string>6.0</string><key>band-size</key><integer>8388608</integer><key>bundle-backingstore-version</key><integer>1</integer><key>diskimage-bundle-type</key><string>com.apple.diskimage.sparsebundle</string><key>size</key><integer>4398046511104</integer></dict></plist>
}
func ExampleMarshal_xml() {
type sparseBundleHeader struct {
InfoDictionaryVersion string `plist:"CFBundleInfoDictionaryVersion"`
BandSize uint64 `plist:"band-size"`
BackingStoreVersion int `plist:"bundle-backingstore-version"`
DiskImageBundleType string `plist:"diskimage-bundle-type"`
Size uint64 `plist:"size"`
}
data := &sparseBundleHeader{
InfoDictionaryVersion: "6.0",
BandSize: 8388608,
Size: 4 * 1048576 * 1024 * 1024,
DiskImageBundleType: "com.apple.diskimage.sparsebundle",
BackingStoreVersion: 1,
}
plist, err := MarshalIndent(data, XMLFormat, "\t")
if err != nil {
fmt.Println(err)
}
fmt.Println(string(plist))
// Output: <?xml version="1.0" encoding="UTF-8"?>
// <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
// <plist version="1.0">
// <dict>
// <key>CFBundleInfoDictionaryVersion</key>
// <string>6.0</string>
// <key>band-size</key>
// <integer>8388608</integer>
// <key>bundle-backingstore-version</key>
// <integer>1</integer>
// <key>diskimage-bundle-type</key>
// <string>com.apple.diskimage.sparsebundle</string>
// <key>size</key>
// <integer>4398046511104</integer>
// </dict>
// </plist>
}
func ExampleMarshal_gnustep() {
type sparseBundleHeader struct {
InfoDictionaryVersion string `plist:"CFBundleInfoDictionaryVersion"`
BandSize uint64 `plist:"band-size"`
BackingStoreVersion int `plist:"bundle-backingstore-version"`
DiskImageBundleType string `plist:"diskimage-bundle-type"`
Size uint64 `plist:"size"`
}
data := &sparseBundleHeader{
InfoDictionaryVersion: "6.0",
BandSize: 8388608,
Size: 4 * 1048576 * 1024 * 1024,
DiskImageBundleType: "com.apple.diskimage.sparsebundle",
BackingStoreVersion: 1,
}
plist, err := MarshalIndent(data, GNUStepFormat, "\t")
if err != nil {
fmt.Println(err)
}
fmt.Println(string(plist))
// Output: {
// CFBundleInfoDictionaryVersion = 6.0;
// band-size = <*I8388608>;
// bundle-backingstore-version = <*I1>;
// diskimage-bundle-type = com.apple.diskimage.sparsebundle;
// size = <*I4398046511104>;
// }
}