From f45ea35475a0e446e585a0b6e9c52413e64308a4 Mon Sep 17 00:00:00 2001 From: gigamaax <57466120+gigamaax@users.noreply.github.com> Date: Sat, 29 Mar 2025 15:42:43 -0700 Subject: [PATCH 1/4] wip(msgpack): handle Nil strings --- .github/workflows/test.yml | 10 ++++++---- msgpack/decode.go | 2 ++ 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 299fb016..5ab8768e 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -4,6 +4,8 @@ on: push: branches: - main + # TODO: don't add this in the pr + - fix-tests pull_request: release: types: @@ -21,11 +23,11 @@ jobs: matrix: os: - ubuntu-22.04 # https://github.com/actions/runner-images/blob/main/images/linux/Ubuntu2204-Readme.md - - macos-13 # https://github.com/actions/runner-images/blob/main/images/macos/macos-13-Readme.md - - windows-2022 # https://github.com/actions/runner-images/blob/main/images/win/Windows2022-Readme.md + # - macos-13 # https://github.com/actions/runner-images/blob/main/images/macos/macos-13-Readme.md + # - windows-2022 # https://github.com/actions/runner-images/blob/main/images/win/Windows2022-Readme.md go-version: - - 1.18.x - - 1.19.x + # - 1.18.x + # - 1.19.x - 1.20.x neovim-version: - v0.9.1 diff --git a/msgpack/decode.go b/msgpack/decode.go index b055dac2..e96cb716 100644 --- a/msgpack/decode.go +++ b/msgpack/decode.go @@ -321,6 +321,8 @@ func stringDecoder(ds *decodeState, v reflect.Value) { var x string switch ds.Type() { + case Nil: + x = "" case Binary, String: x = ds.String() default: From 96d7cca65a17c01516fcdfd55356794b81af0b36 Mon Sep 17 00:00:00 2001 From: gigamaax <57466120+gigamaax@users.noreply.github.com> Date: Sat, 29 Mar 2025 16:03:34 -0700 Subject: [PATCH 2/4] fix(nvim): expect commands based on nvim version for nvim minor verion 9, no commands are returned for nvim minor version 10, three are returned currently, for nightly builds, four are returend --- .github/workflows/test.yml | 10 ++++------ nvim/api_test.go | 28 ++++++++++++++++++++++++---- 2 files changed, 28 insertions(+), 10 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 5ab8768e..299fb016 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -4,8 +4,6 @@ on: push: branches: - main - # TODO: don't add this in the pr - - fix-tests pull_request: release: types: @@ -23,11 +21,11 @@ jobs: matrix: os: - ubuntu-22.04 # https://github.com/actions/runner-images/blob/main/images/linux/Ubuntu2204-Readme.md - # - macos-13 # https://github.com/actions/runner-images/blob/main/images/macos/macos-13-Readme.md - # - windows-2022 # https://github.com/actions/runner-images/blob/main/images/win/Windows2022-Readme.md + - macos-13 # https://github.com/actions/runner-images/blob/main/images/macos/macos-13-Readme.md + - windows-2022 # https://github.com/actions/runner-images/blob/main/images/win/Windows2022-Readme.md go-version: - # - 1.18.x - # - 1.19.x + - 1.18.x + - 1.19.x - 1.20.x neovim-version: - v0.9.1 diff --git a/nvim/api_test.go b/nvim/api_test.go index 81a2d861..3b1bbeab 100644 --- a/nvim/api_test.go +++ b/nvim/api_test.go @@ -2250,8 +2250,19 @@ func testCommand(v *Nvim) func(*testing.T) { if err != nil { t.Fatal(err) } - if len(cmds) > 0 { - t.Fatalf("expected 0 length but got %#v", cmds) + + var want int + switch nvimVersion.Minor { + case 9: + want = 0 + case 10: + want = 3 + default: + want = 4 + } + + if len(cmds) > want { + t.Fatalf("expected %d length but got %#v", want, cmds) } }) @@ -2266,8 +2277,17 @@ func testCommand(v *Nvim) func(*testing.T) { if err := b.Execute(); err != nil { t.Fatal(err) } - if len(cmds) > 0 { - t.Fatalf("expected 0 length but got %#v", cmds) + var want int + switch nvimVersion.Minor { + case 9: + want = 0 + case 10: + want = 3 + default: + want = 4 + } + if len(cmds) > want { + t.Fatalf("expected %d length but got %#v", want, cmds) } }) }) From 0ea75ee7eb244dad183c92acf7dedffeb96e992d Mon Sep 17 00:00:00 2001 From: gigamaax <57466120+gigamaax@users.noreply.github.com> Date: Sun, 30 Mar 2025 11:21:00 -0700 Subject: [PATCH 3/4] msgpack: add string decode test for Nil --- msgpack/decode_test.go | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/msgpack/decode_test.go b/msgpack/decode_test.go index deaec364..a1abdcea 100644 --- a/msgpack/decode_test.go +++ b/msgpack/decode_test.go @@ -964,6 +964,16 @@ func Test_stringDecoder(t *testing.T) { want string wantErr bool }{ + "Nil": { + ds: &decodeState{ + Decoder: &Decoder{ + p: nil, + t: Nil, + }, + }, + want: string(""), + wantErr: false, + }, "Binary": { ds: &decodeState{ Decoder: &Decoder{ From d19c2121cf0ad4db378010a91bae570c10a1a86d Mon Sep 17 00:00:00 2001 From: gigamaax <57466120+gigamaax@users.noreply.github.com> Date: Sun, 30 Mar 2025 14:27:13 -0700 Subject: [PATCH 4/4] refatctor(nvim): reduce exptectaion for keymappings neovim ships with default keybindings that may change per verison. the tests, prior to this change, included these default key mappings which make the tests fragile with each release. keeping a list of default commands should be outside the scope of this library. this change removes assertions against the entire set of keymaps returned by `nvim_get_keymap` and only verifies the desired keymap has been added and then removed. --- nvim/api_test.go | 404 +++++++---------------------------------------- 1 file changed, 57 insertions(+), 347 deletions(-) diff --git a/nvim/api_test.go b/nvim/api_test.go index 3b1bbeab..5c00ad2e 100644 --- a/nvim/api_test.go +++ b/nvim/api_test.go @@ -3035,195 +3035,49 @@ func testKey(v *Nvim) func(*testing.T) { skipBetweenVersion(t, "v0.7.0", "v0.8.0") mode := "n" - if err := v.SetKeyMap(mode, "y", "yy", make(map[string]bool)); err != nil { + original, err := v.KeyMap(mode) + if err != nil { t.Fatal(err) } - var wantMaps []*Mapping - wantMapsLen := 0 - switch nvimVersion.Minor { - case 6: - wantMaps = []*Mapping{ - { - LHS: "", - RHS: "nohlsearch|diffupdate", - Silent: 0, - NoRemap: 1, - Expr: 0, - Buffer: 0, - SID: 0, - NoWait: 0, - }, - { - LHS: "Y", - RHS: "y$", - Silent: 0, - NoRemap: 1, - Expr: 0, - Buffer: 0, - SID: 0, - NoWait: 0, - }, - { - LHS: "y", - RHS: "yy", - Silent: 0, - NoRemap: 0, - Expr: 0, - Buffer: 0, - SID: 0, - NoWait: 0, - }, - } - wantMapsLen = 2 - case 7: - wantMaps = []*Mapping{ - { - LHS: "", - RHS: "nohlsearch|diffupdate|normal! ", - Silent: 0, - NoRemap: 1, - Expr: 0, - Buffer: 0, - SID: 0, - NoWait: 0, - }, - { - LHS: "Y", - RHS: "y$", - Silent: 0, - NoRemap: 1, - Expr: 0, - Buffer: 0, - SID: 0, - NoWait: 0, - }, - { - LHS: "y", - RHS: "yy", - Silent: 0, - NoRemap: 0, - Expr: 0, - Buffer: 0, - SID: -9, - NoWait: 0, - }, - } - wantMapsLen = 2 - case 8: - wantMaps = []*Mapping{ - { - LHS: "&", - RHS: ":&&", - Silent: 0, - NoRemap: 1, - Expr: 0, - Buffer: 0, - SID: -8, - NoWait: 0, - }, - { - LHS: "Y", - RHS: "y$", - Silent: 0, - NoRemap: 1, - Expr: 0, - Buffer: 0, - SID: -8, - NoWait: 0, - }, - { - LHS: "y", - RHS: "yy", - Silent: 0, - NoRemap: 0, - Expr: 0, - Buffer: 0, - SID: -9, - NoWait: 0, - }, - { - LHS: "", - RHS: "nohlsearch|diffupdate|normal! ", - Silent: 0, - NoRemap: 1, - Expr: 0, - Buffer: 0, - SID: -8, - NoWait: 0, - }, - } - wantMapsLen = 3 - default: - wantMaps = []*Mapping{ - { - LHS: "&", - RHS: ":&&", - Silent: 0, - NoRemap: 1, - Expr: 0, - Buffer: 0, - SID: -8, - NoWait: 0, - }, - { - LHS: "Y", - RHS: "y$", - Silent: 0, - NoRemap: 1, - Expr: 0, - Buffer: 0, - SID: -8, - NoWait: 0, - }, - { - LHS: "y", - RHS: "yy", - Silent: 0, - NoRemap: 0, - Expr: 0, - Buffer: 0, - SID: -9, - NoWait: 0, - }, - { - LHS: "", - RHS: "nohlsearch|diffupdate|normal! ", - Silent: 0, - NoRemap: 1, - Expr: 0, - Buffer: 0, - SID: -8, - NoWait: 0, - }, - } - wantMapsLen = 3 + lhs := "y" + rhs := "yy" + if err := v.SetKeyMap(mode, lhs, rhs, make(map[string]bool)); err != nil { + t.Fatal(err) } - got, err := v.KeyMap(mode) + added, err := v.KeyMap(mode) if err != nil { t.Fatal(err) } - if !reflect.DeepEqual(got, wantMaps) { - for i, gotmap := range got { - t.Logf(" got[%d]: %#v", i, gotmap) - } - for i, wantmap := range wantMaps { - t.Logf("want[%d]: %#v", i, wantmap) + + if len(added) != len(original)+1 { + t.Fatalf("want %d but got %d", len(original)+1, len(added)) + } + + var keymap *Mapping + for _, m := range added { + if m.LHS == "y" { + keymap = m + break } - t.Fatalf("KeyMap(%s) = %#v, want: %#v", mode, got, wantMaps) } - if err := v.DeleteKeyMap(mode, "y"); err != nil { + if keymap.LHS != lhs && keymap.RHS != rhs { + t.Fatalf("want { LHS = %s, RHS = %s } but got { LHS = %s, RHS = %s }", lhs, rhs, keymap.LHS, keymap.RHS) + } + + if err := v.DeleteKeyMap(mode, lhs); err != nil { t.Fatal(err) } - got2, err := v.KeyMap(mode) + deleted, err := v.KeyMap(mode) if err != nil { t.Fatal(err) } - if len(got2) != wantMapsLen { - t.Fatalf("expected %d but got %#v", wantMapsLen, got2) + + if len(deleted) != len(original) { + t.Fatalf("want %d but got %d", len(original), len(added)) } }) @@ -3418,202 +3272,58 @@ func testKey(v *Nvim) func(*testing.T) { t.Run("KeyMap", func(t *testing.T) { skipBetweenVersion(t, "v0.7.0", "v0.8.0") + mode := "n" b := v.NewBatch() - mode := "n" - b.SetKeyMap(mode, "y", "yy", make(map[string]bool)) + var original []*Mapping + b.KeyMap(mode, &original) if err := b.Execute(); err != nil { t.Fatal(err) } - var wantMaps []*Mapping - wantMapsLen := 0 - switch nvimVersion.Minor { - case 6: - wantMaps = []*Mapping{ - { - LHS: "", - RHS: "nohlsearch|diffupdate", - Silent: 0, - NoRemap: 1, - Expr: 0, - Buffer: 0, - SID: 0, - NoWait: 0, - }, - { - LHS: "Y", - RHS: "y$", - Silent: 0, - NoRemap: 1, - Expr: 0, - Buffer: 0, - SID: 0, - NoWait: 0, - }, - { - LHS: "y", - RHS: "yy", - Silent: 0, - NoRemap: 0, - Expr: 0, - Buffer: 0, - SID: 0, - NoWait: 0, - }, - } - wantMapsLen = 2 - case 7: - wantMaps = []*Mapping{ - { - LHS: "", - RHS: "nohlsearch|diffupdate|normal! ", - Silent: 0, - NoRemap: 1, - Expr: 0, - Buffer: 0, - SID: 0, - NoWait: 0, - }, - { - LHS: "Y", - RHS: "y$", - Silent: 0, - NoRemap: 1, - Expr: 0, - Buffer: 0, - SID: 0, - NoWait: 0, - }, - { - LHS: "y", - RHS: "yy", - Silent: 0, - NoRemap: 0, - Expr: 0, - Buffer: 0, - SID: -9, - NoWait: 0, - }, - } - wantMapsLen = 2 - case 8: - wantMaps = []*Mapping{ - { - LHS: "&", - RHS: ":&&", - Silent: 0, - NoRemap: 1, - Expr: 0, - Buffer: 0, - SID: -8, - NoWait: 0, - }, - { - LHS: "Y", - RHS: "y$", - Silent: 0, - NoRemap: 1, - Expr: 0, - Buffer: 0, - SID: -8, - NoWait: 0, - }, - { - LHS: "y", - RHS: "yy", - Silent: 0, - NoRemap: 0, - Expr: 0, - Buffer: 0, - SID: -9, - NoWait: 0, - }, - { - LHS: "", - RHS: "nohlsearch|diffupdate|normal! ", - Silent: 0, - NoRemap: 1, - Expr: 0, - Buffer: 0, - SID: -8, - NoWait: 0, - }, - } - wantMapsLen = 3 - default: - wantMaps = []*Mapping{ - { - LHS: "&", - RHS: ":&&", - Silent: 0, - NoRemap: 1, - Expr: 0, - Buffer: 0, - SID: -8, - NoWait: 0, - }, - { - LHS: "Y", - RHS: "y$", - Silent: 0, - NoRemap: 1, - Expr: 0, - Buffer: 0, - SID: -8, - NoWait: 0, - }, - { - LHS: "y", - RHS: "yy", - Silent: 0, - NoRemap: 0, - Expr: 0, - Buffer: 0, - SID: -9, - NoWait: 0, - }, - { - LHS: "", - RHS: "nohlsearch|diffupdate|normal! ", - Silent: 0, - NoRemap: 1, - Expr: 0, - Buffer: 0, - SID: -8, - NoWait: 0, - }, - } - wantMapsLen = 3 + lhs := "y" + rhs := "yy" + + b.SetKeyMap(mode, lhs, rhs, make(map[string]bool)) + if err := b.Execute(); err != nil { + t.Fatal(err) } - var got []*Mapping - b.KeyMap(mode, &got) + var added []*Mapping + b.KeyMap(mode, &added) if err := b.Execute(); err != nil { t.Fatal(err) } - if !reflect.DeepEqual(got, wantMaps) { - for i, gotmap := range got { - t.Logf(" got[%d]: %#v", i, gotmap) - } - for i, wantmap := range wantMaps { - t.Logf("want[%d]: %#v", i, wantmap) + + if len(added) != len(original)+1 { + t.Fatalf("want %d but got %d", len(original)+1, len(added)) + } + + var keymap *Mapping + for _, m := range added { + if m.LHS == "y" { + keymap = m + break } - t.Fatalf("KeyMap(%s) = %#v, want: %#v", mode, got, wantMaps) } - b.DeleteKeyMap(mode, "y") + if keymap.LHS != lhs && keymap.RHS != rhs { + t.Fatalf("want { LHS = %s, RHS = %s } but got { LHS = %s, RHS = %s }", lhs, rhs, keymap.LHS, keymap.RHS) + } + + b.DeleteKeyMap(mode, lhs) if err := b.Execute(); err != nil { t.Fatal(err) } - var got2 []*Mapping - b.KeyMap(mode, &got2) + var deleted []*Mapping + b.KeyMap(mode, &deleted) if err := b.Execute(); err != nil { t.Fatal(err) } - if len(got2) != wantMapsLen { - t.Fatalf("expected %d but got %#v", wantMapsLen, got2) + + if len(deleted) != len(original) { + t.Fatalf("want %d but got %d", len(original), len(added)) } })