forked from florentbr/SeleniumBasic
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathScriptError.cs
More file actions
103 lines (87 loc) · 3.09 KB
/
ScriptError.cs
File metadata and controls
103 lines (87 loc) · 3.09 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
using System.Collections.Generic;
using System.Text;
namespace vbsc {
class ScriptError : IScriptResult {
private readonly Script _script;
private readonly ScriptProcedure _proc_item;
private List<TraceLine> _stack_trace = new List<TraceLine>();
private StringBuilder _message = new StringBuilder();
private StringBuilder _info = new StringBuilder();
private int _err_line = 0;
public ScriptError(Script script, ScriptProcedure procedure, string message) {
_script = script;
_proc_item = procedure;
_message.Append(message.CleanEnd());
if(script != null)
_script.Succeed = false;
}
public Script Script {
get {
return _script;
}
}
public bool Succeed {
get {
return false;
}
}
public string Message {
get {
return _message.ToString();
}
}
public string Source {
get {
if (_proc_item == null)
return string.Format("line {0} in {1}", this.LineNumber, _script).Trim();
return string.Format("{0} line {1} in {2}", _proc_item, this.LineNumber, _script).Trim();
}
}
public int LineNumber {
get {
if (_err_line == 0) {
string scriptPath = _script.Path;
foreach (var trace in _stack_trace) {
if (trace.Script.Path == scriptPath) {
_err_line = trace.LineNumber;
break;
}
}
}
return _err_line;
}
}
internal void AddTrace(TraceLine traceLine) {
_stack_trace.Add(traceLine);
}
internal void AddTrace(Script script, int line_number) {
var traceline = new TraceLine(script, line_number);
_stack_trace.Add(traceline);
}
internal void FillParentTrace() {
var last_trace = _stack_trace.LastItem();
if (last_trace == null)
return;
var script = last_trace.Script;
while (script.ParentScript != null) {
AddTrace(script.ParentScript, script.ParentLineNumber);
script = script.ParentScript;
}
}
internal void AddInfo(string info) {
_info.AppendLine(info.CleanEnd());
}
public override string ToString() {
var buffer = new StringBuilder();
buffer.Append(_message);
buffer.Append('\n');
foreach (TraceLine trace in _stack_trace) {
buffer.AppendFormat(" at {0} line {1}:\n", trace.Script.Path, trace.LineNumber);
buffer.AppendFormat(" {0}\n", trace.LineOfCode);
}
if (_info.Length != 0)
buffer.Append(_info.ToString());
return buffer.ToString();
}
}
}