mirror of
https://github.com/SpaceVim/SpaceVim.git
synced 2025-02-03 09:50:04 +08:00
463 lines
8.8 KiB
Ruby
463 lines
8.8 KiB
Ruby
require 'spec_helper'
|
|
|
|
describe "go" do
|
|
let(:filename) { 'test.go' }
|
|
|
|
before :each do
|
|
vim.set(:expandtab)
|
|
vim.set(:shiftwidth, 2)
|
|
end
|
|
|
|
specify "imports" do
|
|
set_file_contents <<~EOF
|
|
import "fmt"
|
|
EOF
|
|
|
|
vim.search('import')
|
|
split
|
|
|
|
assert_file_contents <<~EOF
|
|
import (
|
|
"fmt"
|
|
)
|
|
EOF
|
|
|
|
vim.search('import')
|
|
join
|
|
|
|
assert_file_contents <<~EOF
|
|
import "fmt"
|
|
EOF
|
|
end
|
|
|
|
specify "imports with names" do
|
|
set_file_contents <<~EOF
|
|
import _ "fmt"
|
|
EOF
|
|
|
|
vim.search('import')
|
|
split
|
|
|
|
assert_file_contents <<~EOF
|
|
import (
|
|
_ "fmt"
|
|
)
|
|
EOF
|
|
|
|
vim.search('import')
|
|
join
|
|
|
|
assert_file_contents <<~EOF
|
|
import _ "fmt"
|
|
EOF
|
|
end
|
|
|
|
describe "structs" do
|
|
specify "instantiation" do
|
|
set_file_contents <<~EOF
|
|
StructType{one: 1, two: "asdf", three: []int{1, 2, 3}}
|
|
EOF
|
|
|
|
vim.search 'one:'
|
|
split
|
|
|
|
assert_file_contents <<~EOF
|
|
StructType{
|
|
one: 1,
|
|
two: "asdf",
|
|
three: []int{1, 2, 3},
|
|
}
|
|
EOF
|
|
|
|
join
|
|
|
|
assert_file_contents <<~EOF
|
|
StructType{one: 1, two: "asdf", three: []int{1, 2, 3}}
|
|
EOF
|
|
end
|
|
|
|
specify "instantiation without padding" do
|
|
set_file_contents <<~EOF
|
|
StructType{one: 1, two: "asdf", three: []int{1, 2, 3}}
|
|
EOF
|
|
vim.command('let b:splitjoin_curly_brace_padding = 0')
|
|
|
|
vim.search 'one:'
|
|
split
|
|
|
|
assert_file_contents <<~EOF
|
|
StructType{
|
|
one: 1,
|
|
two: "asdf",
|
|
three: []int{1, 2, 3},
|
|
}
|
|
EOF
|
|
|
|
join
|
|
|
|
assert_file_contents <<~EOF
|
|
StructType{one: 1, two: "asdf", three: []int{1, 2, 3}}
|
|
EOF
|
|
end
|
|
|
|
specify "definition" do
|
|
set_file_contents <<~EOF
|
|
type str struct{ A, B int }
|
|
EOF
|
|
|
|
vim.search 'A'
|
|
split
|
|
|
|
assert_file_contents <<~EOF
|
|
type str struct {
|
|
A, B int
|
|
}
|
|
EOF
|
|
|
|
vim.search 'struct'
|
|
join
|
|
|
|
assert_file_contents <<~EOF
|
|
type str struct{ A, B int }
|
|
EOF
|
|
end
|
|
|
|
specify "empty definition" do
|
|
set_file_contents <<~EOF
|
|
type empty struct{}
|
|
EOF
|
|
|
|
vim.search '{'
|
|
split
|
|
|
|
assert_file_contents <<~EOF
|
|
type empty struct {
|
|
|
|
}
|
|
EOF
|
|
|
|
vim.search 'struct'
|
|
join
|
|
|
|
assert_file_contents <<~EOF
|
|
type empty struct{}
|
|
EOF
|
|
|
|
vim.search 'type'
|
|
split
|
|
|
|
assert_file_contents <<~EOF
|
|
type (
|
|
empty struct{}
|
|
)
|
|
EOF
|
|
end
|
|
end
|
|
|
|
describe "funcs" do
|
|
def assert_split_join(initial, split_expected, join_expected)
|
|
set_file_contents initial
|
|
vim.search 'Func(\zs\k'
|
|
|
|
split
|
|
|
|
assert_file_contents split_expected
|
|
|
|
join
|
|
|
|
assert_file_contents join_expected
|
|
end
|
|
|
|
it "handles function definitions" do
|
|
initial = <<~EOF
|
|
func Func(a, b int, c time.Time, d func(int) error, e func(int, int) (int, error), f ...time.Time) {
|
|
}
|
|
EOF
|
|
split = <<~EOF
|
|
func Func(
|
|
a, b int,
|
|
c time.Time,
|
|
d func(int) error,
|
|
e func(int, int) (int, error),
|
|
f ...time.Time,
|
|
) {
|
|
}
|
|
EOF
|
|
joined = <<~EOF
|
|
func Func(a, b int, c time.Time, d func(int) error, e func(int, int) (int, error), f ...time.Time) {
|
|
}
|
|
EOF
|
|
assert_split_join(initial, split, joined)
|
|
end
|
|
|
|
it "handles function definitions with return types" do
|
|
initial = <<~EOF
|
|
func Func(a, b int, c time.Time, d func(int) error, e func(int, int) (int, error), f ...time.Time) (r string, err error) {
|
|
}
|
|
EOF
|
|
split = <<~EOF
|
|
func Func(
|
|
a, b int,
|
|
c time.Time,
|
|
d func(int) error,
|
|
e func(int, int) (int, error),
|
|
f ...time.Time,
|
|
) (r string, err error) {
|
|
}
|
|
EOF
|
|
joined = <<~EOF
|
|
func Func(a, b int, c time.Time, d func(int) error, e func(int, int) (int, error), f ...time.Time) (r string, err error) {
|
|
}
|
|
EOF
|
|
assert_split_join(initial, split, joined)
|
|
end
|
|
|
|
it "handles method definitions" do
|
|
initial = <<~EOF
|
|
func (r Receiver) Func(a, b int, c time.Time, d func(int) error, e func(int, int) (int, error), f ...time.Time) {
|
|
}
|
|
EOF
|
|
split = <<~EOF
|
|
func (r Receiver) Func(
|
|
a, b int,
|
|
c time.Time,
|
|
d func(int) error,
|
|
e func(int, int) (int, error),
|
|
f ...time.Time,
|
|
) {
|
|
}
|
|
EOF
|
|
joined = <<~EOF
|
|
func (r Receiver) Func(a, b int, c time.Time, d func(int) error, e func(int, int) (int, error), f ...time.Time) {
|
|
}
|
|
EOF
|
|
assert_split_join(initial, split, joined)
|
|
end
|
|
|
|
it "handles method definitions with return types" do
|
|
initial = <<~EOF
|
|
func (r Receiver) Func(a, b int, c time.Time, d func(int) error, e func(int, int) (int, error), f ...time.Time) (r string, err error) {
|
|
}
|
|
EOF
|
|
split = <<~EOF
|
|
func (r Receiver) Func(
|
|
a, b int,
|
|
c time.Time,
|
|
d func(int) error,
|
|
e func(int, int) (int, error),
|
|
f ...time.Time,
|
|
) (r string, err error) {
|
|
}
|
|
EOF
|
|
joined = <<~EOF
|
|
func (r Receiver) Func(a, b int, c time.Time, d func(int) error, e func(int, int) (int, error), f ...time.Time) (r string, err error) {
|
|
}
|
|
EOF
|
|
assert_split_join(initial, split, joined)
|
|
end
|
|
end
|
|
|
|
specify "func calls" do
|
|
set_file_contents <<~EOF
|
|
err := Func(a, b, c, d)
|
|
EOF
|
|
|
|
vim.search 'a,'
|
|
split
|
|
|
|
assert_file_contents <<~EOF
|
|
err := Func(
|
|
a,
|
|
b,
|
|
c,
|
|
d,
|
|
)
|
|
EOF
|
|
|
|
join
|
|
|
|
assert_file_contents <<~EOF
|
|
err := Func(a, b, c, d)
|
|
EOF
|
|
end
|
|
|
|
specify "func definition bodies" do
|
|
set_file_contents <<~EOF
|
|
func foo(x, y int) bool { return x+y == 5 }
|
|
EOF
|
|
|
|
vim.search 'return'
|
|
split
|
|
|
|
assert_file_contents <<~EOF
|
|
func foo(x, y int) bool {
|
|
return x+y == 5
|
|
}
|
|
EOF
|
|
|
|
join
|
|
|
|
assert_file_contents <<~EOF
|
|
func foo(x, y int) bool { return x+y == 5 }
|
|
EOF
|
|
end
|
|
|
|
describe "variable declarations" do
|
|
specify "one per line" do
|
|
set_file_contents <<~EOF
|
|
type ChanDir int
|
|
|
|
func Func() {
|
|
var foo string
|
|
const bar string
|
|
}
|
|
EOF
|
|
|
|
vim.search('var')
|
|
split
|
|
vim.search('const')
|
|
split
|
|
vim.search('type')
|
|
split
|
|
|
|
assert_file_contents <<~EOF
|
|
type (
|
|
ChanDir int
|
|
)
|
|
|
|
func Func() {
|
|
var (
|
|
foo string
|
|
)
|
|
const (
|
|
bar string
|
|
)
|
|
}
|
|
EOF
|
|
|
|
vim.search('var')
|
|
join
|
|
vim.search('const')
|
|
join
|
|
vim.search('type')
|
|
join
|
|
|
|
assert_file_contents <<~EOF
|
|
type ChanDir int
|
|
|
|
func Func() {
|
|
var foo string
|
|
const bar string
|
|
}
|
|
EOF
|
|
end
|
|
|
|
specify "comma-separated without type" do
|
|
set_file_contents <<~EOF
|
|
const (
|
|
const4 = "4"
|
|
const5 = "5",
|
|
)
|
|
EOF
|
|
|
|
join
|
|
|
|
assert_file_contents <<~EOF
|
|
const const4, const5 = "4", "5"
|
|
EOF
|
|
|
|
split
|
|
|
|
assert_file_contents <<~EOF
|
|
const (
|
|
const4 = "4"
|
|
const5 = "5"
|
|
)
|
|
EOF
|
|
end
|
|
|
|
specify "comma-separated with type, without values" do
|
|
set_file_contents <<~EOF
|
|
const (
|
|
const4 string
|
|
const5 string
|
|
)
|
|
EOF
|
|
|
|
join
|
|
|
|
assert_file_contents <<~EOF
|
|
const const4, const5 string
|
|
EOF
|
|
|
|
split
|
|
|
|
assert_file_contents <<~EOF
|
|
const (
|
|
const4 string
|
|
const5 string
|
|
)
|
|
EOF
|
|
end
|
|
|
|
specify "different types don't get joined" do
|
|
set_file_contents <<~EOF
|
|
const (
|
|
const4 string
|
|
const5 int
|
|
)
|
|
EOF
|
|
|
|
join
|
|
|
|
# Triggers the built-in gJ
|
|
assert_file_contents <<~EOF
|
|
const ( const4 string
|
|
const5 int
|
|
)
|
|
EOF
|
|
end
|
|
|
|
specify "join single line as a special case" do
|
|
set_file_contents <<~EOF
|
|
const (
|
|
const4, const5 = "4", "5"
|
|
)
|
|
EOF
|
|
|
|
join
|
|
|
|
assert_file_contents <<~EOF
|
|
const const4, const5 = "4", "5"
|
|
EOF
|
|
end
|
|
|
|
specify "doesn't split multiline declarations" do
|
|
set_file_contents <<~EOF
|
|
var first = map[string]any{
|
|
"k": "v",
|
|
}
|
|
EOF
|
|
|
|
split
|
|
|
|
assert_file_contents <<~EOF
|
|
var first = map[string]any{
|
|
"k": "v",
|
|
}
|
|
EOF
|
|
|
|
vim.normal 'f{'
|
|
join
|
|
vim.search('var first')
|
|
split
|
|
|
|
assert_file_contents <<~EOF
|
|
var (
|
|
first = map[string]any{ "k": "v", }
|
|
)
|
|
EOF
|
|
end
|
|
end
|
|
end
|