start output file processing

pull/2/head
Jean-Marc MEESSEN 4 years ago
parent 9a174a36d8
commit bcdae46979

@ -17,11 +17,9 @@ limitations under the License.
*/ */
import ( import (
"fmt" "fmt"
"github.com/spf13/cobra" "github.com/spf13/cobra"
// "log" // "log"
//"strings" //"strings"
) )

@ -0,0 +1,70 @@
package cmd
/*
Copyright © 2020 Jean-Marc Meessen, ON4KJM <on4kjm@gmail.com>
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.
*/
import (
"os"
//"log"
"fmt"
)
// does the target file exist?
// is the file defined
// remove the extention
//returning "" is considered as invalid
func buildOutputFilename(output string, input string, overwrite bool) (outputFilename string, wasOK bool) {
outputFilename = ""
//validate that input is populated (should never happen if properly called)
if input == "" {
return "", false
}
//an output was provided by the user
if output != "" {
info, err := os.Stat(output)
if os.IsNotExist(err) {
return output, true
}
//It exisits but is a directory
if info.IsDir() {
fmt.Println("Error: specified output exists and is a directory")
return "", false
}
if overwrite {
//user accepted to overwrite the file
return output, true
}
return "", false
}
//if output is not null, check if file exits
//if it exists, check the flag
//if output
return outputFilename, true
}
// fileExists checks if a file exists and is not a directory before we
// try using it to prevent further errors.
func fileExists(filename string) bool {
info, err := os.Stat(filename)
if os.IsNotExist(err) {
return false
}
return !info.IsDir()
}

@ -0,0 +1,76 @@
package cmd
import (
"os"
"testing"
)
const testDir string = "test_dir"
const testFile string = "test.adi"
func setupTestCase(t *testing.T) func(t *testing.T) {
t.Log("setup test case")
//create test directory
os.Mkdir(testDir, os.FileMode(0522))
//create test file
f, _ := os.OpenFile(testFile, os.O_WRONLY|os.O_CREATE, 0666)
defer f.Close()
return func(t *testing.T) {
t.Log("teardown test case")
//delete test directory
os.Remove(testDir)
//detete test file
os.Remove(testFile)
}
}
func Test_buildOutputFilename(t *testing.T) {
type args struct {
output string
input string
overwrite bool
}
tests := []struct {
name string
args args
wantOutputFilename string
wantWasOK bool
}{
{
"input file not provided",
args{input: "", output: "xxx", overwrite: false},
"", false,
},
{
"Output file does not exist",
args{input: "a file", output: "output.adi", overwrite: false},
"output.adi", true,
},
{
"Output name is a directory",
args{input: "a file", output: testDir, overwrite: false},
"", false,
},
{
"Output exisit but no overwrite",
args{input: "a file", output: testFile, overwrite: false},
"", false,
},
}
teardownTestCase := setupTestCase(t)
defer teardownTestCase(t)
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
gotOutputFilename, gotWasOK := buildOutputFilename(tt.args.output, tt.args.input, tt.args.overwrite)
if gotOutputFilename != tt.wantOutputFilename {
t.Errorf("buildOutputFilename() gotOutputFilename = %v, want %v", gotOutputFilename, tt.wantOutputFilename)
}
if gotWasOK != tt.wantWasOK {
t.Errorf("buildOutputFilename() gotWasOK = %v, want %v", gotWasOK, tt.wantWasOK)
}
})
}
}

@ -0,0 +1,21 @@
package cmd
/*
Copyright © 2020 Jean-Marc Meessen, ON4KJM <on4kjm@gmail.com>
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.
*/
// does the target file exist?
// is the file defined
// remove the extention
Loading…
Cancel
Save