1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75
|
// Copyright (C) 2017 The Syncthing Authors.
//
// This Source Code Form is subject to the terms of the Mozilla Public
// License, v. 2.0. If a copy of the MPL was not distributed with this file,
// You can obtain one at https://mozilla.org/MPL/2.0/.
package versioner
import (
"path/filepath"
"testing"
"github.com/d4l3k/messagediff"
)
// TestEmptyDirs models the following .stversions structure:
// .stversions/
// ├── keep1
// │ └── file1
// ├── keep2
// │ └── keep21
// │ └── keep22
// │ └── file1
// ├── remove1
// └── remove2
// └── remove21
// └── remove22
func TestEmptyDirs(t *testing.T) {
var paths = []struct {
path string
isFile bool
}{
{".", false},
{"keep1", false},
{"keep1/file1", true},
{"keep2", false},
{"keep2/keep21", false},
{"keep2/keep21/keep22", false},
{"keep2/keep21/keep22/file1", true},
{"remove1", false},
{"remove2", false},
{"remove2/remove21", false},
{"remove2/remove21/remove22", false},
}
var expected = []string{
"remove2/remove21/remove22",
"remove2/remove21",
"remove2",
"remove1",
}
// For compatibility with Windows
for i, p := range paths {
paths[i].path = filepath.FromSlash(p.path)
}
for i, p := range expected {
expected[i] = filepath.FromSlash(p)
}
dirTracker := make(emptyDirTracker)
for _, p := range paths {
if p.isFile {
dirTracker.addFile(p.path)
} else {
dirTracker.addDir(p.path)
}
}
result := dirTracker.emptyDirs()
if diff, equal := messagediff.PrettyDiff(expected, result); !equal {
t.Errorf("Incorrect empty directories list; got %v, expected %v\n%v", result, expected, diff)
}
}
|