summaryrefslogtreecommitdiff
path: root/FreeRTOS-Plus/Test/CMock/vendor/behaviors/lib/behaviors/reporttask.rb
diff options
context:
space:
mode:
Diffstat (limited to 'FreeRTOS-Plus/Test/CMock/vendor/behaviors/lib/behaviors/reporttask.rb')
-rw-r--r--FreeRTOS-Plus/Test/CMock/vendor/behaviors/lib/behaviors/reporttask.rb158
1 files changed, 158 insertions, 0 deletions
diff --git a/FreeRTOS-Plus/Test/CMock/vendor/behaviors/lib/behaviors/reporttask.rb b/FreeRTOS-Plus/Test/CMock/vendor/behaviors/lib/behaviors/reporttask.rb
new file mode 100644
index 000000000..51c0eca09
--- /dev/null
+++ b/FreeRTOS-Plus/Test/CMock/vendor/behaviors/lib/behaviors/reporttask.rb
@@ -0,0 +1,158 @@
+require 'rake'
+require 'rake/tasklib'
+
+module Behaviors
+include Rake
+
+ class ReportTask < TaskLib
+ attr_accessor :pattern
+ attr_accessor :html_dir
+
+ def initialize(name=:behaviors)
+ @name = name
+ @html_dir = 'doc'
+ yield self if block_given?
+ define
+ end
+
+ def define
+ desc "List behavioral definitions for the classes specified (use for=<regexp> to further limit files included in report)"
+ task @name do
+ specifications.each do |spec|
+ puts "#{spec.name} should:\n"
+ spec.requirements.each do |req|
+ puts " - #{req}"
+ end
+ end
+ end
+
+ desc "Generate html report of behavioral definitions for the classes specified (use for=<regexp> to further limit files included in report)"
+ task "#{@name}_html" do
+ require 'erb'
+ txt =<<-EOS
+<html>
+<head>
+<style>
+
+div.title
+{
+ width: 600px;
+ font: bold 14pt trebuchet ms;
+}
+
+div.specification
+{
+ font: bold 12pt trebuchet ms;
+ border: solid 1px black;
+ width: 600px;
+ padding: 5px;
+ margin: 5px;
+}
+
+ul.requirements
+{
+ font: normal 11pt verdana;
+ padding-left: 0;
+ margin-left: 0;
+ border-bottom: 1px solid gray;
+ width: 600px;
+}
+
+ul.requirements li
+{
+ list-style: none;
+ margin: 0;
+ padding: 0.25em;
+ border-top: 1px solid gray;
+}
+</style>
+</head>
+<body>
+<div class="title">Specifications</div>
+<% specifications.each do |spec| %>
+<div class="specification">
+<%= spec.name %> should:
+<ul class="requirements">
+<% spec.requirements.each do |req| %>
+<li><%= req %></li>
+<% end %>
+</ul>
+</div>
+<% end %>
+</body>
+</html>
+ EOS
+ output_dir = File.expand_path(@html_dir)
+ mkdir_p output_dir
+ output_filename = output_dir + "/behaviors.html"
+ File.open(output_filename,"w") do |f|
+ f.write ERB.new(txt).result(binding)
+ end
+ puts "(Wrote #{output_filename})"
+ end
+ end
+
+ private
+ def test_files
+ test_list = FileList[@pattern]
+ if ENV['for']
+ test_list = test_list.grep(/#{ENV['for']}/i)
+ end
+ test_list
+ end
+
+ def specifications
+ test_files.map do |file|
+ spec = OpenStruct.new
+ m = %r".*/([^/].*)_test.rb".match(file)
+ class_name = titleize(m[1]) if m[1]
+ spec.name = class_name
+ spec.requirements = []
+ File::readlines(file).each do |line|
+ if line =~ /^\s*should\s+\(?\s*["'](.*)["']/
+ spec.requirements << $1
+ end
+ end
+ spec
+ end
+ end
+
+ ############################################################
+ # STOLEN FROM inflector.rb
+ ############################################################
+ #--
+ # Copyright (c) 2005 David Heinemeier Hansson
+ #
+ # Permission is hereby granted, free of charge, to any person obtaining
+ # a copy of this software and associated documentation files (the
+ # "Software"), to deal in the Software without restriction, including
+ # without limitation the rights to use, copy, modify, merge, publish,
+ # distribute, sublicense, and/or sell copies of the Software, and to
+ # permit persons to whom the Software is furnished to do so, subject to
+ # the following conditions:
+ #
+ # The above copyright notice and this permission notice shall be
+ # included in all copies or substantial portions of the Software.
+ #
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ # NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+ # LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+ # OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+ # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ #++
+ def titleize(word)
+ humanize(underscore(word)).gsub(/\b([a-z])/) { $1.capitalize }
+ end
+
+ def underscore(camel_cased_word) camel_cased_word.to_s.gsub(/::/, '/').
+ gsub(/([A-Z]+)([A-Z][a-z])/,'\1_\2').gsub(/([a-z\d])([A-Z])/,'\1_\2').tr("-", "_").downcase
+ end
+
+ def humanize(lower_case_and_underscored_word)
+ lower_case_and_underscored_word.to_s.gsub(/_id$/, "").gsub(/_/, " ").capitalize
+ end
+
+ end
+end