2020-11-14 11:04:04 -08:00
|
|
|
package main
|
|
|
|
|
|
|
|
import (
|
|
|
|
"testing"
|
|
|
|
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
|
|
)
|
|
|
|
|
|
|
|
const (
|
|
|
|
universion = "1.3.3.7"
|
|
|
|
uni = "*.uni"
|
|
|
|
corn = "*.corn"
|
|
|
|
)
|
|
|
|
|
|
|
|
type languageArgs struct {
|
|
|
|
version string
|
|
|
|
displayVersion bool
|
2020-12-21 11:16:33 -08:00
|
|
|
displayMode string
|
2020-11-14 11:04:04 -08:00
|
|
|
extensions []string
|
|
|
|
enabledExtensions []string
|
|
|
|
commands []string
|
|
|
|
enabledCommands []string
|
|
|
|
versionParam string
|
|
|
|
versionRegex string
|
|
|
|
}
|
|
|
|
|
|
|
|
func (l *languageArgs) hasvalue(value string, list []string) bool {
|
|
|
|
for _, element := range list {
|
|
|
|
if element == value {
|
|
|
|
return true
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return false
|
|
|
|
}
|
|
|
|
|
|
|
|
func bootStrapLanguageTest(args *languageArgs) *language {
|
|
|
|
env := new(MockedEnvironment)
|
|
|
|
for _, command := range args.commands {
|
|
|
|
env.On("hasCommand", command).Return(args.hasvalue(command, args.enabledCommands))
|
|
|
|
env.On("runCommand", command, []string{args.versionParam}).Return(args.version, nil)
|
|
|
|
}
|
|
|
|
for _, extension := range args.extensions {
|
|
|
|
env.On("hasFiles", extension).Return(args.hasvalue(extension, args.enabledExtensions))
|
|
|
|
}
|
|
|
|
props := &properties{
|
|
|
|
values: map[Property]interface{}{
|
2020-12-21 11:16:33 -08:00
|
|
|
DisplayVersion: args.displayVersion,
|
|
|
|
DisplayModeProperty: args.displayMode,
|
2020-11-14 11:04:04 -08:00
|
|
|
},
|
|
|
|
}
|
|
|
|
l := &language{
|
|
|
|
props: props,
|
|
|
|
env: env,
|
|
|
|
extensions: args.extensions,
|
|
|
|
commands: args.commands,
|
|
|
|
versionParam: args.versionParam,
|
|
|
|
versionRegex: args.versionRegex,
|
|
|
|
}
|
|
|
|
return l
|
|
|
|
}
|
|
|
|
|
2020-12-21 11:16:33 -08:00
|
|
|
func TestLanguageFilesFoundButNoCommandAndVersion(t *testing.T) {
|
2020-11-14 11:04:04 -08:00
|
|
|
args := &languageArgs{
|
|
|
|
commands: []string{"unicorn"},
|
|
|
|
versionParam: "--version",
|
|
|
|
extensions: []string{uni},
|
|
|
|
enabledExtensions: []string{uni},
|
2020-12-21 11:16:33 -08:00
|
|
|
displayVersion: true,
|
2020-11-14 11:04:04 -08:00
|
|
|
}
|
|
|
|
lang := bootStrapLanguageTest(args)
|
|
|
|
assert.False(t, lang.enabled(), "unicorn is not available")
|
|
|
|
}
|
|
|
|
|
2020-12-21 11:16:33 -08:00
|
|
|
func TestLanguageFilesFoundButNoCommandAndNoVersion(t *testing.T) {
|
|
|
|
args := &languageArgs{
|
|
|
|
commands: []string{"unicorn"},
|
|
|
|
versionParam: "--version",
|
|
|
|
extensions: []string{uni},
|
|
|
|
enabledExtensions: []string{uni},
|
|
|
|
}
|
|
|
|
lang := bootStrapLanguageTest(args)
|
|
|
|
assert.True(t, lang.enabled(), "unicorn is not available")
|
|
|
|
}
|
|
|
|
|
2020-11-14 11:04:04 -08:00
|
|
|
func TestLanguageDisabledNoFiles(t *testing.T) {
|
|
|
|
args := &languageArgs{
|
|
|
|
versionParam: "--version",
|
|
|
|
commands: []string{"unicorn"},
|
|
|
|
enabledCommands: []string{"unicorn"},
|
|
|
|
extensions: []string{uni},
|
|
|
|
}
|
|
|
|
lang := bootStrapLanguageTest(args)
|
|
|
|
assert.False(t, lang.enabled(), "no files in the current directory")
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestLanguageEnabledOneExtensionFound(t *testing.T) {
|
|
|
|
args := &languageArgs{
|
|
|
|
versionParam: "--version",
|
|
|
|
commands: []string{"unicorn"},
|
|
|
|
enabledCommands: []string{"unicorn"},
|
|
|
|
extensions: []string{uni, corn},
|
|
|
|
enabledExtensions: []string{uni},
|
|
|
|
versionRegex: "(?P<version>.*)",
|
|
|
|
version: universion,
|
|
|
|
displayVersion: true,
|
|
|
|
}
|
|
|
|
lang := bootStrapLanguageTest(args)
|
|
|
|
assert.True(t, lang.enabled())
|
|
|
|
assert.Equal(t, universion, lang.string(), "unicorn is available and uni files are found")
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestLanguageEnabledSecondExtensionFound(t *testing.T) {
|
|
|
|
args := &languageArgs{
|
|
|
|
versionParam: "--version",
|
|
|
|
commands: []string{"unicorn"},
|
|
|
|
enabledCommands: []string{"unicorn"},
|
|
|
|
extensions: []string{uni, corn},
|
|
|
|
versionRegex: "(?P<version>.*)",
|
|
|
|
version: universion,
|
|
|
|
enabledExtensions: []string{corn},
|
|
|
|
displayVersion: true,
|
|
|
|
}
|
|
|
|
lang := bootStrapLanguageTest(args)
|
|
|
|
assert.True(t, lang.enabled())
|
|
|
|
assert.Equal(t, universion, lang.string(), "unicorn is available and corn files are found")
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestLanguageEnabledSecondCommand(t *testing.T) {
|
|
|
|
args := &languageArgs{
|
|
|
|
versionParam: "--version",
|
|
|
|
commands: []string{"uni", "corn"},
|
|
|
|
enabledCommands: []string{"corn"},
|
|
|
|
extensions: []string{uni, corn},
|
|
|
|
versionRegex: "(?P<version>.*)",
|
|
|
|
version: universion,
|
|
|
|
enabledExtensions: []string{corn},
|
|
|
|
displayVersion: true,
|
|
|
|
}
|
|
|
|
lang := bootStrapLanguageTest(args)
|
|
|
|
assert.True(t, lang.enabled())
|
|
|
|
assert.Equal(t, universion, lang.string(), "unicorn is available and corn files are found")
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestLanguageEnabledAllExtensionsFound(t *testing.T) {
|
|
|
|
args := &languageArgs{
|
|
|
|
versionParam: "--version",
|
|
|
|
commands: []string{"unicorn"},
|
|
|
|
enabledCommands: []string{"unicorn"},
|
|
|
|
extensions: []string{uni, corn},
|
|
|
|
versionRegex: "(?P<version>.*)",
|
|
|
|
version: universion,
|
|
|
|
enabledExtensions: []string{uni, corn},
|
|
|
|
displayVersion: true,
|
|
|
|
}
|
|
|
|
lang := bootStrapLanguageTest(args)
|
|
|
|
assert.True(t, lang.enabled())
|
|
|
|
assert.Equal(t, universion, lang.string(), "unicorn is available and uni and corn files are found")
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestLanguageEnabledNoVersion(t *testing.T) {
|
|
|
|
args := &languageArgs{
|
|
|
|
versionParam: "--version",
|
|
|
|
commands: []string{"unicorn"},
|
|
|
|
enabledCommands: []string{"unicorn"},
|
|
|
|
extensions: []string{uni, corn},
|
|
|
|
versionRegex: "(?P<version>.*)",
|
|
|
|
version: universion,
|
|
|
|
enabledExtensions: []string{uni, corn},
|
|
|
|
displayVersion: false,
|
|
|
|
}
|
|
|
|
lang := bootStrapLanguageTest(args)
|
|
|
|
assert.True(t, lang.enabled())
|
|
|
|
assert.Equal(t, "", lang.string(), "unicorn is available and uni and corn files are found")
|
|
|
|
}
|