bobbyno-tbox 0.5.2 → 0.6
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/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
|