-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathProgram_AddTasks.cs
More file actions
105 lines (92 loc) · 5.08 KB
/
Program_AddTasks.cs
File metadata and controls
105 lines (92 loc) · 5.08 KB
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
/*
Здесь мы переопределяем TestConstructor
В этом файле мы ставим в список на выполнение конкретные тестовые задачи
*/
// Раскомментировать, если нужно заново создать файлы
// #define CAN_CREATEFILE_FOR_PTT
using System.Collections.Concurrent;
using System.Diagnostics;
using DriverForTestsLib;
namespace Tests;
/// <summary>Определяем класс-наследлник TestConstructor.
/// Этот класс регистрирует тестовые задачи на выполнение.
/// Регистрация идёт без фильтрации.
/// Фильтрация по тегам идёт непосредствеУдалинно перед выполнением</summary>
class Example1TestConstructor : TestConstructor
{
public Example1TestConstructor()
{}
/// <summary>Этот метод регистрирует необходимые тестовые задачи на выполнение</summary>
/// <param name="tasks">Список задач, который будет заполнен данным методом</param>
public override void CreateTasksLists(ConcurrentQueue<TestTask> tasks)
{
Console.WriteLine("ExampleTestConstructor.CreateTasksLists executed");
// Эти задачи поставлены вручную, будут выполняться параллельно
for (int i = 0; i < Environment.ProcessorCount*3; i++)
{
var t = new Test2_1(i, this);
tasks.Enqueue(t);
}
// Эти задачи поставлены вручную,
// они будут выполняться последовательно, одна за другой,
// т.к. на них определён атрибут с параметром singleThread: true
for (int i = 0; i < Environment.ProcessorCount; i++)
{
var t = new TestSingleThread_1(i, this);
tasks.Enqueue(t);
}
var canCreateFile = false;
/*
// Добавляем вручную задачи, реализующие AutoSaveTestTask
// Если надо, устанавливаем разрешение на запись в файл в первый раз
#if CAN_CREATEFILE_FOR_AUTOSAVE
#warning canCreateFile: true
canCreateFile = true;
#endif
TestConstructor.addTasksForQueue
(
source: ExampleAutoSaveTask.getTasks(this, canCreateFile: canCreateFile),
tasksQueue: tasks
);*/
// Добавляем задачи ParallelTasks_Tests - это задачи проверки на то, что тесты выполняются в заданном порядке (waitBefore)
canCreateFile = false;
#if CAN_CREATEFILE_FOR_PTT
#warning canCreateFile: true
canCreateFile = true;
#endif
var PTT = new ParallelTasks_Tests(this, canCreateFile: canCreateFile);
TestConstructor.addTasksForQueue
(
source: PTT.getTasks(),
tasksQueue: tasks
);
// Получаем все задачи, которые могут быть автоматически собраны из данного домена приложения
var list = this.getTasksFromAppDomain
(
// Этот обработчик срабатывает тогда, когда задача либо неавтоматическая,
// либо не имеет нужного конструктора
// Здесь мы также проверяем, что мы не забыли поставить ручные (неавтоматические) задачи
(Type t, bool notAutomatic) =>
{
if (!notAutomatic)
Console.Error.WriteLine("Incorrect task: " + t.FullName);
else
{
// Проверяем ручные задачи, что мы никакую не забыли поставить
// Так как все ручные задачи мы уже поставили перед вызовом getTasksFromAppDomain
// здесь если задача не зарегистрирована на выполнение, то это значит, что мы её забыли
foreach (var task in tasks)
{
var taskType = task.GetType();
if (t == taskType)
return;
}
Console.Error.WriteLine($"A notAutomatic task has been declared, but it is not in the list for execution: {t.FullName}");
}
}
);
// Ставим эти задачи на выполнение
TestConstructor.addTasksForQueue(list, tasks);
Console.WriteLine("\n\nExampleTestConstructor.CreateTasksLists ended\n");
}
}