You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
92 lines
1.6 KiB
Go
92 lines
1.6 KiB
Go
package asar // import "b612.me/asar"
|
|
|
|
import (
|
|
"bytes"
|
|
"io/ioutil"
|
|
"os"
|
|
"path/filepath"
|
|
"testing"
|
|
)
|
|
|
|
func TestExtractThis(t *testing.T) {
|
|
f, err := os.Open("testdata/extractthis.asar")
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
defer f.Close()
|
|
|
|
root, err := Decode(f)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
if root.Flags&FlagDir == 0 {
|
|
t.Fatal("expecting root directory to have FlagDir")
|
|
}
|
|
|
|
{
|
|
f1 := root.Find("dir1", "file1.txt")
|
|
if f1 == nil {
|
|
t.Fatal("could not find dir1/file1.txt")
|
|
}
|
|
if f1.Path() != "dir1/file1.txt" {
|
|
t.Fatal("unexpected path")
|
|
}
|
|
body, err := ioutil.ReadAll(f1.Open())
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if !bytes.Equal(body, []byte(`file one.`)) {
|
|
t.Fatalf("dir1/file1.txt body is incorrect (got %s)", body)
|
|
}
|
|
}
|
|
|
|
{
|
|
f2 := root.Find("dir2").Find("file3.txt")
|
|
if f2 == nil {
|
|
t.Fatal("could not find dir2/file3.txt")
|
|
}
|
|
s := f2.String()
|
|
if s != `123` {
|
|
t.Fatalf("dir2/file3.txt body is incorrect (got %s)", s)
|
|
}
|
|
}
|
|
|
|
{
|
|
empty := root.Find("emptyfile.txt")
|
|
if empty == nil {
|
|
t.Fatal("could not find emptyfile.txt")
|
|
}
|
|
if len(empty.Bytes()) != 0 {
|
|
t.Fatal("expecting emptyfile.txt to be empty")
|
|
}
|
|
}
|
|
|
|
{
|
|
var i int
|
|
root.Walk(func(_ string, _ os.FileInfo, _ error) error {
|
|
i++
|
|
return nil
|
|
})
|
|
|
|
if i != 7 {
|
|
t.Fatalf("expected to walk over 7 items, got %d", i)
|
|
}
|
|
}
|
|
|
|
{
|
|
var i int
|
|
root.Walk(func(_ string, fi os.FileInfo, _ error) error {
|
|
i++
|
|
if fi.IsDir() {
|
|
return filepath.SkipDir
|
|
}
|
|
return nil
|
|
})
|
|
|
|
if i != 4 {
|
|
t.Fatalf("expected to walk over 4 items, got %d", i)
|
|
}
|
|
}
|
|
}
|