gotasks 0.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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
+