-
Notifications
You must be signed in to change notification settings - Fork 25
Expand file tree
/
Copy pathReportIndex2Html.tcl
More file actions
175 lines (147 loc) · 6.34 KB
/
ReportIndex2Html.tcl
File metadata and controls
175 lines (147 loc) · 6.34 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
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
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
# File Name: ReportBuildDict2Html.tcl
# Purpose: Convert OSVVM YAML build reports to HTML
# Revision: OSVVM MODELS STANDARD VERSION
#
# Maintainer: Jim Lewis email: jim@synthworks.com
# Contributor(s):
# Jim Lewis email: jim@synthworks.com
#
# Description
# Convert OSVVM Build Dictionary into HTML Build Report
# Visible externally: ReportBuildDict2Html
# Must call ReportBuildYaml2Dict first.
#
# Developed by:
# SynthWorks Design Inc.
# VHDL Training Classes
# OSVVM Methodology and Model Library
# 11898 SW 128th Ave. Tigard, Or 97223
# http://www.SynthWorks.com
#
# Revision History:
# Date Version Description
# 06/2025 2025.06 Initial Revision
#
#
# This file is part of OSVVM.
#
# Copyright (c) 2025 by SynthWorks Design Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
package require yaml
# -------------------------------------------------
# Index2Html
#
proc Index2Html {} {
variable ResultsFile
variable IndexDict
# Read the YAML file into a dictionary
set IndexDict [dict get [::yaml::yaml2dict -file ${::osvvm::OsvvmIndexYamlFile}] Builds]
# Open results file
set ResultsFile [open $::osvvm::OsvvmIndexHtmlFile w]
# Convert YAML file to HTML & catch results
set ErrorCode [catch {LocalIndex2Html} errmsg]
# Close Results file - done here s.t. it is closed even if it fails
close $ResultsFile
if {$ErrorCode} {
CallbackOnError_Index2Html $::osvvm::OsvvmIndexHtmlFile $errmsg
}
}
# -------------------------------------------------
# LocalIndex2Html
#
proc LocalIndex2Html {} {
variable ResultsFile
variable IndexDict
variable FirstBuildName
set FirstBuildName [dict get [lindex $IndexDict 0] Name]
# CreateOsvvmReportHeader $ResultsFile "Index of Builds" [file join $::osvvm::OutputBaseDirectory $FirstBuildName] 1
CreateOsvvmReportHeader $ResultsFile "Index of Builds" $FirstBuildName 1
CreateBuildIndexHeader
CreateBuildIndexSummary
CreateOsvvmReportFooter $ResultsFile
}
# -------------------------------------------------
# CreateBuildIndexHeader
#
proc CreateBuildIndexHeader {} {
variable ResultsFile
puts $ResultsFile " <div class=\"RequirementsResults\">"
puts $ResultsFile " <table class=\"RequirementsResults\">"
puts $ResultsFile " <thead>"
puts $ResultsFile " <tr><th rowspan=\"2\">Build</th>"
puts $ResultsFile " <th rowspan=\"2\">Status</th>"
puts $ResultsFile " <th colspan=\"3\">Test Cases</th>"
puts $ResultsFile " <th rowspan=\"2\">Elapsed<br>Time</th>"
puts $ResultsFile " <th rowspan=\"2\">Analyze<br>Errors</th>"
puts $ResultsFile " <th rowspan=\"2\">Simulate<br>Errors</th>"
puts $ResultsFile " <th rowspan=\"2\">Simulator</th>"
puts $ResultsFile " <th rowspan=\"2\">OSVVM<br>Version</th>"
puts $ResultsFile " <th rowspan=\"2\">Date</th>"
puts $ResultsFile " </tr>"
puts $ResultsFile " <tr>"
puts $ResultsFile " <th>PASSED </th>"
puts $ResultsFile " <th>FAILED </th>"
puts $ResultsFile " <th>SKIPPED</th>"
puts $ResultsFile " </tr>"
puts $ResultsFile " </thead>"
}
# -------------------------------------------------
# CreateBuildIndexSummary
#
proc CreateBuildIndexSummary {} {
variable ResultsFile
variable IndexDict
variable FirstBuildName
puts $ResultsFile " <tbody>"
set NoInfoDict {Name NA Directory "" Status FAILED Passed 0 Failed 1 Skipped 0 Tests 0 AnalyzeErrorCount 0 SimulateErrorCount 0 BuildErrorCode 0 StartTime 2011-02-07T12:00:00-08:00 FinishTime 2012-01-09T12:00:00-08:00 ElapsedTime 0.0 ToolName OsvvmNameDay ToolVersion 0.1 OsvvmVersion 2012.01}
foreach RawBuildItem $IndexDict {
set BuildItem [dict merge $NoInfoDict $RawBuildItem]
set BuildItemName [dict get $BuildItem Name]
set BuildDirectory [dict get $BuildItem Directory]
set BuildStatus [dict get $BuildItem Status]
set PassedClass ""
set FailedClass ""
if { ${BuildStatus} eq "PASSED" } {
set StatusClass "class=\"passed\""
set PassedClass "class=\"passed\""
} elseif { ${BuildStatus} eq "FAILED" } {
set StatusClass "class=\"failed\""
set FailedClass "class=\"failed\""
} else {
set StatusClass "class=\"skipped\""
}
puts $ResultsFile " <tr>"
if {$BuildDirectory ne ""} {
puts $ResultsFile " <td><a href=\"${BuildDirectory}/${BuildItemName}.html\">${BuildItemName}</a></td>"
} else {
puts $ResultsFile " <td>${BuildItemName}</a></td>"
}
puts $ResultsFile " <td ${StatusClass}>$BuildStatus</td>"
puts $ResultsFile " <td ${PassedClass}>[dict get $BuildItem Passed] </td>"
puts $ResultsFile " <td ${FailedClass}>[dict get $BuildItem Failed] </td>"
puts $ResultsFile " <td>[dict get $BuildItem Skipped]</td>"
set BuildElapsedTime [expr {round([dict get $BuildItem ElapsedTime])}]
puts $ResultsFile " <td>[format %d:%02d:%02d [expr ($BuildElapsedTime/(60*60))] [expr (($BuildElapsedTime/60)%60)] [expr (${BuildElapsedTime}%60)]] </td>"
puts $ResultsFile " <td>[dict get $BuildItem AnalyzeErrorCount]</td>"
puts $ResultsFile " <td>[dict get $BuildItem SimulateErrorCount]</td>"
puts $ResultsFile " <td>[dict get $BuildItem ToolName]-[dict get $BuildItem ToolVersion]</td>"
puts $ResultsFile " <td>[dict get $BuildItem OsvvmVersion]</td>"
puts $ResultsFile " <td>[IsoToOsvvmTime [dict get $BuildItem FinishTime]]</td>"
puts $ResultsFile " </tr>"
}
puts $ResultsFile " </tbody>"
puts $ResultsFile " </table>"
puts $ResultsFile " </div>"
}