/
EvilBeaver
/
OneScript
Обзор
Документация
Войти
/
EvilBeaver
/
OneScript
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
develop
tests/text-write.os
532 строки
26 KB
Ivan Karlo
test(text-write): update expected line count in text reading test
01 май 2026, 20:45
01 май 2026, 20:45
126d144
Код
Авторство
О чём код?
Перем юТест; Функция ПолучитьСписокТестов(ЮнитТестирование) Экспорт юТест = ЮнитТестирование; ВсеТесты = Новый Массив; // Работа с файлом ВсеТесты.Добавить("ТестДолжен_ПроверитьЧтоВозможнаЗаписьUTF8БезBOMСтандартно"); ВсеТесты.Добавить("ТестДолжен_ПроверитьЧтоВозможнаЗаписьUTF8БезBOMСтандартноСПеречислениемКодировкаТекста"); ВсеТесты.Добавить("ТестДолжен_ПроверитьЧтоВозможнаЗаписьUTF8БезBOMСПеречислениемКодировкаТекста"); ВсеТесты.Добавить("ТестДолжен_ПроверитьЧтоНеоткрытыйФайлБросаетПравильноеИсключениеВМетодеЗаписать"); ВсеТесты.Добавить("ТестДолжен_ПроверитьЧтоНеоткрытыйФайлБросаетПравильноеИсключениеВМетодеЗаписатьСтроку"); ВсеТесты.Добавить("ТестДолжен_ПроверитьЧтоРаботаетКонструкторПоИмениФайлаСНезаполненнымиНеобязательнымиПолями"); ВсеТесты.Добавить("ТестДолжен_ПроверитьЧтоЗаписьСтрокиВФайлПроисходитСразуБезКеширования"); ВсеТесты.Добавить("ТестДолжен_ПроверитьРаботуНеобычныхРазделителей1"); ВсеТесты.Добавить("ТестДолжен_ПроверитьРаботуНеобычныхРазделителей2"); ВсеТесты.Добавить("ТестДолжен_ПроверитьРаботуНеобычныхРазделителей3"); ВсеТесты.Добавить("ТестДолжен_ПрочитатьИзФайлаСРазнымиПереводамиСтрок"); // Работа с потоком ВсеТесты.Добавить("ТестДолжен_ПроверитьЧтоВозможнаЗаписьВПотокПамяти"); ВсеТесты.Добавить("ТестДолжен_ПроверитьЧтоВозможнаЗаписьВПотокСКодировкой"); ВсеТесты.Добавить("ТестДолжен_ПроверитьЧтоВозможнаЗаписьВПотокСМеткойBOM"); ВсеТесты.Добавить("ТестДолжен_ПроверитьУстановкуПотокаДляЗаписи"); ВсеТесты.Добавить("ТестДолжен_ПроверитьЧтоКонструкторНеБроситИсключениеДляЗакрытогоПотока"); ВсеТесты.Добавить("ТестДолжен_ПроверитьЧтоНеоткрытыйПотокПриЗаписиБросаетПравильноеИсключение"); ВсеТесты.Добавить("ТестДолжен_ПроверитьЧтоПотокДляЧтенияПриЗаписиБросаетПравильноеИсключение"); // Работа с файлом и потоком ВсеТесты.Добавить("ТестДолжен_ПроверитьПереоткрытиеСФайлаНаПоток"); ВсеТесты.Добавить("ТестДолжен_ПроверитьПереоткрытиеСПотокаНаФайл"); ВсеТесты.Добавить("ТестДолжен_ПроверитьРаботуРазделителей"); Возврат ВсеТесты; КонецФункции Процедура ТестДолжен_ПроверитьЧтоВозможнаЗаписьUTF8БезBOMСтандартно() Экспорт Путь = ПолучитьИмяВременногоФайла("txt"); ЗТ = Новый ЗаписьТекста(Путь, "windows-1251"); ЗТ.Закрыть(); ЗТ = Новый ЗаписьТекста(Путь,"UTF-8",,Истина); ЗТ.Записать("Привет"); ЗТ.Закрыть(); Файл = Новый Файл(Путь); Попытка юТест.ПроверитьРавенство(12, Файл.Размер()); Исключение УдалитьФайлы(Путь); ВызватьИсключение; КонецПопытки; УдалитьФайлы(Путь); КонецПроцедуры Процедура ТестДолжен_ПроверитьЧтоВозможнаЗаписьUTF8БезBOMСтандартноСПеречислениемКодировкаТекста() Экспорт Путь = ПолучитьИмяВременногоФайла("txt"); ЗТ = Новый ЗаписьТекста(Путь, КодировкаТекста.ANSI); ЗТ.Закрыть(); ЗТ = Новый ЗаписьТекста(Путь,КодировкаТекста.UTF8,,Истина); ЗТ.Записать("Привет"); ЗТ.Закрыть(); Файл = Новый Файл(Путь); Попытка юТест.ПроверитьРавенство(12, Файл.Размер()); Исключение УдалитьФайлы(Путь); ВызватьИсключение; КонецПопытки; УдалитьФайлы(Путь); КонецПроцедуры Процедура ТестДолжен_ПроверитьЧтоВозможнаЗаписьUTF8БезBOMСПеречислениемКодировкаТекста() Экспорт Путь = ПолучитьИмяВременногоФайла("txt"); ЗТ = Новый ЗаписьТекста(Путь,КодировкаТекста.UTF8NoBOM); ЗТ.Записать("Привет"); ЗТ.Закрыть(); Файл = Новый Файл(Путь); Попытка юТест.ПроверитьРавенство(12, Файл.Размер()); Исключение УдалитьФайлы(Путь); ВызватьИсключение; КонецПопытки; УдалитьФайлы(Путь); КонецПроцедуры Процедура ТестДолжен_ПроверитьЧтоНеоткрытыйФайлБросаетПравильноеИсключениеВМетодеЗаписать() Экспорт Запись = Новый ЗаписьТекста(); Попытка Запись.Записать("---"); Исключение юТест.ПроверитьРавенство(ИнформацияОбОшибке().Описание, "Файл не открыт", "Метод Записать должен бросать правильное исключение"); Возврат; КонецПопытки; ВызватьИсключение "Не было брошено исключение"; КонецПроцедуры Процедура ТестДолжен_ПроверитьЧтоНеоткрытыйФайлБросаетПравильноеИсключениеВМетодеЗаписатьСтроку() Экспорт Запись = Новый ЗаписьТекста(); Попытка Запись.ЗаписатьСтроку("---"); Исключение юТест.ПроверитьРавенство(ИнформацияОбОшибке().Описание, "Файл не открыт", "Метод ЗаписатьСтроку должен бросать правильное исключение"); Возврат; КонецПопытки; ВызватьИсключение "Не было брошено исключение"; КонецПроцедуры Процедура ТестДолжен_ПроверитьЧтоРаботаетКонструкторПоИмениФайлаСНезаполненнымиНеобязательнымиПолями() Экспорт Перем ИмяФайла, Запись; ИмяФайла = ПолучитьИмяВременногоФайла("txt"); Попытка Запись = Новый ЗаписьТекста(ИмяФайла); Исключение ВызватьИсключение "Не работает конструктор ЗаписьТекста(ИмяФайла,,,)"; КонецПопытки; Запись.Закрыть(); Попытка Запись = Новый ЗаписьТекста(ИмяФайла, КодировкаТекста.ANSI); Исключение ВызватьИсключение "Не работает конструктор ЗаписьТекста(ИмяФайла, Кодировка,,)"; КонецПопытки; Запись.Закрыть(); Попытка Запись = Новый ЗаписьТекста(ИмяФайла, КодировкаТекста.ANSI, Символы.ПС); Исключение ВызватьИсключение "Не работает конструктор ЗаписьТекста(ИмяФайла, Кодировка, ПереводСтрок,)"; КонецПопытки; Запись.Закрыть(); КонецПроцедуры Процедура ТестДолжен_ПроверитьЧтоЗаписьСтрокиВФайлПроисходитСразуБезКеширования() Экспорт Перем ИмяФайла, Запись; ИмяФайла = ПолучитьИмяВременногоФайла("txt"); СтрокаДляФайла = "---"; Запись = Новый ЗаписьТекста(ИмяФайла); Запись.Записать(СтрокаДляФайла); Файл = Новый Файл(ИмяФайла); Попытка юТест.ПроверитьРавенство(6, Файл.Размер()); Исключение Запись.Закрыть(); УдалитьФайлы(ИмяФайла); ВызватьИсключение; КонецПопытки; Запись.Закрыть(); УдалитьФайлы(ИмяФайла); КонецПроцедуры Процедура ТестДолжен_ПроверитьРаботуНеобычныхРазделителей1() Экспорт ИмяФайла = ПолучитьИмяВременногоФайла("txt"); Запись = Новый ЗаписьТекста; Запись.Открыть(ИмяФайла, , "/"); Запись.ЗаписатьСтроку("123"); Запись.ЗаписатьСтроку("123 |456 |789" ); Запись.Закрыть(); Чтение = Новый ЧтениеТекста; Чтение.Открыть(ИмяФайла); юТест.ПроверитьРавенство(Чтение.ПрочитатьСтроку(), "123/123", "Запись строки с разделителем /"); юТест.ПроверитьРавенство(Чтение.ПрочитатьСтроку(), "456", "Запись строки с разделителем /"); юТест.ПроверитьРавенство(Чтение.ПрочитатьСтроку(), "789/", "Запись строки с разделителем /"); КонецПроцедуры Процедура ТестДолжен_ПроверитьРаботуНеобычныхРазделителей2() Экспорт ИмяФайла = ПолучитьИмяВременногоФайла("txt"); Запись = Новый ЗаписьТекста; Запись.Открыть(ИмяФайла, , , , "/"); Запись.ЗаписатьСтроку("123"); Запись.ЗаписатьСтроку("123 |456 |789" ); Запись.Закрыть(); Чтение = Новый ЧтениеТекста; Чтение.Открыть(ИмяФайла); юТест.ПроверитьРавенство(Чтение.ПрочитатьСтроку(), "123/123/456/789/", "Запись строки с разделителем в файле /"); юТест.ПроверитьРавенство(Чтение.ПрочитатьСтроку(), Неопределено, "Запись строки с разделителем в файле /"); КонецПроцедуры Процедура ТестДолжен_ПроверитьРаботуНеобычныхРазделителей3() Экспорт ИмяФайла = ПолучитьИмяВременногоФайла("txt"); Запись = Новый ЗаписьТекста; Запись.Открыть(ИмяФайла, , "-", , "/"); Запись.ЗаписатьСтроку("123"); Запись.ЗаписатьСтроку("123 |456 |789" ); Запись.Закрыть(); Чтение = Новый ЧтениеТекста; Чтение.Открыть(ИмяФайла); юТест.ПроверитьРавенство(Чтение.ПрочитатьСтроку(), "123-123/456/789-", "Запись строки с разделителем в файле /"); юТест.ПроверитьРавенство(Чтение.ПрочитатьСтроку(), Неопределено, "Запись строки с разделителем в файле /"); КонецПроцедуры Функция КаталогИсходников() Файл = Новый Файл(ТекущийСценарий().Источник); Возврат Файл.Путь; КонецФункции Процедура ТестДолжен_ПрочитатьИзФайлаСРазнымиПереводамиСтрок() Экспорт ПутьФайла = КаталогИсходников() + "/testdata/ObjectModule.txt"; Текст = Новый ЧтениеТекста; Текст.Открыть(ПутьФайла,"UTF-8"); КоличествоСтрок = 0; Пока Истина Цикл Стр = Текст.ПрочитатьСтроку(); Если Стр = Неопределено Тогда Прервать; КонецЕсли; КоличествоСтрок = КоличествоСтрок + 1; КонецЦикла; Текст.Открыть(ПутьФайла,"UTF-8"); Стр = Текст.Прочитать(); юТест.ПроверитьРавенство(10, КоличествоСтрок); юТест.ПроверитьРавенство(125, СтрДлина(Стр)); КонецПроцедуры Процедура ТестДолжен_ПроверитьЧтоВозможнаЗаписьВПотокПамяти() Экспорт // Дано Поток = Новый ПотокВПамяти(); // Когда ЗаписьТекста = Новый ЗаписьТекста(Поток); ЗаписьТекста.Записать("Привет"); ЗаписьТекста.Закрыть(); // Тогда ЧтениеТекста = Новый ЧтениеТекста(Поток); Поток.Перейти(0, ПозицияВПотоке.Начало); юТест.ПроверитьРавенство(ЧтениеТекста.ПрочитатьСтроку(), "Привет"); КонецПроцедуры Процедура ТестДолжен_ПроверитьЧтоВозможнаЗаписьВПотокСКодировкой() Экспорт // Дано Поток = Новый ПотокВПамяти(); // Когда ЗаписьТекста = Новый ЗаписьТекста(Поток, "windows-1251"); ЗаписьТекста.Записать("Привет"); ЗаписьТекста.Закрыть(); // Тогда ЧтениеТекста = Новый ЧтениеТекста(Поток, "windows-1251"); Поток.Перейти(0, ПозицияВПотоке.Начало); юТест.ПроверитьРавенство(ЧтениеТекста.ПрочитатьСтроку(), "Привет"); юТест.ПроверитьРавенство(Поток.Размер(), 6); КонецПроцедуры Процедура ТестДолжен_ПроверитьЧтоВозможнаЗаписьВПотокСМеткойBOM() Экспорт // Дано Поток = Новый ПотокВПамяти(); // Когда ЗаписьТекста = Новый ЗаписьТекста(Поток, , , , Истина); ЗаписьТекста.Записать("Привет"); ЗаписьТекста.Закрыть(); // Тогда ЧтениеТекста = Новый ЧтениеТекста(Поток); Поток.Перейти(0, ПозицияВПотоке.Начало); юТест.ПроверитьРавенство(ЧтениеТекста.ПрочитатьСтроку(), "Привет"); юТест.ПроверитьРавенство(Поток.Размер(), 15); КонецПроцедуры Процедура ТестДолжен_ПроверитьУстановкуПотокаДляЗаписи() Экспорт // Дано Поток = Новый ПотокВПамяти(); ЗаписьТекста = Новый ЗаписьТекста(); // Когда ЗаписьТекста.Открыть(Поток); ЗаписьТекста.Записать("Привет"); ЗаписьТекста.Закрыть(); // Тогда ЧтениеТекста = Новый ЧтениеТекста(Поток); Поток.Перейти(0, ПозицияВПотоке.Начало); юТест.ПроверитьРавенство(ЧтениеТекста.ПрочитатьСтроку(), "Привет"); КонецПроцедуры Процедура ТестДолжен_ПроверитьЧтоКонструкторНеБроситИсключениеДляЗакрытогоПотока() Экспорт // Дано Поток = Новый ПотокВПамяти(); Поток.Закрыть(); // Когда ЗаписьТекста = Новый ЗаписьТекста(Поток); КонецПроцедуры Процедура ТестДолжен_ПроверитьЧтоНеоткрытыйПотокПриЗаписиБросаетПравильноеИсключение() Экспорт Сценарий = " |Поток = Новый ПотокВПамяти(); |Поток.Закрыть(); | |ЗаписьТекста = Новый ЗаписьТекста(Поток); |ЗаписьТекста.Записать(""Привет"")"; юТест.ПроверитьКодСОшибкой(Сценарий, "Ошибка обращения к закрытому потоку"); КонецПроцедуры Процедура ТестДолжен_ПроверитьЧтоПотокДляЧтенияПриЗаписиБросаетПравильноеИсключение() Экспорт Сценарий = " |Поток = Новый ПотокВПамяти(); |ПотокДляЧтения = Поток.ПолучитьПотокТолькоДляЧтения(); | |ЗаписьТекста = Новый ЗаписьТекста(ПотокДляЧтения); | |ЗаписьТекста.Записать(""Привет"")"; юТест.ПроверитьКодСОшибкой(Сценарий, "Попытка записи в поток не поддерживающий запись"); КонецПроцедуры Процедура ТестДолжен_ПроверитьПереоткрытиеСФайлаНаПоток() Экспорт // Дано Поток = Новый ПотокВПамяти(); ИмяФайла = ПолучитьИмяВременногоФайла("txt"); ЗаписьТекста = Новый ЗаписьТекста(); // Когда ЗаписьТекста.Открыть(ИмяФайла); ЗаписьТекста.Записать("Привет1"); ЗаписьТекста.Открыть(Поток); ЗаписьТекста.Записать("Привет2"); ЗаписьТекста.Закрыть(); // Тогда ЧтениеТекстаИзФайла = Новый ЧтениеТекста(ИмяФайла); ЧтениеТекстаИзПотока = Новый ЧтениеТекста(Поток); Поток.Перейти(0, ПозицияВПотоке.Начало); юТест.ПроверитьРавенство(ЧтениеТекстаИзФайла.Прочитать(), "Привет1"); юТест.ПроверитьРавенство(ЧтениеТекстаИзПотока.Прочитать(), "Привет2"); ЧтениеТекстаИзФайла.Закрыть(); УдалитьФайлы(ИмяФайла); КонецПроцедуры Процедура ТестДолжен_ПроверитьПереоткрытиеСПотокаНаФайл() Экспорт // Дано Поток = Новый ПотокВПамяти(); ИмяФайла = ПолучитьИмяВременногоФайла("txt"); ЗаписьТекста = Новый ЗаписьТекста(); // Когда ЗаписьТекста.Открыть(Поток); ЗаписьТекста.Записать("Привет1"); ЗаписьТекста.Открыть(ИмяФайла); ЗаписьТекста.Записать("Привет2"); ЗаписьТекста.Закрыть(); // Тогда ЧтениеТекстаИзФайла = Новый ЧтениеТекста(ИмяФайла); ЧтениеТекстаИзПотока = Новый ЧтениеТекста(Поток); Поток.Перейти(0, ПозицияВПотоке.Начало); юТест.ПроверитьРавенство(ЧтениеТекстаИзПотока.Прочитать(), "Привет1"); юТест.ПроверитьРавенство(ЧтениеТекстаИзФайла.Прочитать(), "Привет2"); ЧтениеТекстаИзФайла.Закрыть(); УдалитьФайлы(ИмяФайла); КонецПроцедуры Процедура ТестДолжен_ПроверитьРаботуРазделителей() Экспорт ТекстДляПроверки = "1 |2 |3" ; ПроверитьЗаписьТекстаСРазделителемСтрокВФайле(ТекстДляПроверки, Символы.ПС, "ПС"); ПроверитьЗаписьТекстаСРазделителемСтрокВФайле(ТекстДляПроверки, Символы.ВК + Символы.ПС, "ВК+ПС"); ПроверитьЗаписьТекстаСРазделителемСтрокВФайле(ТекстДляПроверки, Символы.ВК, "ВК"); ПроверитьЗаписьТекстаСРазделителемСтрокВПотоке(ТекстДляПроверки, Символы.ПС, "ПС"); ПроверитьЗаписьТекстаСРазделителемСтрокВПотоке(ТекстДляПроверки, Символы.ВК + Символы.ПС, "ВК+ПС"); ПроверитьЗаписьТекстаСРазделителемСтрокВПотоке(ТекстДляПроверки, Символы.ВК, "ВК"); КонецПроцедуры Процедура ПроверитьЗаписьТекстаСРазделителемСтрокВФайле(Знач Текст, Знач РазделительСтрокВФайле, Знач НаименованиеТеста) // Дано ИмяФайла = ПолучитьИмяВременногоФайла("txt"); Запись = Новый ЗаписьТекста; // Когда Запись.Открыть(ИмяФайла, "UTF-8", Символы.ПС, Ложь, РазделительСтрокВФайле); Запись.Записать(Текст); Запись.Закрыть(); // Тогда Чтение = Новый ЧтениеТекста; Чтение.Открыть(ИмяФайла, "UTF-8", Символы.ПС, РазделительСтрокВФайле); ПроверяемыйТекст = Чтение.Прочитать(); ПодробноеСравнениеСтрок(ПроверяемыйТекст, Текст, "Не сработало запись-чтение текста в файл (" + НаименованиеТеста + ")"); КонецПроцедуры Процедура ПроверитьЗаписьТекстаСРазделителемСтрокВПотоке(Знач Текст, Знач РазделительСтрокВФайле, Знач НаименованиеТеста) // Дано Поток = Новый ПотокВПамяти(); Запись = Новый ЗаписьТекста; // Когда Запись.Открыть(Поток, "UTF-8", Символы.ПС, РазделительСтрокВФайле); Запись.Записать(Текст); Запись.Закрыть(); // Тогда Чтение = Новый ЧтениеТекста; Чтение.Открыть(Поток, "UTF-8", Символы.ПС, РазделительСтрокВФайле); Поток.Перейти(0, ПозицияВПотоке.Начало); ПроверяемыйТекст = Чтение.Прочитать(); ПодробноеСравнениеСтрок(ПроверяемыйТекст, Текст, "Не сработало запись-чтение текста в поток (" + НаименованиеТеста + ")"); КонецПроцедуры Процедура ПодробноеСравнениеСтрок(Знач Строка1, Знач Строка2, Знач ТекстСообщения) Если Строка1 = Строка2 Тогда Возврат; КонецЕсли; Строка1 = ЭкранироватьПереносыСтрок(Строка1); Строка2 = ЭкранироватьПереносыСтрок(Строка2); юТест.ПроверитьРавенство(Строка1, Строка2, ТекстСообщения); КонецПроцедуры Функция ЭкранироватьПереносыСтрок(Знач Строка1) Возврат СтрЗаменить(СтрЗаменить(Строка1, Символы.ПС, "<LF>"), Символы.ВК, "<CR>"); КонецФункции