Skip to content

Commit acc6f9b

Browse files
committed
Файл.Существует() для каталогов в некоторых сценариях возвращает кешированный признак существования.
1 parent 06d383f commit acc6f9b

File tree

2 files changed

+97
-1
lines changed

2 files changed

+97
-1
lines changed

src/ScriptEngine.HostedScript/Library/FileContext.cs

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,13 +14,23 @@ public class FileContext : AutoContext<FileContext>
1414
FileSystemInfo _fsEntry;
1515

1616
public FileContext(string name)
17+
{
18+
RefreshEntry(name);
19+
}
20+
21+
private void RefreshEntry(string name)
1722
{
1823
if (Directory.Exists(name))
1924
_fsEntry = new DirectoryInfo(name);
2025
else
2126
_fsEntry = new FileInfo(name);
2227
}
2328

29+
private void RefreshEntry()
30+
{
31+
RefreshEntry(_fsEntry.FullName);
32+
}
33+
2434
[ContextProperty("Имя","Name")]
2535
public string Name
2636
{
@@ -82,7 +92,8 @@ public string Extension
8292
[ContextMethod("Существует","Exists")]
8393
public bool Exists()
8494
{
85-
_fsEntry.Refresh();
95+
RefreshEntry();
96+
8697
return _fsEntry.Exists;
8798
}
8899

@@ -142,12 +153,14 @@ public void SetModificationTime(DateTime dateTime)
142153
[ContextMethod("ЭтоКаталог", "IsDirectory")]
143154
public bool IsDirectory()
144155
{
156+
RefreshEntry();
145157
return _fsEntry is DirectoryInfo;
146158
}
147159

148160
[ContextMethod("ЭтоФайл", "IsFile")]
149161
public bool IsFile()
150162
{
163+
RefreshEntry();
151164
return _fsEntry is FileInfo;
152165
}
153166

tests/file-object.os

Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
Перем юТест;
2+
3+
Функция Версия() Экспорт
4+
Возврат "0.1";
5+
КонецФункции
6+
7+
Функция ПолучитьСписокТестов(ЮнитТестирование) Экспорт
8+
9+
юТест = ЮнитТестирование;
10+
11+
ВсеТесты = Новый Массив;
12+
13+
ВсеТесты.Добавить("ТестДолжен_ПроверитьЧтоСуществованиеФайлаНеКешируетсяПослеУдаления");
14+
ВсеТесты.Добавить("ТестДолжен_ПроверитьЧтоСуществованиеФайлаНеКешируетсяПослеСоздания");
15+
ВсеТесты.Добавить("ТестДолжен_ПроверитьЧтоСуществованиеКаталогаНеКешируетсяПослеСоздания");
16+
ВсеТесты.Добавить("ТестДолжен_ПроверитьЧтоСуществованиеКаталогаНеКешируетсяПослеУдаления");
17+
18+
Возврат ВсеТесты;
19+
КонецФункции
20+
21+
Процедура ТестДолжен_ПроверитьЧтоСуществованиеФайлаНеКешируетсяПослеУдаления() Экспорт
22+
23+
ВремФайл = ПолучитьИмяВременногоФайла("os");
24+
ЗаписьТекста = Новый ЗаписьТекста(ВремФайл);
25+
ЗаписьТекста.ЗаписатьСтроку("---");
26+
ЗаписьТекста.Закрыть();
27+
28+
Файл = Новый Файл(ВремФайл);
29+
ФайлФактический = Новый Файл(ВремФайл);
30+
31+
юТест.ПроверитьИстину(Файл.Существует());
32+
УдалитьФайлы(Файл.ПолноеИмя);
33+
// проверили, что он реально удален
34+
юТест.ПроверитьЛожь(ФайлФактический.Существует());
35+
юТест.ПроверитьЛожь(Файл.Существует());
36+
37+
КонецПроцедуры
38+
39+
Процедура ТестДолжен_ПроверитьЧтоСуществованиеФайлаНеКешируетсяПослеСоздания() Экспорт
40+
41+
ВремФайл = ПолучитьИмяВременногоФайла("os");
42+
Файл = Новый Файл(ВремФайл);
43+
44+
юТест.ПроверитьЛожь(Файл.Существует());
45+
46+
ЗаписьТекста = Новый ЗаписьТекста(ВремФайл);
47+
ЗаписьТекста.ЗаписатьСтроку("---");
48+
ЗаписьТекста.Закрыть();
49+
50+
юТест.ПроверитьИстину(Файл.Существует());
51+
52+
УдалитьФайлы(Файл.ПолноеИмя);
53+
54+
КонецПроцедуры
55+
56+
Процедура ТестДолжен_ПроверитьЧтоСуществованиеКаталогаНеКешируетсяПослеСоздания() Экспорт
57+
58+
ВремФайл = ПолучитьИмяВременногоФайла("os");
59+
60+
Файл = Новый Файл(ВремФайл);
61+
ФайлФактический = Новый Файл(ВремФайл);
62+
юТест.ПроверитьЛожь(Файл.Существует());
63+
64+
СоздатьКаталог(ВремФайл);
65+
66+
юТест.ПроверитьИстину(Файл.Существует());
67+
68+
УдалитьФайлы(Файл.ПолноеИмя);
69+
70+
КонецПроцедуры
71+
72+
Процедура ТестДолжен_ПроверитьЧтоСуществованиеКаталогаНеКешируетсяПослеУдаления() Экспорт
73+
74+
ВремФайл = ПолучитьИмяВременногоФайла("os");
75+
76+
СоздатьКаталог(ВремФайл);
77+
78+
Файл = Новый Файл(ВремФайл);
79+
юТест.ПроверитьИстину(Файл.Существует());
80+
УдалитьФайлы(Файл.ПолноеИмя);
81+
юТест.ПроверитьЛожь(Файл.Существует());
82+
83+
КонецПроцедуры

0 commit comments

Comments
 (0)