-
Notifications
You must be signed in to change notification settings - Fork 108
/
Copy pathconsole.os
144 lines (103 loc) · 7.35 KB
/
console.os
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
Перем юТест;
Функция ПолучитьСписокТестов(ЮнитТестирование) Экспорт
юТест = ЮнитТестирование;
ВсеТесты = Новый Массив;
ВсеТесты.Добавить("ТестДолжен_ПроверитьЧтоСтандартныйПотокВводаЭтоПоток");
ВсеТесты.Добавить("ТестДолжен_ПроверитьТаймаутЧтенияСтандартногоПотокВвода");
#Если Не Linux Тогда
// TODO: https://github.com/EvilBeaver/OneScript/issues/1255
ВсеТесты.Добавить("ТестДолжен_ПроверитьПередачуДанныхВСкриптЧерезСтандартныйПотокВвода");
#КонецЕсли
ВсеТесты.Добавить("ТестДолжен_ПроверитьПеренаправлениеВывода");
Возврат ВсеТесты;
КонецФункции
Процедура ТестДолжен_ПроверитьЧтоСтандартныйПотокВводаЭтоПоток() Экспорт
ПотокВвода = Консоль.ОткрытьСтандартныйПотокВвода();
юТест.ПроверитьРавенство(Тип("Поток"), ТипЗнч(ПотокВвода), "Ошибка открытия стандартного потока ввода");
КонецПроцедуры
Процедура ТестДолжен_ПроверитьТаймаутЧтенияСтандартногоПотокВвода() Экспорт
ПутьКОскрипт = ОбъединитьПути(КаталогПрограммы(), "oscript.dll");
КодСкрипта = "ВходящийПоток = Консоль.ОткрытьСтандартныйПотокВвода();
|ВходящийПоток.ТаймаутЧтения = 100;
|Чтение = Новый ЧтениеТекста();
|Чтение.Открыть(ВходящийПоток);
|Попытка
| Сообщить(СокрЛП(Чтение.Прочитать()));
|Исключение
| Сообщить(ИнформацияобОшибке().ПодробноеОписаниеОшибки());
| ВызватьИсключение;
|КонецПопытки;";
ТекстСкрипта = Новый ТекстовыйДокумент();
ТекстСкрипта.УстановитьТекст(КодСкрипта);
ВремФайл = ПолучитьИмяВременногоФайла("os");
ТекстСкрипта.Записать(ВремФайл);
ТестовыеДанные = "";
ИсполняемаяКоманда = СтрШаблон("dotnet ""%1"" ""%2""", ПутьКОскрипт, ВремФайл);
#Если Windows Тогда
СтрокаЗапуска = СтрШаблон("cmd /c ""%1""", ИсполняемаяКоманда);
#Иначе
СтрокаЗапуска = СтрШаблон("sh -c '%1'", ИсполняемаяКоманда);
#КонецЕсли
Процесс = СоздатьПроцесс(СтрокаЗапуска, , Истина);
Процесс.Запустить();
МаксимумОжидания = 1000;
ИнтервалОжидания = 100;
ВсегоОжидание = 0;
Пока НЕ Процесс.Завершен Цикл
Приостановить(ИнтервалОжидания);
ВсегоОжидание = ВсегоОжидание + ИнтервалОжидания;
Если ВсегоОжидание >= МаксимумОжидания Тогда
Процесс.Завершить();
юТест.ТестПровален("Ошибка чтения пустого стандартного потока ввода. Истекло время ожидания.");
КонецЕсли;
КонецЦикла;
ВыводКоманды = СокрЛП(Процесс.ПотокВывода.Прочитать());
УдалитьФайлы(ВремФайл);
Сообщить(ВыводКоманды);
юТест.ПроверитьРавенство(ВыводКоманды, ТестовыеДанные, "Ошибка чтения пустого стандартного потока ввода.");
КонецПроцедуры
Процедура ТестДолжен_ПроверитьПередачуДанныхВСкриптЧерезСтандартныйПотокВвода() Экспорт
ПутьКОскрипт = ОбъединитьПути(КаталогПрограммы(), "oscript.dll");
КодСкрипта = "Чтение = Новый ЧтениеТекста();
|Чтение.Открыть(Консоль.ОткрытьСтандартныйПотокВвода());
|Сообщить(СокрЛП(Чтение.Прочитать()));
|";
ТекстСкрипта = Новый ТекстовыйДокумент();
ТекстСкрипта.УстановитьТекст(КодСкрипта);
ВремФайл = ПолучитьИмяВременногоФайла("os");
ТекстСкрипта.Записать(ВремФайл);
ТестовыеДанные = "12346";
ИсполняемаяКоманда = СтрШаблон("echo %1 | dotnet %2 %3", ТестовыеДанные, ПутьКОскрипт, ВремФайл);
#Если Windows Тогда
СтрокаЗапуска = СтрШаблон("cmd /c ""%1""", ИсполняемаяКоманда);
#Иначе
СтрокаЗапуска = СтрШаблон("sh -c '%1'", ИсполняемаяКоманда);
#КонецЕсли
Процесс = СоздатьПроцесс(СтрокаЗапуска, , Истина);
Процесс.Запустить();
Пока НЕ Процесс.Завершен Цикл
Приостановить(100);
КонецЦикла;
ВыводКоманды = СокрЛП(Процесс.ПотокВывода.Прочитать());
УдалитьФайлы(ВремФайл);
юТест.ПроверитьРавенство(ВыводКоманды, ТестовыеДанные, "Ошибка чтения стандартного потока ввода.");
КонецПроцедуры
Процедура ТестДолжен_ПроверитьПеренаправлениеВывода() Экспорт
ВФ = ПолучитьИмяВременногоФайла();
Поток = ФайловыеПотоки.ОткрытьДляЗаписи(ВФ);
Консоль.УстановитьПотокВывода(Поток);
Попытка
Сообщить("Привет мир!");
Исключение
// что-то пошло не так
Консоль.УстановитьПотокВывода(Консоль.ОткрытьСтандартныйПотокВывода());
ВызватьИсключение;
КонецПопытки;
Поток.Закрыть();
Консоль.УстановитьПотокВывода(Консоль.ОткрытьСтандартныйПотокВывода());
Чтение = Новый ЧтениеТекста(ВФ, Консоль.КодировкаВыходногоПотока);
Текст = Чтение.Прочитать();
Чтение.Закрыть();
УдалитьФайлы(ВФ);
юТест.ПроверитьРавенство("Привет мир!", СокрЛП(Текст));
КонецПроцедуры