• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# ==========================================
2#   Unity Project - A Test Framework for C
3#   Copyright (c) 2007 Mike Karlesky, Mark VanderVoord, Greg Williams
4#   [Released under MIT License. Please refer to license.txt for details]
5# ==========================================
6
7$verbose = false
8$extra_paths = []
9
10require 'rake'
11require 'rake/clean'
12require_relative 'rakefile_helper'
13require 'rspec/core/rake_task'
14
15TEMP_DIRS = [
16	File.join(__dir__, 'build'),
17	File.join(__dir__, 'sandbox')
18]
19
20TEMP_DIRS.each do |dir|
21  directory(dir)
22  CLOBBER.include(dir)
23end
24
25task :prepare_for_tests => TEMP_DIRS
26
27include RakefileHelpers
28
29# Load proper GCC as defult configuration
30DEFAULT_CONFIG_FILE = 'gcc_auto_stdint.yml'
31configure_toolchain(DEFAULT_CONFIG_FILE)
32
33############# ALL THE SELF-TESTS WE CAN PERFORM
34namespace :test do
35  desc "Build and test Unity"
36  task :all => [:clean, :prepare_for_tests, 'test:scripts', 'test:unit', :style, 'test:fixture', 'test:memory', 'test:summary']
37  task :ci => [:clean, :prepare_for_tests, 'test:scripts', 'test:unit', :style, 'test:make', 'test:fixture', 'test:memory', 'test:summary']
38
39  desc "Test unity with its own unit tests"
40  task :unit => [:prepare_for_tests] do
41    run_tests unit_test_files
42  end
43
44  namespace :unit do
45    unit_test_files.each do |f|
46      desc "test this unit only"
47      task File.basename(f,'.c').sub('test_unity_','') => [:prepare_for_tests] do
48        run_tests [f]
49      end
50    end
51  end
52
53  desc "Test unity's helper scripts"
54  task :scripts => [:prepare_for_tests] do
55    Dir['tests/test_*.rb'].each do |scriptfile|
56      require "./"+scriptfile
57    end
58  end
59
60  desc "Test unity triggered from make"
61  task :make => [:prepare_for_tests] do
62    run_make_tests()
63  end
64
65  desc "Test unity fixture addon"
66  task :fixture => [:prepare_for_tests] do
67    test_fixtures()
68  end
69
70  desc "Test unity memory addon"
71  task :memory => [:prepare_for_tests] do
72    test_memory()
73  end
74
75  desc "Test unity examples"
76  task :examples => [:prepare_for_tests] do
77    execute("cd ../examples/example_1 && make -s ci", false)
78    execute("cd ../examples/example_2 && make -s ci", false)
79    execute("cd ../examples/example_3 && rake", false)
80  end
81
82  desc "Run all rspecs"
83  RSpec::Core::RakeTask.new(:spec) do |t|
84    t.pattern = 'spec/**/*_spec.rb'
85  end
86
87  desc "Generate test summary"
88  task :summary do
89    report_summary
90  end
91end
92
93###################### Shorthand for many common tasks
94task :ci => ['test:ci']
95task :all => ['test:all']
96task :default => [:clobber, :all]
97
98desc "Load configuration"
99task :config, :config_file do |t, args|
100  configure_toolchain(args[:config_file])
101end
102
103task :no_color do
104  $colour_output = false
105end
106
107task :verbose do
108  $verbose = true
109end
110
111################### CODING STYLE VALIDATION
112namespace :style do
113  desc "Check style"
114  task :check do
115    report "\nVERIFYING RUBY STYLE"
116    report execute("rubocop ../auto ../examples ../extras --config .rubocop.yml", true)
117    report "Styling Ruby:PASS"
118  end
119
120  namespace :check do
121    Dir['../**/*.rb'].each do |f|
122      filename = File.basename(f, '.rb')
123      #desc "Check Style of #{filename}"
124      task filename.to_sym => ['style:clean'] do
125        report execute("rubocop #{f} --color --config .rubocop.yml", true)
126        report "Style Checked for #{f}"
127      end
128    end
129  end
130
131  desc "Fix Style of all C Code"
132  task :c do
133    run_astyle("../src/*.* ../extras/fixture/src/*.*")
134  end
135
136  namespace :c do
137    Dir['../{src,extras/**}/*.{c,h}'].each do |f|
138      filename = File.basename(f)[0..-3]
139      #desc "Check Style of #{filename}"
140      task filename.to_sym do
141        run_astyle f
142      end
143    end
144  end
145
146  desc "Attempt to Autocorrect style"
147  task :auto  => ['style:clean'] do
148    execute("rubocop ../auto ../examples ../extras --auto-correct --config .rubocop.yml")
149    report "Autocorrected What We Could."
150  end
151
152  desc "Update style todo list"
153  task :todo  => ['style:clean'] do
154    execute("rubocop ../auto ../examples ../extras --auto-gen-config --config .rubocop.yml")
155    report "Updated Style TODO List."
156  end
157
158  task :clean do
159    File.delete(".rubocop_todo.yml") if File.exists?(".rubocop_todo.yml")
160  end
161end
162
163task :style => ['style:check']
164