spacevim/bundle/splitjoin.vim/spec/plugin/go_spec.rb
JIe 2bb7059579
Some checks failed
Detach Plugins / check (FlyGrep.vim) (push) Has been cancelled
Detach Plugins / check (GitHub.vim) (push) Has been cancelled
Detach Plugins / check (JavaUnit.vim) (push) Has been cancelled
Detach Plugins / check (SourceCounter.vim) (push) Has been cancelled
Detach Plugins / check (cpicker.nvim) (push) Has been cancelled
Detach Plugins / check (dein-ui.vim) (push) Has been cancelled
Detach Plugins / check (git.vim) (push) Has been cancelled
Detach Plugins / check (iedit.vim) (push) Has been cancelled
Detach Plugins / check (scrollbar.vim) (push) Has been cancelled
Detach Plugins / check (vim-chat) (push) Has been cancelled
Detach Plugins / check (vim-cheat) (push) Has been cancelled
Detach Plugins / check (vim-todo) (push) Has been cancelled
Detach Plugins / check (xmake.vim) (push) Has been cancelled
test / Linux (nvim, nightly) (push) Has been cancelled
test / Linux (nvim, v0.3.8) (push) Has been cancelled
test / Linux (nvim, v0.4.0) (push) Has been cancelled
test / Linux (nvim, v0.4.2) (push) Has been cancelled
test / Linux (nvim, v0.4.3) (push) Has been cancelled
test / Linux (nvim, v0.4.4) (push) Has been cancelled
test / Linux (nvim, v0.5.0) (push) Has been cancelled
test / Linux (nvim, v0.5.1) (push) Has been cancelled
test / Linux (nvim, v0.6.0) (push) Has been cancelled
test / Linux (nvim, v0.6.1) (push) Has been cancelled
test / Linux (nvim, v0.7.0) (push) Has been cancelled
test / Linux (nvim, v0.7.2) (push) Has been cancelled
test / Linux (nvim, v0.8.0) (push) Has been cancelled
test / Linux (nvim, v0.8.1) (push) Has been cancelled
test / Linux (nvim, v0.8.2) (push) Has been cancelled
test / Linux (nvim, v0.8.3) (push) Has been cancelled
test / Linux (nvim, v0.9.0) (push) Has been cancelled
test / Linux (nvim, v0.9.1) (push) Has been cancelled
test / Linux (true, vim, v7.4.052) (push) Has been cancelled
test / Linux (true, vim, v7.4.1689) (push) Has been cancelled
test / Linux (true, vim, v7.4.629) (push) Has been cancelled
test / Linux (true, vim, v8.0.0027) (push) Has been cancelled
test / Linux (true, vim, v8.0.0183) (push) Has been cancelled
test / Linux (vim, nightly) (push) Has been cancelled
test / Linux (vim, v8.0.0184) (push) Has been cancelled
test / Linux (vim, v8.0.1453) (push) Has been cancelled
test / Linux (vim, v8.1.2269) (push) Has been cancelled
test / Linux (vim, v8.2.2434) (push) Has been cancelled
test / Linux (vim, v8.2.3995) (push) Has been cancelled
test / Windows (nvim, nightly) (push) Has been cancelled
test / Windows (nvim, v0.3.8) (push) Has been cancelled
test / Windows (nvim, v0.4.2) (push) Has been cancelled
test / Windows (nvim, v0.4.3) (push) Has been cancelled
test / Windows (nvim, v0.4.4) (push) Has been cancelled
test / Windows (nvim, v0.5.0) (push) Has been cancelled
test / Windows (nvim, v0.5.1) (push) Has been cancelled
test / Windows (nvim, v0.6.0) (push) Has been cancelled
test / Windows (nvim, v0.6.1) (push) Has been cancelled
test / Windows (nvim, v0.7.0) (push) Has been cancelled
test / Windows (nvim, v0.7.2) (push) Has been cancelled
test / Windows (nvim, v0.8.0) (push) Has been cancelled
test / Windows (nvim, v0.8.1) (push) Has been cancelled
test / Windows (nvim, v0.8.2) (push) Has been cancelled
test / Windows (nvim, v0.8.3) (push) Has been cancelled
test / Windows (nvim, v0.9.0) (push) Has been cancelled
test / Windows (nvim, v0.9.1) (push) Has been cancelled
test / Windows (vim, nightly) (push) Has been cancelled
test / Windows (vim, v7.4.1185) (push) Has been cancelled
test / Windows (vim, v7.4.1689) (push) Has been cancelled
test / Windows (vim, v8.0.0027) (push) Has been cancelled
test / Windows (vim, v8.0.1453) (push) Has been cancelled
test / Windows (vim, v8.1.2269) (push) Has been cancelled
test / Windows (vim, v8.2.2434) (push) Has been cancelled
test / Windows (vim, v8.2.3995) (push) Has been cancelled
docker / docker (push) Has been cancelled
mirror / check (coding) (push) Has been cancelled
mirror / check (gitee) (push) Has been cancelled
mirror / check (gitlab) (push) Has been cancelled
init
2024-08-21 14:17:26 +08:00

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