From cd5eb15f1a53714c19d676e533dc1e7a50fd3ec1 Mon Sep 17 00:00:00 2001 From: Denis Vaumoron Date: Sun, 22 Dec 2024 22:37:11 +0100 Subject: [PATCH] add asdfparser tests Signed-off-by: Denis Vaumoron --- .../semantic/parser/asdf/asdfparser.go | 11 +++- .../semantic/parser/asdf/asdfparser_test.go | 56 +++++++++++++++++++ .../parser/asdf/testdata/.tool-versions | 3 + 3 files changed, 67 insertions(+), 3 deletions(-) create mode 100644 versionmanager/semantic/parser/asdf/asdfparser_test.go create mode 100644 versionmanager/semantic/parser/asdf/testdata/.tool-versions diff --git a/versionmanager/semantic/parser/asdf/asdfparser.go b/versionmanager/semantic/parser/asdf/asdfparser.go index 6606e33..bd841b6 100644 --- a/versionmanager/semantic/parser/asdf/asdfparser.go +++ b/versionmanager/semantic/parser/asdf/asdfparser.go @@ -21,6 +21,7 @@ package asdfparser import ( "bufio" "errors" + "io" "io/fs" "os" "strings" @@ -59,8 +60,12 @@ func retrieveVersionFromToolFile(filePath, toolName string, conf *config.Config) } defer file.Close() + return parseVersionFromToolFileReader(filePath, file, toolName, conf.Displayer) +} + +func parseVersionFromToolFileReader(filePath string, reader io.Reader, toolName string, displayer loghelper.Displayer) (string, error) { resolvedVersion := "" - scanner := bufio.NewScanner(file) + scanner := bufio.NewScanner(reader) for scanner.Scan() { trimmedLine := strings.TrimSpace(scanner.Text()) @@ -78,7 +83,7 @@ func retrieveVersionFromToolFile(filePath, toolName string, conf *config.Config) } if err := scanner.Err(); err != nil { - conf.Displayer.Log(hclog.Warn, "Failed to parse tool file", loghelper.Error, err) + displayer.Log(hclog.Warn, "Failed to parse tool file", loghelper.Error, err) return "", nil } @@ -87,5 +92,5 @@ func retrieveVersionFromToolFile(filePath, toolName string, conf *config.Config) return "", nil } - return types.DisplayDetectionInfo(conf.Displayer, resolvedVersion, filePath), nil + return types.DisplayDetectionInfo(displayer, resolvedVersion, filePath), nil } diff --git a/versionmanager/semantic/parser/asdf/asdfparser_test.go b/versionmanager/semantic/parser/asdf/asdfparser_test.go new file mode 100644 index 0000000..0cf5002 --- /dev/null +++ b/versionmanager/semantic/parser/asdf/asdfparser_test.go @@ -0,0 +1,56 @@ +/* + * + * Copyright 2024 tofuutils authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +package asdfparser + +import ( + "bytes" + _ "embed" + "testing" + + "github.com/tofuutils/tenv/v3/pkg/loghelper" +) + +//go:embed testdata/.tool-versions +var toolFileData []byte + +func TestParseVersionFromToolFileReader(t *testing.T) { + t.Parallel() + + t.Run("BasicLine", func(t *testing.T) { + version, err := parseVersionFromToolFileReader("", bytes.NewReader(toolFileData), "nodejs", loghelper.InertDisplayer) + if err != nil { + t.Fatal("Unexpected parse error : ", err) + } + + if version != "10.15.0" { + t.Fatal("Unexpected version : ", version) + } + }) + + t.Run("LineWithComment", func(t *testing.T) { + version, err := parseVersionFromToolFileReader("", bytes.NewReader(toolFileData), "ruby", loghelper.InertDisplayer) + if err != nil { + t.Fatal("Unexpected parse error : ", err) + } + + if version != "2.5.3" { + t.Fatal("Unexpected version : ", version) + } + }) +} diff --git a/versionmanager/semantic/parser/asdf/testdata/.tool-versions b/versionmanager/semantic/parser/asdf/testdata/.tool-versions new file mode 100644 index 0000000..6c2596e --- /dev/null +++ b/versionmanager/semantic/parser/asdf/testdata/.tool-versions @@ -0,0 +1,3 @@ +ruby 2.5.3 # This is a comment +# This is another comment +nodejs 10.15.0