bobbyno-tbox 0.5.2 → 0.6
Sign up to get free protection for your applications and to get access to all the features.
- data/History.txt +6 -0
- data/Manifest.txt +23 -12
- data/README.rdoc +20 -9
- data/Rakefile +13 -1
- data/app_generators/java/USAGE +14 -0
- data/app_generators/java/java_generator.rb +39 -0
- data/app_generators/java/templates/Greeting.java +24 -0
- data/app_generators/java/templates/GreetingTest.java +18 -0
- data/app_generators/java/templates/build.xml +55 -0
- data/app_generators/java/templates/lib/hamcrest-core.jar +0 -0
- data/app_generators/java/templates/lib/junit.jar +0 -0
- data/app_generators/java/templates/project.iml +22 -0
- data/app_generators/java/templates/project.ipr +259 -0
- data/app_generators/{tbox → ruby}/USAGE +1 -2
- data/app_generators/ruby/ruby_generator.rb +34 -0
- data/app_generators/{tbox → ruby}/templates/file.txt +0 -0
- data/app_generators/{tbox → ruby}/templates/rakefile.rb +0 -0
- data/app_generators/{tbox → ruby}/templates/right_triangle.rb +0 -6
- data/app_generators/{tbox → ruby}/templates/tbox.rb +0 -0
- data/app_generators/ruby/templates/test_helper.rb +9 -0
- data/app_generators/{tbox → ruby}/templates/test_io.rb +0 -0
- data/app_generators/{tbox → ruby}/templates/test_right_triangle.rb +0 -0
- data/bin/tbox +6 -3
- data/lib/languages.rb +22 -0
- data/lib/tbox.rb +1 -1
- data/lib/tbox_app_generator.rb +41 -0
- data/test/test_generator_helper.rb +37 -0
- data/test/test_java_generator.rb +37 -0
- data/test/test_languages.rb +32 -0
- data/test/test_ruby_generator.rb +32 -0
- metadata +31 -18
- data/app_generators/tbox/tbox_generator.rb +0 -84
- data/app_generators/tbox/templates/README +0 -45
- data/app_generators/tbox/templates/test_helper.rb +0 -9
- data/tbox.gemspec +0 -40
- data/test/test_tbox_generator.rb +0 -63
@@ -2,8 +2,7 @@ Description:
|
|
2
2
|
|
3
3
|
tbox lowers the barrier to entry for test-driven learning by providing a basic infrastructure in which
|
4
4
|
to start coding: A directory structure, some classes and unit tests to get started, and a Rakefile to run
|
5
|
-
all tests.
|
6
|
-
lends itself to TDD.
|
5
|
+
all tests.
|
7
6
|
|
8
7
|
Usage:
|
9
8
|
|
@@ -0,0 +1,34 @@
|
|
1
|
+
require 'tbox_app_generator'
|
2
|
+
|
3
|
+
class RubyGenerator < TboxAppGenerator
|
4
|
+
|
5
|
+
def manifest
|
6
|
+
record do |m|
|
7
|
+
# Ensure appropriate folder(s) exists
|
8
|
+
m.directory ''
|
9
|
+
BASEDIRS.each { |path| m.directory path }
|
10
|
+
|
11
|
+
m.file "rakefile.rb", "rakefile.rb"
|
12
|
+
m.directory "lib/samples"
|
13
|
+
m.file "right_triangle.rb", "lib/samples/right_triangle.rb"
|
14
|
+
m.file "tbox.rb", "lib/tbox.rb"
|
15
|
+
m.directory "test/samples"
|
16
|
+
m.directory "test/data"
|
17
|
+
m.file "test_right_triangle.rb", "test/samples/test_right_triangle.rb"
|
18
|
+
m.file "test_io.rb", "test/test_io.rb"
|
19
|
+
m.file "file.txt", "test/data/file.txt"
|
20
|
+
m.file "test_helper.rb", "test/test_helper.rb"
|
21
|
+
|
22
|
+
m.dependency "install_rubigen_scripts", [destination_root, 'tbox'],
|
23
|
+
:shebang => options[:shebang], :collision => :force
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
protected
|
28
|
+
# Installation skeleton.
|
29
|
+
BASEDIRS = %w(
|
30
|
+
lib
|
31
|
+
script
|
32
|
+
test
|
33
|
+
)
|
34
|
+
end
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
data/bin/tbox
CHANGED
@@ -2,16 +2,19 @@
|
|
2
2
|
|
3
3
|
require 'rubygems'
|
4
4
|
require 'rubigen'
|
5
|
-
|
5
|
+
require File.dirname(__FILE__) + "/../lib/tbox"
|
6
|
+
require File.dirname(__FILE__) + "/../lib/languages"
|
7
|
+
|
6
8
|
if %w(-v --version).include? ARGV.first
|
7
|
-
require File.dirname(__FILE__) + "/../lib/tbox"
|
8
9
|
puts "#{File.basename($0)} #{Tbox::VERSION}"
|
9
10
|
exit(0)
|
10
11
|
end
|
11
12
|
|
12
13
|
require 'rubigen/scripts/generate'
|
14
|
+
|
13
15
|
source = RubiGen::PathSource.new(:application,
|
14
16
|
File.join(File.dirname(__FILE__), "../app_generators"))
|
15
17
|
RubiGen::Base.reset_sources
|
16
18
|
RubiGen::Base.append_sources source
|
17
|
-
|
19
|
+
|
20
|
+
RubiGen::Scripts::Generate.new.run(ARGV, :generator => Languages.parse(ARGV))
|
data/lib/languages.rb
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
class Languages
|
2
|
+
|
3
|
+
def self.parse(args)
|
4
|
+
lang = args.find {|arg| ((arg =~ /-l=/) or (arg =~ /--language=/)) }
|
5
|
+
lang = "-l=ruby" if lang.nil?
|
6
|
+
lang = lang.split('=')[1]
|
7
|
+
raise "Supported languages: #{current.inspect}" if (!current.member?(lang))
|
8
|
+
lang
|
9
|
+
end
|
10
|
+
|
11
|
+
def self.current
|
12
|
+
langs = Dir.entries(File.join(File.dirname(__FILE__), "../app_generators"))
|
13
|
+
langs.reject {|i| ((i == ".") or (i == ".."))}
|
14
|
+
end
|
15
|
+
|
16
|
+
def self.print
|
17
|
+
list = ""
|
18
|
+
current.each {|lang| list << lang << '|'}
|
19
|
+
list.chomp('|')
|
20
|
+
end
|
21
|
+
|
22
|
+
end
|
data/lib/tbox.rb
CHANGED
@@ -0,0 +1,41 @@
|
|
1
|
+
class TboxAppGenerator < RubiGen::Base
|
2
|
+
|
3
|
+
DEFAULT_SHEBANG = File.join(Config::CONFIG['bindir'],
|
4
|
+
Config::CONFIG['ruby_install_name'])
|
5
|
+
|
6
|
+
default_options :language => 'ruby'
|
7
|
+
|
8
|
+
attr_reader :language
|
9
|
+
attr_reader :name
|
10
|
+
|
11
|
+
def initialize(runtime_args, runtime_options = {})
|
12
|
+
super
|
13
|
+
usage if args.empty?
|
14
|
+
@destination_root = File.expand_path(args.shift)
|
15
|
+
@name = base_name
|
16
|
+
extract_options
|
17
|
+
end
|
18
|
+
|
19
|
+
protected
|
20
|
+
|
21
|
+
def banner
|
22
|
+
"\n" << IO.readlines(File.join(File.dirname(__FILE__), "../README.rdoc"))[0]
|
23
|
+
end
|
24
|
+
|
25
|
+
def add_options!(opts)
|
26
|
+
opts.separator ''
|
27
|
+
opts.separator 'Options:'
|
28
|
+
# For each option below, place the default
|
29
|
+
# at the top of the file next to "default_options"
|
30
|
+
# opts.on("-a", "--author=\"Your Name\"", String,
|
31
|
+
# "Some comment about this option",
|
32
|
+
# "Default: none") { |o| options[:author] = o }
|
33
|
+
opts.on("-l", "--language=name", "Language of the environment to generate. Options: #{Languages.print}", "Default: ruby")
|
34
|
+
opts.on("-v", "--version", "Show the #{File.basename($0)} version number and quit.")
|
35
|
+
end
|
36
|
+
|
37
|
+
def extract_options
|
38
|
+
@language = options[:language]
|
39
|
+
end
|
40
|
+
|
41
|
+
end
|
@@ -27,3 +27,40 @@ rescue LoadError
|
|
27
27
|
require 'rubigen'
|
28
28
|
end
|
29
29
|
require 'rubigen/helpers/generator_test_helper'
|
30
|
+
|
31
|
+
module RubiGen::GeneratorTestHelper
|
32
|
+
def assert_file_contains(keyword, filename)
|
33
|
+
ipr = IO.readlines(File.join(APP_ROOT, filename)).to_s
|
34
|
+
assert(ipr =~ Regexp.new(keyword))
|
35
|
+
end
|
36
|
+
|
37
|
+
def run_generated_build_script(cmd)
|
38
|
+
FileUtils::cd(APP_ROOT) do
|
39
|
+
puts "Running generated build script in #{FileUtils::pwd} with #{cmd}"
|
40
|
+
`#{cmd}`
|
41
|
+
raise "Exit code #{$?} while running generated build script with #{cmd}" if ($?.to_s != "0")
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
def sources
|
46
|
+
[RubiGen::PathSource.new(:test, File.join(File.dirname(__FILE__),"..", generator_path))]
|
47
|
+
end
|
48
|
+
|
49
|
+
def generator_path
|
50
|
+
"app_generators"
|
51
|
+
end
|
52
|
+
# Some generator-related assertions:
|
53
|
+
# assert_generated_file(name, &block) # block passed the file contents
|
54
|
+
# assert_directory_exists(name)
|
55
|
+
# assert_generated_class(name, &block)
|
56
|
+
# assert_generated_module(name, &block)
|
57
|
+
# assert_generated_test_for(name, &block)
|
58
|
+
# The assert_generated_(class|module|test_for) &block is passed the body of the class/module within the file
|
59
|
+
# assert_has_method(body, *methods) # check that the body has a list of methods (methods with parentheses not supported yet)
|
60
|
+
#
|
61
|
+
# Other helper methods are:
|
62
|
+
# app_root_files - put this in teardown to show files generated by the test method (e.g. p app_root_files)
|
63
|
+
# bare_setup - place this in setup method to create the APP_ROOT folder for each test
|
64
|
+
# bare_teardown - place this in teardown method to destroy the TMP_ROOT or APP_ROOT folder after each test
|
65
|
+
end
|
66
|
+
|
@@ -0,0 +1,37 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), "test_generator_helper.rb")
|
2
|
+
|
3
|
+
class TestJavaGenerator < Test::Unit::TestCase
|
4
|
+
include RubiGen::GeneratorTestHelper
|
5
|
+
|
6
|
+
def setup
|
7
|
+
bare_setup
|
8
|
+
end
|
9
|
+
|
10
|
+
def teardown
|
11
|
+
bare_teardown
|
12
|
+
end
|
13
|
+
|
14
|
+
def test_generator_without_options
|
15
|
+
run_generator('java', [APP_ROOT], sources)
|
16
|
+
assert_generated_file "myproject.ipr"
|
17
|
+
assert_generated_file "myproject.iml"
|
18
|
+
assert_file_contains(PROJECT_NAME, "myproject.ipr")
|
19
|
+
|
20
|
+
assert_directory_exists "build"
|
21
|
+
assert_generated_file "build/build.xml"
|
22
|
+
assert_file_contains(PROJECT_NAME, "build/build.xml")
|
23
|
+
|
24
|
+
assert_directory_exists "lib"
|
25
|
+
assert_generated_file "lib/junit.jar"
|
26
|
+
assert_generated_file "lib/hamcrest-core.jar"
|
27
|
+
|
28
|
+
assert_directory_exists "src"
|
29
|
+
assert_generated_file "src/com/samples/Greeting.java"
|
30
|
+
|
31
|
+
assert_directory_exists "test"
|
32
|
+
assert_generated_file "test/com/samples/GreetingTest.java"
|
33
|
+
|
34
|
+
run_generated_build_script("ant -f build/build.xml")
|
35
|
+
end
|
36
|
+
|
37
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), "test_generator_helper.rb")
|
2
|
+
require 'languages'
|
3
|
+
|
4
|
+
class TestLanguages < Test::Unit::TestCase
|
5
|
+
|
6
|
+
def test_list_current_languages
|
7
|
+
langs = Languages.current
|
8
|
+
assert(langs.length > 1)
|
9
|
+
assert(!langs.include?("."))
|
10
|
+
assert(!langs.include?(".."))
|
11
|
+
end
|
12
|
+
|
13
|
+
def test_parse_command_for_valid_language
|
14
|
+
args = %w{-l=java MyAppName}
|
15
|
+
assert_equal("java", Languages.parse(args))
|
16
|
+
args = %w{--language=ruby app_name}
|
17
|
+
assert_equal("ruby", Languages.parse(args))
|
18
|
+
end
|
19
|
+
|
20
|
+
def test_reject_invalid_language
|
21
|
+
args = %w{-l=non sense}
|
22
|
+
assert_raise RuntimeError do
|
23
|
+
Languages.parse(args)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
def test_print_languages
|
28
|
+
base = "java|ruby"
|
29
|
+
print = Languages.print
|
30
|
+
assert(print.include?(base))
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), "test_generator_helper.rb")
|
2
|
+
require 'fileutils'
|
3
|
+
|
4
|
+
class TestRubyGenerator < Test::Unit::TestCase
|
5
|
+
include RubiGen::GeneratorTestHelper
|
6
|
+
|
7
|
+
def setup
|
8
|
+
bare_setup
|
9
|
+
end
|
10
|
+
|
11
|
+
def teardown
|
12
|
+
bare_teardown
|
13
|
+
end
|
14
|
+
|
15
|
+
def test_generator_without_options
|
16
|
+
run_generator('ruby', [APP_ROOT], sources)
|
17
|
+
|
18
|
+
assert_generated_file "rakefile.rb"
|
19
|
+
assert_directory_exists "lib/samples"
|
20
|
+
assert_generated_file "lib/samples/right_triangle.rb"
|
21
|
+
assert_generated_file "lib/tbox.rb"
|
22
|
+
assert_directory_exists "test/samples"
|
23
|
+
assert_generated_file "test/samples/test_right_triangle.rb"
|
24
|
+
assert_directory_exists "test/data"
|
25
|
+
assert_generated_file "test/data/file.txt"
|
26
|
+
assert_generated_file "test/test_io.rb"
|
27
|
+
assert_generated_file "test/test_helper.rb"
|
28
|
+
|
29
|
+
run_generated_build_script("rake")
|
30
|
+
end
|
31
|
+
|
32
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: bobbyno-tbox
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: "0.6"
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Bobby Norton
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2009-06-
|
12
|
+
date: 2009-06-24 00:00:00 -07:00
|
13
13
|
default_executable: tbox
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
@@ -32,7 +32,7 @@ dependencies:
|
|
32
32
|
- !ruby/object:Gem::Version
|
33
33
|
version: 1.8.0
|
34
34
|
version:
|
35
|
-
description:
|
35
|
+
description: "Test-driven learning is a way to master a programming language by writing unit tests around its API's. tbox lowers the barrier to entry for test-driven learning by providing a basic infrastructure in which to start coding: A directory structure, some classes and unit tests to get started, and a build script."
|
36
36
|
email:
|
37
37
|
- codeculturist@gmail.com
|
38
38
|
executables:
|
@@ -44,7 +44,7 @@ extra_rdoc_files:
|
|
44
44
|
- Manifest.txt
|
45
45
|
- PostInstall.txt
|
46
46
|
- README.rdoc
|
47
|
-
- app_generators/
|
47
|
+
- app_generators/ruby/templates/file.txt
|
48
48
|
files:
|
49
49
|
- History.txt
|
50
50
|
- MIT-LICENSE
|
@@ -52,25 +52,36 @@ files:
|
|
52
52
|
- PostInstall.txt
|
53
53
|
- README.rdoc
|
54
54
|
- Rakefile
|
55
|
-
- app_generators/
|
56
|
-
- app_generators/
|
57
|
-
- app_generators/
|
58
|
-
- app_generators/
|
59
|
-
- app_generators/
|
60
|
-
- app_generators/
|
61
|
-
- app_generators/
|
62
|
-
- app_generators/
|
63
|
-
- app_generators/
|
64
|
-
- app_generators/
|
55
|
+
- app_generators/java/USAGE
|
56
|
+
- app_generators/java/java_generator.rb
|
57
|
+
- app_generators/java/templates/Greeting.java
|
58
|
+
- app_generators/java/templates/GreetingTest.java
|
59
|
+
- app_generators/java/templates/build.xml
|
60
|
+
- app_generators/java/templates/lib/hamcrest-core.jar
|
61
|
+
- app_generators/java/templates/lib/junit.jar
|
62
|
+
- app_generators/java/templates/project.iml
|
63
|
+
- app_generators/java/templates/project.ipr
|
64
|
+
- app_generators/ruby/USAGE
|
65
|
+
- app_generators/ruby/ruby_generator.rb
|
66
|
+
- app_generators/ruby/templates/file.txt
|
67
|
+
- app_generators/ruby/templates/rakefile.rb
|
68
|
+
- app_generators/ruby/templates/right_triangle.rb
|
69
|
+
- app_generators/ruby/templates/tbox.rb
|
70
|
+
- app_generators/ruby/templates/test_helper.rb
|
71
|
+
- app_generators/ruby/templates/test_io.rb
|
72
|
+
- app_generators/ruby/templates/test_right_triangle.rb
|
65
73
|
- bin/tbox
|
74
|
+
- lib/languages.rb
|
66
75
|
- lib/tbox.rb
|
76
|
+
- lib/tbox_app_generator.rb
|
67
77
|
- script/console
|
68
78
|
- script/destroy
|
69
79
|
- script/generate
|
70
|
-
- tbox.gemspec
|
71
80
|
- test/test_generator_helper.rb
|
72
81
|
- test/test_helper.rb
|
73
|
-
- test/
|
82
|
+
- test/test_java_generator.rb
|
83
|
+
- test/test_languages.rb
|
84
|
+
- test/test_ruby_generator.rb
|
74
85
|
has_rdoc: false
|
75
86
|
homepage: http://github.com/bobbyno/tbox/tree/master
|
76
87
|
post_install_message: PostInstall.txt
|
@@ -97,8 +108,10 @@ rubyforge_project: tbox
|
|
97
108
|
rubygems_version: 1.2.0
|
98
109
|
signing_key:
|
99
110
|
specification_version: 3
|
100
|
-
summary:
|
111
|
+
summary: Test-driven learning is a way to master a programming language by writing unit tests around its API's
|
101
112
|
test_files:
|
102
113
|
- test/test_generator_helper.rb
|
103
114
|
- test/test_helper.rb
|
104
|
-
- test/
|
115
|
+
- test/test_java_generator.rb
|
116
|
+
- test/test_languages.rb
|
117
|
+
- test/test_ruby_generator.rb
|
@@ -1,84 +0,0 @@
|
|
1
|
-
class TboxGenerator < RubiGen::Base
|
2
|
-
|
3
|
-
DEFAULT_SHEBANG = File.join(Config::CONFIG['bindir'],
|
4
|
-
Config::CONFIG['ruby_install_name'])
|
5
|
-
|
6
|
-
default_options :author => nil
|
7
|
-
|
8
|
-
attr_reader :name
|
9
|
-
|
10
|
-
def initialize(runtime_args, runtime_options = {})
|
11
|
-
super
|
12
|
-
usage if args.empty?
|
13
|
-
@destination_root = File.expand_path(args.shift)
|
14
|
-
@name = base_name
|
15
|
-
extract_options
|
16
|
-
end
|
17
|
-
|
18
|
-
def manifest
|
19
|
-
record do |m|
|
20
|
-
# Ensure appropriate folder(s) exists
|
21
|
-
m.directory ''
|
22
|
-
BASEDIRS.each { |path| m.directory path }
|
23
|
-
|
24
|
-
m.file "rakefile.rb", "rakefile.rb"
|
25
|
-
m.file "README", "README"
|
26
|
-
m.file "../../../MIT-LICENSE", "MIT-LICENSE"
|
27
|
-
# Create stubs
|
28
|
-
# m.template "template.rb", "some_file_after_erb.rb"
|
29
|
-
# m.template_copy_each ["template.rb", "template2.rb"]
|
30
|
-
# m.file "file", "some_file_copied"
|
31
|
-
# m.file_copy_each ["path/to/file", "path/to/file2"]
|
32
|
-
m.directory "lib/samples"
|
33
|
-
m.file "right_triangle.rb", "lib/samples/right_triangle.rb"
|
34
|
-
m.file "tbox.rb", "lib/tbox.rb"
|
35
|
-
m.directory "test/samples"
|
36
|
-
m.directory "test/data"
|
37
|
-
m.file "test_right_triangle.rb", "test/samples/test_right_triangle.rb"
|
38
|
-
m.file "test_io.rb", "test/test_io.rb"
|
39
|
-
m.file "file.txt", "test/data/file.txt"
|
40
|
-
m.file "test_helper.rb", "test/test_helper.rb"
|
41
|
-
|
42
|
-
m.dependency "install_rubigen_scripts", [destination_root, 'tbox'],
|
43
|
-
:shebang => options[:shebang], :collision => :force
|
44
|
-
end
|
45
|
-
end
|
46
|
-
|
47
|
-
protected
|
48
|
-
def banner
|
49
|
-
<<-EOS
|
50
|
-
Creates a test-driven learning environment: A directory structure, some sample classes and unit tests,
|
51
|
-
and a Rakefile to run all tests.
|
52
|
-
|
53
|
-
USAGE: #{spec.name} dir_name
|
54
|
-
EOS
|
55
|
-
end
|
56
|
-
|
57
|
-
def add_options!(opts)
|
58
|
-
opts.separator ''
|
59
|
-
opts.separator 'Options:'
|
60
|
-
# For each option below, place the default
|
61
|
-
# at the top of the file next to "default_options"
|
62
|
-
# opts.on("-a", "--author=\"Your Name\"", String,
|
63
|
-
# "Some comment about this option",
|
64
|
-
# "Default: none") { |o| options[:author] = o }
|
65
|
-
opts.on("-v", "--version", "Show the #{File.basename($0)} version number and quit.")
|
66
|
-
end
|
67
|
-
|
68
|
-
def extract_options
|
69
|
-
# for each option, extract it into a local variable (and create an "attr_reader :author" at the top)
|
70
|
-
# Templates can access these value via the attr_reader-generated methods, but not the
|
71
|
-
# raw instance variable value.
|
72
|
-
# @author = options[:author]
|
73
|
-
end
|
74
|
-
|
75
|
-
# Installation skeleton. Intermediate directories are automatically
|
76
|
-
# created so don't sweat their absence here.
|
77
|
-
BASEDIRS = %w(
|
78
|
-
lib
|
79
|
-
log
|
80
|
-
script
|
81
|
-
test
|
82
|
-
tmp
|
83
|
-
)
|
84
|
-
end
|