|
|
@@ -5,26 +5,27 @@ import (
|
|
|
"os"
|
|
|
"strings"
|
|
|
|
|
|
+ "gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs"
|
|
|
"gitp78su.ipnodns.ru/svi/kern/v4/lev0/helpers"
|
|
|
)
|
|
|
|
|
|
type IMockEnv interface {
|
|
|
// Pwd -- возвращает текущий рабочий каталог процесса
|
|
|
- Pwd() string
|
|
|
+ Pwd() defs.ITxtFix
|
|
|
}
|
|
|
|
|
|
// MockEnv -- объект мок-окружения.
|
|
|
type MockEnv struct {
|
|
|
- dictEnv map[string]string // Словарь переменных окружения
|
|
|
- pwd string // Текущий путь процесса
|
|
|
- fileName string // Полный путь к .env файлу
|
|
|
- strEnv string // Фактическое содержимое .env файла
|
|
|
+ dictEnv map[defs.ATxt]defs.ITxtFix // Словарь переменных окружения
|
|
|
+ pwd defs.ITxtFix // Текущий путь процесса
|
|
|
+ fileName defs.ITxtFix // Полный путь к .env файлу
|
|
|
+ strEnv defs.ITxtFix // Фактическое содержимое .env файла
|
|
|
}
|
|
|
|
|
|
// MakeEnv -- возвращает новое мок-окружение.
|
|
|
func MakeEnv() *MockEnv {
|
|
|
sf := &MockEnv{
|
|
|
- dictEnv: map[string]string{},
|
|
|
+ dictEnv: map[defs.ATxt]defs.ITxtFix{},
|
|
|
}
|
|
|
sf.setPath()
|
|
|
sf.readEnv()
|
|
|
@@ -36,7 +37,7 @@ func MakeEnv() *MockEnv {
|
|
|
|
|
|
// Парсит полученный текст .env для установки переменных окружения.
|
|
|
func (sf *MockEnv) parseEnv() {
|
|
|
- lstStr := strings.SplitSeq(sf.strEnv, "\n")
|
|
|
+ lstStr := strings.SplitSeq(sf.strEnv.String(), "\n")
|
|
|
for val := range lstStr {
|
|
|
pair := strings.TrimSuffix(val, "\r")
|
|
|
if pair == "" {
|
|
|
@@ -45,13 +46,13 @@ func (sf *MockEnv) parseEnv() {
|
|
|
if strings.HasPrefix(val, "#") {
|
|
|
continue
|
|
|
}
|
|
|
- sf.parseEnvStr(pair)
|
|
|
+ sf.parseEnvStr(defs.Txt(pair))
|
|
|
}
|
|
|
}
|
|
|
|
|
|
// Парсит строку окружения.
|
|
|
-func (sf *MockEnv) parseEnvStr(pair string) {
|
|
|
- lstPair := strings.Split(pair, "=")
|
|
|
+func (sf *MockEnv) parseEnvStr(pair defs.ITxtFix) {
|
|
|
+ lstPair := strings.Split(pair.String(), "=")
|
|
|
helpers.Hassert(len(lstPair) >= 2, "MockEnv.parseEnvStr(): pair(%v) not have =", []any{pair})
|
|
|
key := lstPair[0]
|
|
|
helpers.Hassert(key != "", "MockEnv.parseEnvStr(): in pair(%v) key is empty", []any{pair})
|
|
|
@@ -64,14 +65,14 @@ func (sf *MockEnv) parseEnvStr(pair string) {
|
|
|
val = strings.TrimSuffix(val, "=")
|
|
|
|
|
|
helpers.Hassert(val != "", "MockEnv.parseEnvStr(): in pair(%v) val is empty", []any{pair})
|
|
|
- sf.dictEnv[key] = val
|
|
|
+ sf.dictEnv[defs.ATxt(key)] = defs.Txt(val)
|
|
|
}
|
|
|
|
|
|
// Читает файл переменных окружения.
|
|
|
func (sf *MockEnv) readEnv() {
|
|
|
- binEnv, err := os.ReadFile(sf.fileName)
|
|
|
+ binEnv, err := os.ReadFile(sf.fileName.String())
|
|
|
helpers.Hassert(err == nil, "MockEnv.readEnv(): in read %v, err=\n\t%v", []any{sf.fileName, err})
|
|
|
- sf.strEnv = string(binEnv)
|
|
|
+ sf.strEnv = defs.Txt(string(binEnv))
|
|
|
}
|
|
|
|
|
|
// Устанавливает текущий путь относительно проекта в dev.
|
|
|
@@ -92,16 +93,16 @@ func (sf *MockEnv) setPath() {
|
|
|
}
|
|
|
}
|
|
|
helpers.Hassert(isFind, "MockEnv.setPath(): not find file .env", []any{})
|
|
|
- sf.pwd = pwd.String() + "/bin_dev"
|
|
|
- err = os.MkdirAll(sf.pwd, 0750)
|
|
|
+ sf.pwd = defs.Txt(pwd.String() + "/bin_dev")
|
|
|
+ err = os.MkdirAll(sf.pwd.String(), 0750)
|
|
|
helpers.Hassert(err == nil, "MockEnv.setPath(): in create PWD, err=\n\t%v", []any{err})
|
|
|
- err = os.Chdir(sf.pwd)
|
|
|
+ err = os.Chdir(sf.pwd.String())
|
|
|
helpers.Hassert(err == nil, "MockEnv.setPath(): in set cwd(%v), err=\n\t%v", []any{sf.pwd, err})
|
|
|
- sf.fileName = fileName
|
|
|
+ sf.fileName = defs.Txt(fileName)
|
|
|
}
|
|
|
|
|
|
// Pwd -- возвращает текущий рабочий каталог процесса.
|
|
|
-func (sf *MockEnv) Pwd() string {
|
|
|
+func (sf *MockEnv) Pwd() defs.ITxtFix {
|
|
|
return sf.pwd
|
|
|
}
|
|
|
|
|
|
@@ -109,8 +110,8 @@ func (sf *MockEnv) Pwd() string {
|
|
|
func (sf *MockEnv) SetAll() error {
|
|
|
sf.ResetAll()
|
|
|
for key, val := range sf.dictEnv {
|
|
|
- sf.Reset("key")
|
|
|
- err := os.Setenv(key, val)
|
|
|
+ sf.Reset(defs.Txt("key"))
|
|
|
+ err := os.Setenv(string(key), val.String())
|
|
|
helpers.Hassert(err == nil, "MockEnv.SetAll(): in set env %v on key %v, err=\n\t%v", []any{key, val, err})
|
|
|
}
|
|
|
return nil
|
|
|
@@ -119,13 +120,13 @@ func (sf *MockEnv) SetAll() error {
|
|
|
// ResetAll -- сбрасывает все переменные окружения.
|
|
|
func (sf *MockEnv) ResetAll() {
|
|
|
for key := range sf.dictEnv {
|
|
|
- sf.Reset(key)
|
|
|
+ sf.Reset(defs.Txt(key))
|
|
|
}
|
|
|
}
|
|
|
|
|
|
// Reset -- сбрасывает конкретный ключ.
|
|
|
-func (sf *MockEnv) Reset(key string) {
|
|
|
- helpers.Hassert(key != "", "MockEnv.Reset(): key is empty", []any{})
|
|
|
- err := os.Unsetenv(key)
|
|
|
+func (sf *MockEnv) Reset(key defs.ITxtFix) {
|
|
|
+ helpers.Hassert(key.Get() != "", "MockEnv.Reset(): key is empty", []any{})
|
|
|
+ err := os.Unsetenv(key.String())
|
|
|
helpers.Hassert(err == nil, "MockEnv.Reset(): in reset env %v, err=\n\t%v", []any{key, err})
|
|
|
}
|