Impl FTS and some main tests

This commit is contained in:
Bel LaPointe
2019-11-10 07:54:42 -07:00
parent 60dc6bc876
commit 259a8efc70
5 changed files with 262 additions and 1 deletions

1
notes/notes_test.go Normal file
View File

@@ -0,0 +1 @@
package notes

45
notes/search.go Normal file
View File

@@ -0,0 +1,45 @@
package notes
import (
"bufio"
"bytes"
"local/notes-server/filetree"
"os"
"path/filepath"
)
func (n *Notes) Search(phrase string) (string, error) {
files := filetree.NewFiles()
err := filepath.Walk(n.root,
func(path string, info os.FileInfo, err error) error {
if err != nil {
return err
}
if info.IsDir() {
return nil
}
ok, err := grepFile(path, []byte(phrase))
if ok {
p := filetree.NewPathFromLocal(path)
files.Push(p, info)
}
return err
},
)
return filetree.Paths(*files).List(), err
}
func grepFile(file string, pat []byte) (bool, error) {
f, err := os.Open(file)
if err != nil {
return false, err
}
defer f.Close()
scanner := bufio.NewScanner(f)
for scanner.Scan() {
if bytes.Contains(scanner.Bytes(), pat) {
return true, scanner.Err()
}
}
return false, scanner.Err()
}

44
notes/search_test.go Normal file
View File

@@ -0,0 +1,44 @@
package notes
import (
"fmt"
"io/ioutil"
"os"
"strings"
"testing"
)
func TestSearch(t *testing.T) {
d, err := ioutil.TempDir(os.TempDir(), "pattern*")
if err != nil {
t.Fatal(err)
}
defer os.RemoveAll(d)
for i := 0; i < 5; i++ {
f, err := ioutil.TempFile(d, fmt.Sprintf("file_%d", i))
if err != nil {
t.Fatal(err)
}
fmt.Fprintf(f, "this file is number %d", i)
f.Close()
}
n := New()
n.root = d
result, err := n.Search("this file")
if err != nil {
t.Fatal(err)
}
if v := len(strings.Split(result, "\n")); v < 7 {
t.Fatal(v, result)
}
result, err = n.Search("4")
if err != nil {
t.Fatal(err)
}
if v := len(strings.Split(result, "\n")); v > 4 {
t.Fatal(v, result)
}
}