feat: add meta.Collection.FindBy method
This commit is contained in:
parent
ad5deef4f3
commit
11d621cb90
@ -60,6 +60,19 @@ func (mc *Collection) Cut(f Filter) *Collection {
|
|||||||
return &cutted
|
return &cutted
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// FindBy filter
|
||||||
|
func (mc *Collection) FindBy(f Filter) Collection {
|
||||||
|
found := Collection{}
|
||||||
|
|
||||||
|
for _, m := range *mc {
|
||||||
|
if fr := f(m); fr {
|
||||||
|
found = append(found, m)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return found
|
||||||
|
}
|
||||||
|
|
||||||
// Filter function signature
|
// Filter function signature
|
||||||
type Filter func(d *Data) bool
|
type Filter func(d *Data) bool
|
||||||
|
|
||||||
|
@ -568,3 +568,81 @@ func TestCollectionCutUntilFirstToken(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestCollectionFindByType(t *testing.T) {
|
||||||
|
|
||||||
|
// prepare
|
||||||
|
|
||||||
|
whiteSpace := &meta.Data{
|
||||||
|
Type: meta.WhiteSpaceType,
|
||||||
|
Value: "\n",
|
||||||
|
TokenName: meta.NodeStart,
|
||||||
|
}
|
||||||
|
OpenParenthesisComment := &meta.Data{
|
||||||
|
Type: meta.CommentType,
|
||||||
|
Value: "// some comment",
|
||||||
|
TokenName: meta.NodeStart,
|
||||||
|
}
|
||||||
|
OpenParenthesisToken := &meta.Data{
|
||||||
|
Type: meta.TokenType,
|
||||||
|
Value: "(",
|
||||||
|
TokenName: meta.OpenParenthesisToken,
|
||||||
|
}
|
||||||
|
CloseParenthesisComment := &meta.Data{
|
||||||
|
Type: meta.WhiteSpaceType,
|
||||||
|
Value: "// some comment",
|
||||||
|
TokenName: meta.OpenParenthesisToken,
|
||||||
|
}
|
||||||
|
CloseParenthesisToken := &meta.Data{
|
||||||
|
Type: meta.TokenType,
|
||||||
|
Value: ")",
|
||||||
|
TokenName: meta.CloseParenthesisToken,
|
||||||
|
}
|
||||||
|
|
||||||
|
actualCollection := meta.Collection{
|
||||||
|
whiteSpace,
|
||||||
|
OpenParenthesisComment,
|
||||||
|
OpenParenthesisToken,
|
||||||
|
CloseParenthesisComment,
|
||||||
|
CloseParenthesisToken,
|
||||||
|
}
|
||||||
|
|
||||||
|
expectedCollection := meta.Collection{
|
||||||
|
whiteSpace,
|
||||||
|
OpenParenthesisComment,
|
||||||
|
OpenParenthesisToken,
|
||||||
|
CloseParenthesisComment,
|
||||||
|
CloseParenthesisToken,
|
||||||
|
}
|
||||||
|
|
||||||
|
expectedFoundCollection := meta.Collection{
|
||||||
|
OpenParenthesisToken,
|
||||||
|
CloseParenthesisToken,
|
||||||
|
}
|
||||||
|
|
||||||
|
// action
|
||||||
|
|
||||||
|
actualFoundCollection := actualCollection.FindBy(meta.TypeFilter(meta.TokenType))
|
||||||
|
|
||||||
|
// check
|
||||||
|
|
||||||
|
if !reflect.DeepEqual(expectedCollection, actualCollection) {
|
||||||
|
diff := pretty.Compare(expectedCollection, actualCollection)
|
||||||
|
|
||||||
|
if diff != "" {
|
||||||
|
t.Errorf("\nexpected and actual collections are not equal\ndiff: (-expected +actual)\n%s", diff)
|
||||||
|
} else {
|
||||||
|
t.Errorf("\nexpected and actual collections are not equal\n")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if !reflect.DeepEqual(expectedFoundCollection, actualFoundCollection) {
|
||||||
|
diff := pretty.Compare(expectedFoundCollection, actualFoundCollection)
|
||||||
|
|
||||||
|
if diff != "" {
|
||||||
|
t.Errorf("\nexpected and actual Cut collections are not equal\ndiff: (-expected +actual)\n%s", diff)
|
||||||
|
} else {
|
||||||
|
t.Errorf("\nexpected and actual Cut collections are not equal\n")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user