diff --git "a/tests/\320\237\321\203\321\202\320\270.os" "b/tests/\320\237\321\203\321\202\320\270.os" index 3d3d23c..e7777a8 100644 --- "a/tests/\320\237\321\203\321\202\320\270.os" +++ "b/tests/\320\237\321\203\321\202\320\270.os" @@ -160,6 +160,122 @@ КонецПроцедуры +&Тест +// Абсолютные - буква диска +&Параметры("C:\", Истина) +&Параметры("C:\Windows", Истина) +&Параметры("C:\Program Files\", Истина) +&Параметры("D:\Data\file.txt", Истина) +&Параметры("C:/", Истина) +&Параметры("C:/Windows/System32", Истина) +&Параметры("Z:\folder", Истина) +&Параметры("A:\", Истина) +&Параметры("a:\folder", Истина) // строчная буква +&Параметры("E:/path/to/file", Истина) +// Абсолютные - Относительно текущего диска +&Параметры("\Windows", Истина) +&Параметры("/Windows", Истина) +// Абсолютные - UNC пути +&Параметры("\\server\share", Истина) +&Параметры("\\server\share\folder\file.txt", Истина) +&Параметры("\\192.168.1.1\c$", Истина) +&Параметры("\\", Истина) // граничный случай с допущением +&Параметры("\\\", Истина) // граничный случай с допущением +&Параметры("\\server", Истина) +&Параметры("\\SERVERNAME\ShareName$\Folder", Истина) +// Относительные +&Параметры("Windows\System32", Ложь) +&Параметры(".\file.txt", Ложь) +&Параметры("..\parent", Ложь) +&Параметры("C:", Ложь) +&Параметры("C:file.txt", Ложь) +&Параметры("folder\file.txt", Ложь) +&Параметры("..\..\file", Ложь) +&Параметры(".\.\file", Ложь) +// Ошибочные случаи +&Параметры("1:\path", Ложь) +&Параметры("@:\folder", Ложь) +&Параметры("AA:\file", Ложь) +&Параметры("!:\test", Ложь) +&Параметры("9:/path", Ложь) +// Пустые и пробельные строки +&Параметры("", Ложь) +&Параметры(" ", Ложь) +&Параметры(" ", Ложь) // табуляция +// Пути с пробелами +&Параметры("C:\Program Files\My App\file.exe", Истина) +&Параметры("\\server\my share\folder", Истина) +&Параметры("C:\Folder With Spaces\", Истина) +// Пути с обрамляющими пробелами (должны обрезаться) +&Параметры(" C:\Windows ", Истина) +&Параметры(" \\server\share ", Истина) +&Параметры(" C:/test ", Истина) +&Параметры(" Windows\System32 ", Ложь) +// Смешанные слэши +&Параметры("C:\Windows/System32", Истина) +&Параметры("C:/Windows\System32", Истина) +&Параметры("D:\folder/subfolder\file.txt", Истина) +Процедура Тест_ЭтоАбсолютныйПутьWindows(Путь, ЭтоАбсолютный) Экспорт + + Ожидаем.Что(лФС.ЭтоАбсолютныйПутьWindows(Путь)).Равно(ЭтоАбсолютный); + +КонецПроцедуры + +&Тест +// Абсолютные +&Параметры("/", Истина) +&Параметры("/home", Истина) +&Параметры("/home/user/file.txt", Истина) +&Параметры("/var/log/", Истина) +&Параметры("/usr/local/bin", Истина) +&Параметры("/etc/nginx/nginx.conf", Истина) +&Параметры("/tmp/", Истина) +// Относительные +&Параметры("home/user", Ложь) +&Параметры("./file.txt", Ложь) +&Параметры("../parent/file", Ложь) +&Параметры("file.txt", Ложь) +&Параметры("folder/subfolder", Ложь) +&Параметры("../../..", Ложь) +&Параметры("./././file", Ложь) +&Параметры("~", Ложь) +&Параметры("~/Documents", Ложь) +// Пустые и пробельные строки +&Параметры("", Ложь) +&Параметры(" ", Ложь) +&Параметры(" ", Ложь) // табуляция +// Пути с пробелами +&Параметры("/home/my folder/file.txt", Истина) +&Параметры("/var/log/my app/error.log", Истина) +&Параметры("/path with spaces/", Истина) +// Пути с обрамляющими пробелами +&Параметры(" /home/user ", Истина) +&Параметры(" /var/log ", Истина) +&Параметры(" home/user ", Ложь) +// Точки в путях +&Параметры("/home/user/.bashrc", Истина) +&Параметры("/home/user/.config/app/settings.json", Истина) +&Параметры("/.hidden", Истина) +Процедура Тест_ЭтоАбсолютныйПутьUnix(Путь, ЭтоАбсолютный) Экспорт + + Ожидаем.Что(лФС.ЭтоАбсолютныйПутьUnix(Путь)).Равно(ЭтоАбсолютный); + +КонецПроцедуры + +&Тест +#Если Windows Тогда +&Параметры("C:\Windows/System32", Истина) +&Параметры("/home", Истина) +#Иначе +&Параметры("C:\Windows/System32", Ложь) +&Параметры("/home", Истина) +#КонецЕсли +Процедура Тест_ЭтоАбсолютныйПуть(Путь, ЭтоАбсолютный) Экспорт + + Ожидаем.Что(лФС.ЭтоАбсолютныйПуть(Путь)).Равно(ЭтоАбсолютный); + +КонецПроцедуры + Процедура СоздатьФайлЗаглушку(Каталог, ИмяФайла) ПолныйПуть = ОбъединитьПути(Каталог, ИмяФайла); Текст = Новый ЗаписьТекста(ПолныйПуть); diff --git "a/\320\234\320\276\320\264\321\203\320\273\320\270/\320\244\320\241.os" "b/\320\234\320\276\320\264\321\203\320\273\320\270/\320\244\320\241.os" index f33742a..3f73f55 100644 --- "a/\320\234\320\276\320\264\321\203\320\273\320\270/\320\244\320\241.os" +++ "b/\320\234\320\276\320\264\321\203\320\273\320\270/\320\244\320\241.os" @@ -339,3 +339,55 @@ Возврат РезультирующийПуть; КонецФункции + +Функция ЭтоАбсолютныйПуть(Знач Путь) Экспорт + Если ЭтоWindows() Тогда + Возврат ЭтоАбсолютныйПутьWindows(Путь); + Иначе + Возврат ЭтоАбсолютныйПутьUnix(Путь); + КонецЕсли; +КонецФункции + +Функция ЭтоАбсолютныйПутьUnix(Знач Путь) Экспорт + Путь = СокрЛП(Путь); + Возврат Лев(Путь, 1) = "/"; +КонецФункции + +Функция ЭтоАбсолютныйПутьWindows(Знач Путь) Экспорт + + Путь = СокрЛП(Путь); + ПервыйСимвол = Лев(Путь, 1); + + Если ПервыйСимвол = "\" Или ПервыйСимвол = "/" Тогда + Возврат Истина; + КонецЕсли; + + // C:\ или C:/ + Если СтрДлина(Путь) >= 3 Тогда + ВторойСимвол = Сред(Путь, 2, 1); + ТретийСимвол = Сред(Путь, 3, 1); + + Если ЭтоДопустимаяБукваДискаWindows(ПервыйСимвол) + И ВторойСимвол = ":" + И (ТретийСимвол = "\" Или ТретийСимвол = "/") Тогда + Возврат Истина; + КонецЕсли; + КонецЕсли; + + Возврат Ложь; + +КонецФункции + +Функция ЭтоДопустимаяБукваДискаWindows(Символ) + + Код = КодСимвола(Символ); + + Возврат (Код >= КодСимвола("A") И Код <= КодСимвола("Z")) + ИЛИ (Код >= КодСимвола("a") И Код <= КодСимвола("z")); + +КонецФункции + +Функция ЭтоWindows() + Платформа = Новый СистемнаяИнформация().ТипПлатформы; + Возврат Платформа = ТипПлатформы.Windows_x86 Или Платформа = ТипПлатформы.Windows_x86_64; +КонецФункции \ No newline at end of file