Class: OrigenTesters::Doc

Inherits:
Object
  • Object
show all
Includes:
VectorBasedTester
Defined in:
lib/origen_testers/doc.rb,
lib/origen_testers/doc/model.rb,
lib/origen_testers/doc/generator.rb,
lib/origen_testers/doc/generator/flow.rb,
lib/origen_testers/doc/generator/test.rb,
lib/origen_testers/doc/generator/tests.rb,
lib/origen_testers/doc/generator/flow_line.rb,
lib/origen_testers/doc/generator/test_group.rb

Overview

Tester model to generate test program documentation from your pattern sources. This is intended to be a drop in replacement for existing testers and instead of generating patterns or test program sheets it will generate a document object which you can then render out via a template or manually.

Defined Under Namespace

Modules: Generator Classes: Model

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Methods included from VectorBasedTester

#register_tester

Constructor Details

#initialize(*_args) ⇒ Doc

Returns a new instance of Doc.



18
19
20
21
22
# File 'lib/origen_testers/doc.rb', line 18

def initialize(*_args)
  @pat_extension = 'md'
  @indent = 0
  @snip_counters = []
end

Dynamic Method Handling

This class handles dynamic methods through the method_missing method

#method_missing(_method, *_args, &_block) ⇒ Object

Ignore any tester-specific methods



218
219
220
221
222
# File 'lib/origen_testers/doc.rb', line 218

def method_missing(_method, *_args, &_block)
  if block_given?
    yield
  end
end

Instance Attribute Details

#html_modeObject

Returns the value of attribute html_mode.



12
13
14
# File 'lib/origen_testers/doc.rb', line 12

def html_mode
  @html_mode
end

Class Method Details

.generate_program_model(files, options = {}) ⇒ Object



187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
# File 'lib/origen_testers/doc.rb', line 187

def self.generate_program_model(files, options = {})
  options = {
    action:       :program,
    return_model: true,
    skip_diff:    true
  }.merge(options)
  Origen.app.with_doc_tester do
    Origen.target.temporary = options[:target] if options[:target]
    Origen.app.load_target!
    Origen.interface.reset_globals
    options[:files] = files
    Origen.file_handler.preserve_and_clear_state do
      Origen.app.runner.launch(options)
    end
  end
  model.target = Origen.target.name
  model
end

.modelObject



206
207
208
# File 'lib/origen_testers/doc.rb', line 206

def self.model
  @model ||= Model.new
end

Instance Method Details

#annotate(msg, _options) ⇒ Object



85
86
87
88
89
90
91
92
93
94
95
96
97
# File 'lib/origen_testers/doc.rb', line 85

def annotate(msg, _options)
  unless @inhibit_comments
    if html_mode
      pc ''
      lines = msg.split("\n")
      leading_spaces = lines.first[/\A */].size
      lines.each do |line|
        pc line.gsub(/^.{#{leading_spaces}}/, '')
      end
      pc ''
    end
  end
end

#c1(msg, options = {}) ⇒ Object



51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
# File 'lib/origen_testers/doc.rb', line 51

def c1(msg, options = {})
  if generating_program?
    Origen.interface.doc_comments_capture(msg)
  else
    unless @inhibit_comments
      options = {
        prefix: true
      }.merge(options)
      if @step_comment_on
        open_text_block
        if options[:prefix]
          pc "# #{msg}"
        else
          pc "#{msg}"
        end
      end
    end
  end
end

#c2(msg, options = {}) ⇒ Object



71
72
73
74
75
76
77
78
79
80
81
82
83
# File 'lib/origen_testers/doc.rb', line 71

def c2(msg, options = {})
  unless @inhibit_comments
    options = {
      prefix: true
    }.merge(options)
    open_text_block
    if options[:prefix]
      pc "# #{msg}"
    else
      pc "#{msg}"
    end
  end
end

#close_text_blockObject



109
110
111
112
113
114
115
116
117
# File 'lib/origen_testers/doc.rb', line 109

def close_text_block
  if html_mode
    if @text_block_open
      pc '~~~'
      pc ''
      @text_block_open = false
    end
  end
end

#cycle(_options = {}) ⇒ Object



214
215
# File 'lib/origen_testers/doc.rb', line 214

def cycle(_options = {})
end

#doc?Boolean

Returns:

  • (Boolean)


210
211
212
# File 'lib/origen_testers/doc.rb', line 210

def doc?
  true
end

#generate?Boolean

Returns:

  • (Boolean)


14
15
16
# File 'lib/origen_testers/doc.rb', line 14

def generate?
  html_mode
end

#next_accordion_counterObject



170
171
172
173
# File 'lib/origen_testers/doc.rb', line 170

def next_accordion_counter
  @accordion_counter ||= 0
  @accordion_counter += 1
end

#open_text_blockObject



99
100
101
102
103
104
105
106
107
# File 'lib/origen_testers/doc.rb', line 99

def open_text_block
  if html_mode
    unless @text_block_open
      pc ''
      pc '~~~text'
      @text_block_open = true
    end
  end
end

#pattern_nameObject



119
120
121
# File 'lib/origen_testers/doc.rb', line 119

def pattern_name
  Origen.app.current_job.output_pattern_filename.gsub('.md', '')
end

#pattern_section(msg) ⇒ Object



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
# File 'lib/origen_testers/doc.rb', line 134

def pattern_section(msg)
  unless @inhibit_comments
    if generating_program?
      Origen.interface.flow.start_section(name: msg)
      yield
      Origen.interface.flow.stop_section
    else
      if html_mode
        counter = next_accordion_counter
        close_text_block
        pc ''
        pc "<div class=\"accordion-group\">"
        pc "<div class=\"accordion-heading\">"
        pc "<a class=\"accordion-toggle\" data-toggle=\"collapse\" data-parent=\"#accordion2\" href=\"#collapseComment#{counter}\">"
        pc "#{msg}"
        pc '</a>'
        pc '</div>'
        pc "<div id=\"collapseComment#{counter}\" class=\"accordion-body collapse\">"
        pc "<div class=\"accordion-inner\" markdown=\"1\">"
        yield
        close_text_block
        pc '</div>'
        pc '</div>'
        pc '</div>'
      else
        pc ''
        pc "#{msg}"
        pc ''
        @indent += 4
        yield
        @indent -= 4
      end
    end
  end
end

#pc(msg) ⇒ Object



33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
# File 'lib/origen_testers/doc.rb', line 33

def pc(msg)
  if @snip_counters.last
    if @snip_counters.last == 1
      @snip_counters[@snip_counters.size - 1] = 0
      msg = '  ...snipped'
    elsif @snip_counters.last == 0
      return
    else
      @snip_counters[@snip_counters.size - 1] -= 1
    end
  end
  if html_mode
    push_comment(msg)
  else
    Origen.log.info((' ' * @indent) + msg)
  end
end

#pre_headerObject



123
124
125
126
127
128
129
130
131
132
# File 'lib/origen_testers/doc.rb', line 123

def pre_header
  # pc "---"
  # pc "layout: bootstrap"
  # pc "title: #{pattern_name}"
  # pc "gzip: false"
  # pc "---"
  # pc ""
  # pc "# #{pattern_name}"
  # pc ""
end

#snip(number, _options = {}) ⇒ Object

Snip the number of comment lines generated by the contained block to the number given, this is useful for keeping files sizes down and is typically used to snip sections like downloading LRE code.



27
28
29
30
31
# File 'lib/origen_testers/doc.rb', line 27

def snip(number, _options = {})
  @snip_counters.push number + 1
  yield
  @snip_counters.pop
end

#ss(msg = nil) ⇒ Object



175
176
177
178
179
180
181
182
183
184
185
# File 'lib/origen_testers/doc.rb', line 175

def ss(msg = nil)
  unless @inhibit_comments
    @step_comment_on = true
    if block_given?
      yield
    else
      c2(msg)
    end
    @step_comment_on = false
  end
end