add repetition support to migrate

This commit is contained in:
Dan Ballard 2018-05-08 11:11:58 -07:00
parent 6f79ecbd28
commit f283c93d49
5 changed files with 118 additions and 6 deletions

View File

@ -0,0 +1,31 @@
# Work
- [ ] Write tests
- [x] summary
- [ ] migrate
# Test Data
- note
-
- [ ] nesting1
- [ ] nesting 2
- [ ] nesting 3
- [ ] nesting 4
- [x] nesting 5
- [x] not nested
-
asdasd
# Nothing done
- [ ] not done
- note
# Repetition
- [x] 5x5 things
- [ ] 0x2 other things
- [ ] Group
- [ ] 0x3 nesting rep
- [x] 2x6 done nested rep

View File

@ -6,6 +6,8 @@ import (
"log" "log"
"github.com/dballard/markdown-bullet-journal/process" "github.com/dballard/markdown-bullet-journal/process"
"fmt" "fmt"
"strconv"
"strings"
) )
const template = `# Work const template = `# Work
@ -38,11 +40,15 @@ func (ph *processHandler) Writeln(line string) {
func (ph *processHandler) Eof() {} func (ph *processHandler) Eof() {}
func (ph *processHandler) NewFile() {} func (ph *processHandler) NewFile() {}
func (ph *processHandler) ProcessLine(line string, stack []string, todo bool, done bool) { func (ph *processHandler) ProcessLine(line string, indentLevel int, stack []string, todo bool, done bool, repTask process.RepTask) {
// TODO: handle [x] numXnum // TODO: handle [x] numXnum
if !done { if !done || repTask.Is {
if repTask.Is {
ph.Writeln(strings.Repeat("\t", indentLevel) + "- [ ] 0x" + strconv.Itoa(repTask.B) + stack[len(stack)-1] )
} else {
ph.Writeln(line) ph.Writeln(line)
} }
}
} }
func main() { func main() {

View File

@ -0,0 +1,75 @@
package main
import (
"testing"
"os"
"bytes"
"strings"
"math"
"github.com/dballard/markdown-bullet-journal/process"
)
const EXPECTED = `# Work
- [ ] Write tests
- [ ] migrate
# Test Data
- note
-
- [ ] nesting1
- [ ] nesting 2
- [ ] nesting 3
- [ ] nesting 4
-
asdasd
# Nothing done
- [ ] not done
- note
# Repetition
- [ ] 0x5 things
- [ ] 0x2 other things
- [ ] Group
- [ ] 0x3 nesting rep
- [ ] 0x6 done nested rep
`
func TestMigrate(t *testing.T) {
ph := new(processHandler)
r, w, err := os.Pipe()
if err != nil {
t.Fatal(err)
}
ph.File = w
files := process.GetFiles()
lastFile := files[len(files)-1]
process.ProcessFile(ph, lastFile)
w.Close()
var result= make([]byte, 1000)
n, _ := r.Read(result)
if ! bytes.Equal(result[:n], []byte(EXPECTED)) {
var diffLoc = 0
for i, ch := range EXPECTED {
//fmt.Printf("%v/%v: %v %v\n", i, n, ch, result[i])
if i > n-1 || result[i] != byte(ch) {
diffLoc = i
break
}
}
//fmt.Println(diffLoc)
line := strings.Count(string(result[:diffLoc]), "\n")
errorStr := string(result[int(math.Max(0, float64(diffLoc - 10))) : int(math.Min(float64(len(result)), float64(diffLoc + 10))) ])
t.Errorf("Summary results do not match expected:\nfirst difference at line %v: '%v'\n%v<---->\n%v\n", line, errorStr, string(result), EXPECTED)
}
}

View File

@ -32,7 +32,7 @@ func (ph *processHandler) Eof() {
ph.Writeln(strconv.Itoa(ph.doneCount) + " / " + strconv.Itoa(ph.totalCount)) ph.Writeln(strconv.Itoa(ph.doneCount) + " / " + strconv.Itoa(ph.totalCount))
} }
func (ph *processHandler) ProcessLine(line string, stack []string, todo bool, done bool, repTask process.RepTask) { func (ph *processHandler) ProcessLine(line string, indentLevel int, stack []string, todo bool, done bool, repTask process.RepTask) {
if strings.Trim(line, " \t\n\r") == "" { if strings.Trim(line, " \t\n\r") == "" {
return return
} }

View File

@ -16,7 +16,7 @@ type RepTask struct {
type ProcessHandler interface { type ProcessHandler interface {
Writeln(line string) Writeln(line string)
ProcessLine(line string, stack []string, todo bool, done bool, repTask RepTask) ProcessLine(line string, indentLevel int, stack []string, todo bool, done bool, repTask RepTask)
Eof() Eof()
NewFile() NewFile()
} }
@ -77,7 +77,7 @@ func ProcessFile(ph ProcessHandler, fileName string) {
stack = append(stack, row) stack = append(stack, row)
} }
ph.ProcessLine(line, stack, todo, done, repTask) ph.ProcessLine(line, indentLevel, stack, todo, done, repTask)
} }
ph.Eof() ph.Eof()
} }