gotasks 0.0.0

Sign up to get free protection for your applications and to get access to all the features.
data/LICENSE ADDED
File without changes
File without changes
@@ -0,0 +1,209 @@
1
+ ['GOROOT','GOARCH','GOBIN','GOOS'].each do |envvar|
2
+ unless self.class.const_defined?(envvar)
3
+ if ENV.has_key?(envvar)
4
+ self.class.const_set(envvar, ENV[envvar])
5
+ else
6
+ raise "#{envvar} not defined"
7
+ end
8
+ end
9
+ end
10
+
11
+ if GOARCH=="amd64"
12
+ GO_OBJ_EXT=".6"
13
+ GO_COMPILER="6g"
14
+ GO_LINKER="6l"
15
+ elsif GOARCH=="386"
16
+ GO_OBJ_EXT=".8"
17
+ GO_COMPILER="8g"
18
+ GO_LINKER="8l"
19
+ elsif GOARCH=="arm"
20
+ GO_OBJ_EXT=".5"
21
+ GO_COMPILER="5g"
22
+ GO_LINKER="5l"
23
+ else
24
+ raise "gotasks: architecture #{GOARCH} not supportedh"
25
+ end
26
+
27
+ GOPKG = ['.','pkg','test'] unless self.class.const_defined?('GOPKG')
28
+ TEST_DEPENDENCIES = [] unless self.class.const_defined?('TEST_DEPENDENCIES')
29
+ TEST_FILES = FileList.new('test/**/*_test.go')
30
+
31
+
32
+ class GoTestFile
33
+ attr_reader :filename, :package, :benchmarks, :tests
34
+
35
+ def initialize(filename)
36
+ @filename = filename
37
+
38
+ @tests = []
39
+ @benchmarks = []
40
+ @package = nil
41
+ IO.popen("gofmt -comments=false \"#{@filename}\"", 'r') do |f|
42
+ f.each_line do |line|
43
+ if line =~ /^\s*package\s+(.*)\s*$/
44
+ @package = $1
45
+ elsif line =~ /^\s*func\s+(Test.+)\s*\(/
46
+ @tests << $1
47
+ elsif line =~ /^\s*func\s+(Benchmark.+)\s*\(/
48
+ @benchmarks << $1
49
+ end
50
+ end
51
+ end
52
+ end
53
+
54
+ def tests?
55
+ tests.length > 0
56
+ end
57
+
58
+ def package?
59
+ !package.nil?
60
+ end
61
+
62
+ def benchmarks?
63
+ benchmarks.length > 0
64
+ end
65
+
66
+ def testfile
67
+ gofile = []
68
+ gofile << "package main"
69
+ gofile << "import \"#{package}\""
70
+ gofile << "import \"testing\""
71
+
72
+ gofile << ''
73
+ gofile << "var tests = []testing.Test {"
74
+ @tests.each do |test|
75
+ gofile << "\ttesting.Test{ \"#{package}.#{test}\", #{package}.#{test} },"
76
+ end
77
+ gofile << "}"
78
+
79
+ gofile << ''
80
+ gofile << "var benchmarks = []testing.Benchmark {"
81
+ @benchmarks.each do |benchmark|
82
+ gofile << "\ttesting.Benchmark{ \"#{package}.#{benchmark}\", #{package}.#{benchmark} },"
83
+ end
84
+ gofile << "}"
85
+
86
+ gofile << ''
87
+ gofile << 'func main() {'
88
+ gofile << ' testing.Main(tests);'
89
+ gofile << ' testing.RunBenchmarks(benchmarks)'
90
+ gofile << '}'
91
+
92
+ gofile.join("\n")
93
+ end
94
+
95
+ def runner
96
+ @filename.ext('') + "runner.go"
97
+ end
98
+
99
+ def save(outfile = runner)
100
+ File.open(outfile, "w") do |f|
101
+ f.puts testfile
102
+ end
103
+ self
104
+ end
105
+
106
+ end
107
+
108
+
109
+ def gocompile(out, source)
110
+ sh "#{GO_COMPILER} -I#{GOPKG.join(" -I")} -o #{out} #{source}"
111
+ end
112
+
113
+ def golink(out, source)
114
+ sh "#{GO_LINKER} -L#{GOPKG.join(" -L")} -o #{out} #{source}"
115
+ end
116
+
117
+ def gopack(archive, *files)
118
+ mkdir_p File.dirname(archive) unless File.exists?(File.dirname(archive))
119
+ sh "gopack grc #{archive} #{files.join(' ')}"
120
+ end
121
+
122
+ def runtest(test)
123
+ result = nil
124
+ IO.popen("#{test}", "r") do |f|
125
+ result = f.readlines.join('')
126
+ end
127
+
128
+ unless $?.to_i == 0 and result =~ /^\s*PASS\s*$/
129
+ puts "#{test}:"
130
+ IO.popen("#{test}", "r") do |f|
131
+ puts f.readlines
132
+ end
133
+ return false
134
+ end
135
+
136
+ return true
137
+ end
138
+
139
+
140
+ rule GO_OBJ_EXT => [".go"] do |t|
141
+ gocompile t.name, t.source
142
+ end
143
+
144
+ # Link Go-Files
145
+ rule /^[a-z0-9]+$/ => [GO_OBJ_EXT] do |t|
146
+ golink t.name, t.prerequisites.first
147
+ end
148
+
149
+ # Create a Package
150
+ rule '.a' => [GO_OBJ_EXT] do |t|
151
+ gopack t.name, *t.prerequisites
152
+ end
153
+
154
+ TEST_FILES.each do |test|
155
+ file test.ext('').gsub(/^test/,'testrun') => test.ext(GO_OBJ_EXT).gsub(/^test/,'testrun') do |t|
156
+ golink t.name, t.prerequisites.last
157
+ end
158
+
159
+ file test.gsub(/^test/,'testrun') => test.ext(GO_OBJ_EXT) do |t|
160
+ GoTestFile.new(t.prerequisites.last.ext('.go')).save(t.name)
161
+ end
162
+ end
163
+
164
+
165
+ desc "run all tests"
166
+ task :test => "test:all"
167
+
168
+ namespace :test do
169
+ desc "clean tests"
170
+ task :clean do
171
+ FileList.new('./testrun', 'test/**/*.[6]').each do |f|
172
+ rm_rf f if File.exists?(f)
173
+ end
174
+ end
175
+
176
+ task :all => ['testdir'] + TEST_DEPENDENCIES + TEST_FILES.ext('').collect{|f| f.gsub(/^test/,'testrun') } do
177
+ passed = 0
178
+ failed = 0
179
+ TEST_FILES.each do |test|
180
+ if runtest("#{test.ext('').gsub(/^test/,'testrun')}")
181
+ passed+=1
182
+ else
183
+ failed+=1
184
+ end
185
+ end
186
+ puts "#{passed+failed} Tests: #{passed} OK / #{failed} FAILED"
187
+ end
188
+
189
+ task :testdir do
190
+ TEST_FILES.each do |test|
191
+ dirname = File.dirname(test.ext('').gsub(/^test/,'testrun'))
192
+ mkdir_p dirname unless File.exists?(dirname)
193
+ end
194
+ end
195
+ end
196
+
197
+
198
+ desc "remove all generated files"
199
+ task :clean => "test:clean" do
200
+ (CLEAN_FILES + FileList.new('**/*.[6a]','./pkg')).each do |f|
201
+ if File.exists?(f)
202
+ if File.directory?(f)
203
+ rm_rf f
204
+ else
205
+ rm_f f
206
+ end
207
+ end
208
+ end
209
+ end
@@ -0,0 +1,3 @@
1
+ module GoTasks
2
+ VERSION='0.0.0'
3
+ end
metadata ADDED
@@ -0,0 +1,78 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: gotasks
3
+ version: !ruby/object:Gem::Version
4
+ prerelease: false
5
+ segments:
6
+ - 0
7
+ - 0
8
+ - 0
9
+ version: 0.0.0
10
+ platform: ruby
11
+ authors:
12
+ - Thomas Volkmar Worm
13
+ autorequire:
14
+ bindir: bin
15
+ cert_chain: []
16
+
17
+ date: 2010-04-09 00:00:00 +02:00
18
+ default_executable:
19
+ dependencies:
20
+ - !ruby/object:Gem::Dependency
21
+ name: rake
22
+ prerelease: false
23
+ requirement: &id001 !ruby/object:Gem::Requirement
24
+ requirements:
25
+ - - ~>
26
+ - !ruby/object:Gem::Version
27
+ segments:
28
+ - 0
29
+ - 8
30
+ - 7
31
+ version: 0.8.7
32
+ type: :runtime
33
+ version_requirements: *id001
34
+ description: Rake tasks and rules for compiling go projects (http://golang.org)
35
+ email: tvw@s4r.de
36
+ executables: []
37
+
38
+ extensions: []
39
+
40
+ extra_rdoc_files: []
41
+
42
+ files:
43
+ - lib/gotasks.rb
44
+ - lib/gotasks/version.rb
45
+ - README.rdoc
46
+ - LICENSE
47
+ has_rdoc: true
48
+ homepage: http://github.com/tvw/gotasks
49
+ licenses: []
50
+
51
+ post_install_message:
52
+ rdoc_options: []
53
+
54
+ require_paths:
55
+ - lib
56
+ required_ruby_version: !ruby/object:Gem::Requirement
57
+ requirements:
58
+ - - ">="
59
+ - !ruby/object:Gem::Version
60
+ segments:
61
+ - 0
62
+ version: "0"
63
+ required_rubygems_version: !ruby/object:Gem::Requirement
64
+ requirements:
65
+ - - ">="
66
+ - !ruby/object:Gem::Version
67
+ segments:
68
+ - 0
69
+ version: "0"
70
+ requirements: []
71
+
72
+ rubyforge_project:
73
+ rubygems_version: 1.3.6
74
+ signing_key:
75
+ specification_version: 3
76
+ summary: Rake tasks for go projects.
77
+ test_files: []
78
+