newjs 1.0.4 → 1.1.0
Sign up to get free protection for your applications and to get access to all the features.
- data/History.txt +16 -0
- data/Manifest.txt +9 -5
- data/README.txt +6 -0
- data/app_generators/newjs/newjs_generator.rb +4 -2
- data/app_generators/newjs/templates/README.txt.erb +13 -0
- data/app_generators/newjs/templates/Rakefile.erb +31 -4
- data/app_generators/newjs/templates/lib/jstest.rb +5 -5
- data/app_generators/newjs/templates/script/js_autotest +1 -1
- data/app_generators/newjs/templates/tasks/javascript_test_autotest_tasks.rake +2 -2
- data/javascript_test_generators/functional_test/USAGE +2 -0
- data/javascript_test_generators/functional_test/functional_test_generator.rb +55 -0
- data/javascript_test_generators/functional_test/templates/test/test.html.erb +58 -0
- data/javascript_test_generators/{javascript_test → unit_test}/USAGE +0 -0
- data/javascript_test_generators/{javascript_test → unit_test}/templates/test/test.html.erb +4 -4
- data/javascript_test_generators/{javascript_test/javascript_test_generator.rb → unit_test/unit_test_generator.rb} +5 -5
- data/lib/newjs/jstest.rb +5 -5
- data/lib/newjs/version.rb +2 -2
- data/newjs_generators/install_website/templates/tasks/website.rake +1 -1
- data/newjs_generators/install_website/templates/website/index.txt +7 -1
- data/newjs_theme_generators/plain_theme/templates/website/stylesheets/screen.css +3 -3
- data/newjs_theme_generators/plain_theme/templates/website/template.html.erb +0 -2
- data/test/test_functional_test_generator.rb +56 -0
- data/test/{test_javascript_test_generator.rb → test_unit_test_generator.rb} +17 -4
- data/website/index.html +6 -8
- data/website/index.txt +63 -35
- data/website/template.html.erb +0 -2
- metadata +13 -9
- data/app_generators/newjs/templates/README.txt +0 -1
data/History.txt
CHANGED
@@ -1,3 +1,19 @@
|
|
1
|
+
== 1.1.0 2008-02-17
|
2
|
+
|
3
|
+
MAJOR CHANGE - test files in test/unit
|
4
|
+
HOWTO UPGRADE:
|
5
|
+
* Run 'newjs .' within your project
|
6
|
+
* Take note of differences and apply them to your files
|
7
|
+
* Move all tests to test/unit and add '../' to all <script> + <link> in test HTML
|
8
|
+
* Use 'script/generate unit_test' instead of 'script/generate javascript_test'
|
9
|
+
CHANGES
|
10
|
+
* unit_test: Added specific unit_test generator placing tests in test/unit folder
|
11
|
+
* functional_test: Added specific functional_test generator for tests of dist/xxx.js
|
12
|
+
* javascript_test: REMOVED - replaced by unit_test + functional_test
|
13
|
+
* install_website: index.txt has Git repo instructions too - just delete svn/git if unnecessary
|
14
|
+
* rake dist: distribution files stored to website/dist (if folder website exists)
|
15
|
+
* newjs: url option now works
|
16
|
+
|
1
17
|
== 1.0.4 2008-02-16
|
2
18
|
|
3
19
|
* newjs - added missing newjs/rubyforge.rb file
|
data/Manifest.txt
CHANGED
@@ -7,7 +7,7 @@ app_generators/newjs/USAGE
|
|
7
7
|
app_generators/newjs/newjs_generator.rb
|
8
8
|
app_generators/newjs/templates/History.txt.erb
|
9
9
|
app_generators/newjs/templates/License.txt.erb
|
10
|
-
app_generators/newjs/templates/README.txt
|
10
|
+
app_generators/newjs/templates/README.txt.erb
|
11
11
|
app_generators/newjs/templates/Rakefile.erb
|
12
12
|
app_generators/newjs/templates/config/javascript_test_autotest.yml.sample
|
13
13
|
app_generators/newjs/templates/lib/jstest.rb
|
@@ -25,9 +25,12 @@ app_generators/newjs/templates/test/assets/unittest.js
|
|
25
25
|
bin/newjs
|
26
26
|
config/hoe.rb
|
27
27
|
config/requirements.rb
|
28
|
-
javascript_test_generators/
|
29
|
-
javascript_test_generators/
|
30
|
-
javascript_test_generators/
|
28
|
+
javascript_test_generators/functional_test/USAGE
|
29
|
+
javascript_test_generators/functional_test/functional_test_generator.rb
|
30
|
+
javascript_test_generators/functional_test/templates/test/test.html.erb
|
31
|
+
javascript_test_generators/unit_test/USAGE
|
32
|
+
javascript_test_generators/unit_test/templates/test/test.html.erb
|
33
|
+
javascript_test_generators/unit_test/unit_test_generator.rb
|
31
34
|
lib/newjs.rb
|
32
35
|
lib/newjs/autotest.rb
|
33
36
|
lib/newjs/autotest/javascript_test_autotest.rb
|
@@ -57,12 +60,13 @@ setup.rb
|
|
57
60
|
tasks/deployment.rake
|
58
61
|
tasks/environment.rake
|
59
62
|
tasks/website.rake
|
63
|
+
test/test_functional_test_generator.rb
|
60
64
|
test/test_generator_helper.rb
|
61
65
|
test/test_helper.rb
|
62
66
|
test/test_install_website_generator.rb
|
63
|
-
test/test_javascript_test_generator.rb
|
64
67
|
test/test_newjs_generator.rb
|
65
68
|
test/test_plain_theme_generator.rb
|
69
|
+
test/test_unit_test_generator.rb
|
66
70
|
website/images/example-unittest-log.jpg
|
67
71
|
website/index.html
|
68
72
|
website/index.txt
|
data/README.txt
CHANGED
@@ -40,8 +40,7 @@ class NewjsGenerator < RubiGen::Base
|
|
40
40
|
m.file_copy_each %w[javascript_test_autotest_tasks.rake environment.rake deploy.rake], "tasks"
|
41
41
|
m.file_copy_each %w[javascript_test_autotest.yml.sample], "config"
|
42
42
|
m.file_copy_each %w[protodoc.rb jstest.rb], "lib"
|
43
|
-
m.
|
44
|
-
m.template_copy_each %w[Rakefile.erb History.txt.erb License.txt.erb]
|
43
|
+
m.template_copy_each %w[Rakefile.erb README.txt.erb History.txt.erb License.txt.erb]
|
45
44
|
m.template_copy_each %w[HEADER.erb], "src"
|
46
45
|
m.template "src/library.js.erb", "src/#{name}.js"
|
47
46
|
|
@@ -98,6 +97,7 @@ EOS
|
|
98
97
|
@author ||= rubyforge_config.full_name
|
99
98
|
@email ||= rubyforge_config.email
|
100
99
|
end
|
100
|
+
@url = options[:url]
|
101
101
|
end
|
102
102
|
|
103
103
|
# Installation skeleton. Intermediate directories are automatically
|
@@ -109,5 +109,7 @@ EOS
|
|
109
109
|
script
|
110
110
|
tasks
|
111
111
|
test/assets
|
112
|
+
test/unit
|
113
|
+
test/functional
|
112
114
|
)
|
113
115
|
end
|
@@ -42,6 +42,11 @@ task :dist do
|
|
42
42
|
Dir.chdir(APP_DIST_DIR) do
|
43
43
|
FileUtils.copy_file APP_FILE_NAME, "#{APP_NAME}-#{APP_VERSION}.js"
|
44
44
|
end
|
45
|
+
if File.directory?("website")
|
46
|
+
FileUtils.mkdir_p "website/dist"
|
47
|
+
FileUtils.copy_file "dist/#{APP_FILE_NAME}", "website/dist/#{APP_FILE_NAME}"
|
48
|
+
FileUtils.copy_file "dist/#{APP_FILE_NAME}", "website/dist/#{APP_NAME}-#{APP_VERSION}.js"
|
49
|
+
end
|
45
50
|
end
|
46
51
|
|
47
52
|
Rake::PackageTask.new(APP_NAME, APP_VERSION) do |package|
|
@@ -60,12 +65,33 @@ Rake::PackageTask.new(APP_NAME, APP_VERSION) do |package|
|
|
60
65
|
)
|
61
66
|
end
|
62
67
|
|
63
|
-
desc "Builds the distribution, runs the JavaScript unit tests and collects their results."
|
64
|
-
task :test => [:dist, :test_units]
|
68
|
+
desc "Builds the distribution, runs the JavaScript unit + functional tests and collects their results."
|
69
|
+
task :test => [:dist, :test_units, :test_functionals]
|
65
70
|
|
66
71
|
require 'jstest'
|
67
72
|
desc "Runs all the JavaScript unit tests and collects the results"
|
68
|
-
JavaScriptTestTask.new(:test_units) do |t|
|
73
|
+
JavaScriptTestTask.new(:test_units, 4711) do |t|
|
74
|
+
testcases = ENV['TESTCASES']
|
75
|
+
tests_to_run = ENV['TESTS'] && ENV['TESTS'].split(',')
|
76
|
+
browsers_to_test = ENV['BROWSERS'] && ENV['BROWSERS'].split(',')
|
77
|
+
|
78
|
+
t.mount("/dist")
|
79
|
+
t.mount("/src")
|
80
|
+
t.mount("/test")
|
81
|
+
|
82
|
+
Dir["test/unit/*_test.html"].sort.each do |test_file|
|
83
|
+
tests = testcases ? { :url => "/#{test_file}", :testcases => testcases } : "/#{test_file}"
|
84
|
+
test_filename = test_file[/.*\/(.+?)\.html/, 1]
|
85
|
+
t.run(tests) unless tests_to_run && !tests_to_run.include?(test_filename)
|
86
|
+
end
|
87
|
+
|
88
|
+
%w( safari firefox ie konqueror opera ).each do |browser|
|
89
|
+
t.browser(browser.to_sym) unless browsers_to_test && !browsers_to_test.include?(browser)
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
93
|
+
desc "Runs all the JavaScript functional tests and collects the results"
|
94
|
+
JavaScriptTestTask.new(:test_functionals, 4712) do |t|
|
69
95
|
testcases = ENV['TESTCASES']
|
70
96
|
tests_to_run = ENV['TESTS'] && ENV['TESTS'].split(',')
|
71
97
|
browsers_to_test = ENV['BROWSERS'] && ENV['BROWSERS'].split(',')
|
@@ -74,7 +100,7 @@ JavaScriptTestTask.new(:test_units) do |t|
|
|
74
100
|
t.mount("/src")
|
75
101
|
t.mount("/test")
|
76
102
|
|
77
|
-
Dir["test/*_test.html"].sort.each do |test_file|
|
103
|
+
Dir["test/functional/*_test.html"].sort.each do |test_file|
|
78
104
|
tests = testcases ? { :url => "/#{test_file}", :testcases => testcases } : "/#{test_file}"
|
79
105
|
test_filename = test_file[/.*\/(.+?)\.html/, 1]
|
80
106
|
t.run(tests) unless tests_to_run && !tests_to_run.include?(test_filename)
|
@@ -85,6 +111,7 @@ JavaScriptTestTask.new(:test_units) do |t|
|
|
85
111
|
end
|
86
112
|
end
|
87
113
|
|
114
|
+
|
88
115
|
task :clean_package_source do
|
89
116
|
rm_rf File.join(APP_PKG_DIR, "#{APP_NAME}-#{APP_VERSION}")
|
90
117
|
end
|
@@ -268,14 +268,14 @@ end
|
|
268
268
|
|
269
269
|
class JavaScriptTestTask < ::Rake::TaskLib
|
270
270
|
|
271
|
-
def initialize(name=:test)
|
271
|
+
def initialize(name=:test, port=4711)
|
272
272
|
@name = name
|
273
273
|
@tests = []
|
274
274
|
@browsers = []
|
275
|
-
|
275
|
+
@port = port
|
276
276
|
@queue = Queue.new
|
277
277
|
|
278
|
-
@server = WEBrick::HTTPServer.new(:Port =>
|
278
|
+
@server = WEBrick::HTTPServer.new(:Port => @port) # TODO: make port configurable
|
279
279
|
@server.mount_proc("/results") do |req, res|
|
280
280
|
@queue.push({
|
281
281
|
:tests => req.query['tests'].to_i,
|
@@ -308,12 +308,12 @@ class JavaScriptTestTask < ::Rake::TaskLib
|
|
308
308
|
browser.setup
|
309
309
|
puts "\nStarted tests in #{browser}"
|
310
310
|
@tests.each do |test|
|
311
|
-
params = "resultsURL=http://localhost
|
311
|
+
params = "resultsURL=http://localhost:#{@port}/results&t=" + ("%.6f" % Time.now.to_f)
|
312
312
|
if test.is_a?(Hash)
|
313
313
|
params << "&tests=#{test[:testcases]}" if test[:testcases]
|
314
314
|
test = test[:url]
|
315
315
|
end
|
316
|
-
browser.visit("http://localhost
|
316
|
+
browser.visit("http://localhost:#{@port}#{test}?#{params}")
|
317
317
|
|
318
318
|
result = @queue.pop
|
319
319
|
result.each { |k, v| results[k] += v }
|
@@ -1 +1 @@
|
|
1
|
-
script/rstakeout "rake test:recent:javascript" test/*_test.html src/*.js
|
1
|
+
script/rstakeout "rake test:recent:javascript" test/unit/*_test.html src/*.js
|
@@ -10,7 +10,7 @@ namespace :test do
|
|
10
10
|
|
11
11
|
since = TEST_CHANGES_SINCE
|
12
12
|
touched = FileList[
|
13
|
-
'test/*_test.html',
|
13
|
+
'test/unit/*_test.html',
|
14
14
|
'src/*.js'].select { |path| File.mtime(path) > since }
|
15
15
|
next if touched.blank?
|
16
16
|
|
@@ -20,7 +20,7 @@ namespace :test do
|
|
20
20
|
|
21
21
|
touched.each do |file|
|
22
22
|
if file =~ /\/([^\/]+)\.js$/
|
23
|
-
file = "test/#{$1}_test.html"
|
23
|
+
file = "test/unit/#{$1}_test.html"
|
24
24
|
end
|
25
25
|
file = "#{APP_ROOT}/#{file}"
|
26
26
|
unless File.exists?(file)
|
@@ -0,0 +1,55 @@
|
|
1
|
+
class FunctionalTestGenerator < RubiGen::Base
|
2
|
+
|
3
|
+
attr_reader :name, :dist_name
|
4
|
+
|
5
|
+
def initialize(runtime_args, runtime_options = {})
|
6
|
+
super
|
7
|
+
usage if args.empty?
|
8
|
+
@destination_root = File.expand_path(".")
|
9
|
+
@name = args.shift
|
10
|
+
@dist_name = args.shift || base_name
|
11
|
+
extract_options
|
12
|
+
end
|
13
|
+
|
14
|
+
def manifest
|
15
|
+
record do |m|
|
16
|
+
# Ensure appropriate folder(s) exists
|
17
|
+
m.directory 'test/functional'
|
18
|
+
|
19
|
+
# Create stubs
|
20
|
+
m.template "test/test.html.erb", "test/functional/#{name}_test.html"
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
protected
|
25
|
+
def banner
|
26
|
+
<<-EOS
|
27
|
+
Creates a functional test file for the final distribution JavaScript file(s).
|
28
|
+
|
29
|
+
USAGE: #{$0} #{spec.name} name [dist_name]"
|
30
|
+
|
31
|
+
NOTES:
|
32
|
+
* name - creates a file test/functional/name_test.html
|
33
|
+
* dist_name - is for a file dist/base_name.js or dist/dist_name.js
|
34
|
+
|
35
|
+
EOS
|
36
|
+
end
|
37
|
+
|
38
|
+
def add_options!(opts)
|
39
|
+
# opts.separator ''
|
40
|
+
# opts.separator 'Options:'
|
41
|
+
# For each option below, place the default
|
42
|
+
# at the top of the file next to "default_options"
|
43
|
+
# opts.on("-a", "--author=\"Your Name\"", String,
|
44
|
+
# "Some comment about this option",
|
45
|
+
# "Default: none") { |options[:author]| }
|
46
|
+
# opts.on("-v", "--version", "Show the #{File.basename($0)} version number and quit.")
|
47
|
+
end
|
48
|
+
|
49
|
+
def extract_options
|
50
|
+
# for each option, extract it into a local variable (and create an "attr_reader :author" at the top)
|
51
|
+
# Templates can access these value via the attr_reader-generated methods, but not the
|
52
|
+
# raw instance variable value.
|
53
|
+
# @author = options[:author]
|
54
|
+
end
|
55
|
+
end
|
@@ -0,0 +1,58 @@
|
|
1
|
+
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
|
2
|
+
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
3
|
+
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
4
|
+
<head>
|
5
|
+
<title>JavaScript unit test file</title>
|
6
|
+
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
|
7
|
+
<script src="../assets/prototype.js" type="text/javascript"></script>
|
8
|
+
<script src="../assets/unittest.js" type="text/javascript"></script>
|
9
|
+
|
10
|
+
<script src="../../dist/<%= dist_name %>.js" type="text/javascript"></script>
|
11
|
+
|
12
|
+
<link rel="stylesheet" href="../assets/unittest.css" type="text/css" />
|
13
|
+
</head>
|
14
|
+
<body>
|
15
|
+
|
16
|
+
<div id="content">
|
17
|
+
|
18
|
+
<div id="header">
|
19
|
+
<h1>JavaScript unit test file</h1>
|
20
|
+
<p>
|
21
|
+
Functional tests for <strong>dist/<%= name %>.js</strong>.
|
22
|
+
</p>
|
23
|
+
</div>
|
24
|
+
|
25
|
+
<!-- Log output (one per Runner, via {testLog: "testlog"} option)-->
|
26
|
+
<div id="testlog"></div>
|
27
|
+
|
28
|
+
<!-- Put sample/test html here -->
|
29
|
+
<div id="sample"></div>
|
30
|
+
</div>
|
31
|
+
|
32
|
+
<script type="text/javascript">
|
33
|
+
// <![CDATA[
|
34
|
+
|
35
|
+
new Test.Unit.Runner({
|
36
|
+
// replace this with your real tests
|
37
|
+
setup: function() {
|
38
|
+
|
39
|
+
},
|
40
|
+
|
41
|
+
teardown: function() {
|
42
|
+
|
43
|
+
},
|
44
|
+
|
45
|
+
testTruth: function() { with(this) {
|
46
|
+
assert(true);
|
47
|
+
}}
|
48
|
+
|
49
|
+
}, {testLog: "testlog"});
|
50
|
+
// For each Test.UnitRunner instance, specify the element id where results will be
|
51
|
+
// published; e.g. <div id="testlog"/> above.
|
52
|
+
// That is, you can have multiple "new Test.Unit.Runner() { ... }" on this page, just
|
53
|
+
// create more <div id="testlog2"></div> etc, and pass the element id to the hash above:
|
54
|
+
// e.g. {testLog: "testlog2"}
|
55
|
+
// ]]>
|
56
|
+
</script>
|
57
|
+
</body>
|
58
|
+
</html>
|
File without changes
|
@@ -4,12 +4,12 @@
|
|
4
4
|
<head>
|
5
5
|
<title>JavaScript unit test file</title>
|
6
6
|
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
|
7
|
-
<script src="assets/prototype.js" type="text/javascript"></script>
|
8
|
-
<script src="assets/unittest.js" type="text/javascript"></script>
|
7
|
+
<script src="../assets/prototype.js" type="text/javascript"></script>
|
8
|
+
<script src="../assets/unittest.js" type="text/javascript"></script>
|
9
9
|
|
10
|
-
<script src="
|
10
|
+
<script src="../../src/<%= library_name %>.js" type="text/javascript"></script>
|
11
11
|
|
12
|
-
<link rel="stylesheet" href="assets/unittest.css" type="text/css" />
|
12
|
+
<link rel="stylesheet" href="../assets/unittest.css" type="text/css" />
|
13
13
|
</head>
|
14
14
|
<body>
|
15
15
|
|
@@ -1,4 +1,4 @@
|
|
1
|
-
class
|
1
|
+
class UnitTestGenerator < RubiGen::Base
|
2
2
|
|
3
3
|
attr_reader :name, :library_name
|
4
4
|
|
@@ -13,22 +13,22 @@ class JavascriptTestGenerator < RubiGen::Base
|
|
13
13
|
def manifest
|
14
14
|
record do |m|
|
15
15
|
# Ensure appropriate folder(s) exists
|
16
|
-
m.directory 'test'
|
16
|
+
m.directory 'test/unit'
|
17
17
|
|
18
18
|
# Create stubs
|
19
|
-
m.template "test/test.html.erb", "test/#{name}_test.html"
|
19
|
+
m.template "test/test.html.erb", "test/unit/#{name}_test.html"
|
20
20
|
end
|
21
21
|
end
|
22
22
|
|
23
23
|
protected
|
24
24
|
def banner
|
25
25
|
<<-EOS
|
26
|
-
Creates an HTML test file for a JavaScript library.
|
26
|
+
Creates an HTML unit test file for a JavaScript library.
|
27
27
|
|
28
28
|
USAGE: #{$0} #{spec.name} name [library_name]"
|
29
29
|
|
30
30
|
NOTES:
|
31
|
-
* name - creates a file test/name_test.html
|
31
|
+
* name - creates a file test/unit/name_test.html
|
32
32
|
* library_name - is for a file src/library_name.js
|
33
33
|
|
34
34
|
EOS
|
data/lib/newjs/jstest.rb
CHANGED
@@ -268,14 +268,14 @@ end
|
|
268
268
|
|
269
269
|
class JavaScriptTestTask < ::Rake::TaskLib
|
270
270
|
|
271
|
-
def initialize(name=:test)
|
271
|
+
def initialize(name=:test, port=4711)
|
272
272
|
@name = name
|
273
273
|
@tests = []
|
274
274
|
@browsers = []
|
275
|
-
|
275
|
+
@port = port
|
276
276
|
@queue = Queue.new
|
277
277
|
|
278
|
-
@server = WEBrick::HTTPServer.new(:Port =>
|
278
|
+
@server = WEBrick::HTTPServer.new(:Port => @port) # TODO: make port configurable
|
279
279
|
@server.mount_proc("/results") do |req, res|
|
280
280
|
@queue.push({
|
281
281
|
:tests => req.query['tests'].to_i,
|
@@ -308,12 +308,12 @@ class JavaScriptTestTask < ::Rake::TaskLib
|
|
308
308
|
browser.setup
|
309
309
|
puts "\nStarted tests in #{browser}"
|
310
310
|
@tests.each do |test|
|
311
|
-
params = "resultsURL=http://localhost
|
311
|
+
params = "resultsURL=http://localhost:#{@port}/results&t=" + ("%.6f" % Time.now.to_f)
|
312
312
|
if test.is_a?(Hash)
|
313
313
|
params << "&tests=#{test[:testcases]}" if test[:testcases]
|
314
314
|
test = test[:url]
|
315
315
|
end
|
316
|
-
browser.visit("http://localhost
|
316
|
+
browser.visit("http://localhost:#{@port}#{test}?#{params}")
|
317
317
|
|
318
318
|
result = @queue.pop
|
319
319
|
result.each { |k, v| results[k] += v }
|
data/lib/newjs/version.rb
CHANGED
@@ -17,7 +17,7 @@ EOS
|
|
17
17
|
end
|
18
18
|
|
19
19
|
desc 'Generate website files'
|
20
|
-
task :website_generate => :ruby_env do
|
20
|
+
task :website_generate => [:ruby_env, :dist] do
|
21
21
|
(Dir['website/**/*.txt'] - Dir['website/version*.txt']).each do |txt|
|
22
22
|
sh %{ #{RUBY_APP} script/txt2html #{txt} > #{txt.gsub(/txt$/,'html')} }
|
23
23
|
end
|
@@ -6,7 +6,8 @@ This JavaScript project ...
|
|
6
6
|
|
7
7
|
h2. Downloading
|
8
8
|
|
9
|
-
|
9
|
+
<a href="dist/<%= name %>.js"><%= name %>.js</a>
|
10
|
+
|
10
11
|
|
11
12
|
h2. The basics
|
12
13
|
|
@@ -27,6 +28,11 @@ Read the "8 steps for fixing other people's code":http://drnicwilliams.com/2007/
|
|
27
28
|
|
28
29
|
The trunk repository is <code>svn://rubyforge.org/var/svn/<%= name %>/trunk</code> for anonymous access.
|
29
30
|
|
31
|
+
OR
|
32
|
+
|
33
|
+
The source project is a "Git":http://git.or.cz/ repository. See <%= author %>'s "master branch":http://github.com/<%= username %>/<%= name %>/tree/master for clone/checkout details.
|
34
|
+
|
35
|
+
|
30
36
|
h2. License
|
31
37
|
|
32
38
|
This code is free to use under the terms of the MIT license.
|
@@ -1,5 +1,5 @@
|
|
1
1
|
body {
|
2
|
-
background-color: #
|
2
|
+
background-color: #E9C000;
|
3
3
|
font-family: "Georgia", sans-serif;
|
4
4
|
font-size: 16px;
|
5
5
|
line-height: 1.6em;
|
@@ -24,7 +24,7 @@ li {
|
|
24
24
|
}
|
25
25
|
a {
|
26
26
|
color: #5E5AFF;
|
27
|
-
background-color: #
|
27
|
+
background-color: #DDDA89;
|
28
28
|
font-weight: normal;
|
29
29
|
text-decoration: underline;
|
30
30
|
}
|
@@ -39,7 +39,7 @@ blockquote {
|
|
39
39
|
}
|
40
40
|
|
41
41
|
#main {
|
42
|
-
width:
|
42
|
+
width: 45em;
|
43
43
|
padding: 0;
|
44
44
|
margin: 0 auto;
|
45
45
|
}
|
@@ -0,0 +1,56 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), "test_generator_helper.rb")
|
2
|
+
|
3
|
+
class TestFunctionalTestGenerator < 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
|
+
# Some generator-related assertions:
|
15
|
+
# assert_generated_file(name, &block) # block passed the file contents
|
16
|
+
# assert_directory_exists(name)
|
17
|
+
# assert_generated_class(name, &block)
|
18
|
+
# assert_generated_module(name, &block)
|
19
|
+
# assert_generated_test_for(name, &block)
|
20
|
+
# The assert_generated_(class|module|test_for) &block is passed the body of the class/module within the file
|
21
|
+
# assert_has_method(body, *methods) # check that the body has a list of methods (methods with parentheses not supported yet)
|
22
|
+
#
|
23
|
+
# Other helper methods are:
|
24
|
+
# app_root_files - put this in teardown to show files generated by the test method (e.g. p app_root_files)
|
25
|
+
# bare_setup - place this in setup method to create the APP_ROOT folder for each test
|
26
|
+
# bare_teardown - place this in teardown method to destroy the TMP_ROOT or APP_ROOT folder after each test
|
27
|
+
|
28
|
+
def test_generator_without_arguments
|
29
|
+
name = "library"
|
30
|
+
run_generator('functional_test', [name], sources)
|
31
|
+
assert_generated_file("test/functional/library_test.html") do |body|
|
32
|
+
expected = %Q{src="../../dist/myproject.js"}
|
33
|
+
assert_match(expected, body)
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
def test_generator_with_dist_name_argument
|
38
|
+
name = "library"
|
39
|
+
dist_name = "foobar"
|
40
|
+
run_generator('functional_test', [name, dist_name], sources)
|
41
|
+
assert_generated_file("test/functional/library_test.html") do |body|
|
42
|
+
expected = %Q{src="../../dist/foobar.js"}
|
43
|
+
assert_match(expected, body)
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
private
|
48
|
+
def sources
|
49
|
+
[RubiGen::PathSource.new(:test, File.join(File.dirname(__FILE__),"..", generator_path))
|
50
|
+
]
|
51
|
+
end
|
52
|
+
|
53
|
+
def generator_path
|
54
|
+
"javascript_test_generators"
|
55
|
+
end
|
56
|
+
end
|
@@ -1,6 +1,6 @@
|
|
1
1
|
require File.join(File.dirname(__FILE__), "test_generator_helper.rb")
|
2
2
|
|
3
|
-
class
|
3
|
+
class TestUnitTestGenerator < Test::Unit::TestCase
|
4
4
|
include RubiGen::GeneratorTestHelper
|
5
5
|
|
6
6
|
def setup
|
@@ -25,10 +25,23 @@ class TestJavascriptTestGenerator < Test::Unit::TestCase
|
|
25
25
|
# bare_setup - place this in setup method to create the APP_ROOT folder for each test
|
26
26
|
# bare_teardown - place this in teardown method to destroy the TMP_ROOT or APP_ROOT folder after each test
|
27
27
|
|
28
|
-
def
|
28
|
+
def test_generator_without_arguments
|
29
29
|
name = "library"
|
30
|
-
run_generator('
|
31
|
-
assert_generated_file("test/library_test.html")
|
30
|
+
run_generator('unit_test', [name], sources)
|
31
|
+
assert_generated_file("test/unit/library_test.html") do |body|
|
32
|
+
expected = %Q{src="../../src/library.js"}
|
33
|
+
assert_match(expected, body)
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
def test_generator_with_library
|
38
|
+
name = "default_library"
|
39
|
+
library = "library"
|
40
|
+
run_generator('unit_test', [name, library], sources)
|
41
|
+
assert_generated_file("test/unit/default_library_test.html") do |body|
|
42
|
+
expected = %Q{src="../../src/library.js"}
|
43
|
+
assert_match(expected, body)
|
44
|
+
end
|
32
45
|
end
|
33
46
|
|
34
47
|
private
|
data/website/index.html
CHANGED
@@ -8,9 +8,7 @@
|
|
8
8
|
JavaScript Project Generator
|
9
9
|
</title>
|
10
10
|
<script src="javascripts/rounded_corners_lite.inc.js" type="text/javascript"></script>
|
11
|
-
<style>
|
12
11
|
|
13
|
-
</style>
|
14
12
|
<script type="text/javascript">
|
15
13
|
window.onload = function() {
|
16
14
|
settings = {
|
@@ -146,11 +144,11 @@ here. That is, your JavaScript project comes with a generator to create new
|
|
146
144
|
test <span class="caps">HTML</span> files, ready to rock and roll.</p>
|
147
145
|
|
148
146
|
|
149
|
-
<pre>$ script/generate
|
147
|
+
<pre>$ script/generate unit_test some_lib
|
150
148
|
exists test
|
151
|
-
create test/some_lib_test.html</pre>
|
149
|
+
create test/unit/some_lib_test.html</pre>
|
152
150
|
|
153
|
-
<p>Now edit <code>test/some_lib_test.html</code> and follow the comments
|
151
|
+
<p>Now edit <code>test/unit/some_lib_test.html</code> and follow the comments
|
154
152
|
that tell you what to do to write your unit tests.</p>
|
155
153
|
|
156
154
|
|
@@ -158,9 +156,9 @@ that tell you what to do to write your unit tests.</p>
|
|
158
156
|
library as an additional parameter.</p>
|
159
157
|
|
160
158
|
|
161
|
-
<pre>$ script/generate
|
159
|
+
<pre>$ script/generate unit_test my_library_tests some_lib
|
162
160
|
exists test
|
163
|
-
create test/my_library_tests_test.html</pre>
|
161
|
+
create test/unit/my_library_tests_test.html</pre>
|
164
162
|
|
165
163
|
<h2>Running unit tests</h2>
|
166
164
|
|
@@ -378,7 +376,7 @@ and you’ll love every minute of it.</p>
|
|
378
376
|
|
379
377
|
<p>Comments are welcome. Send an email to <a href="mailto:drnicwilliams@gmail.com">Dr Nic Williams</a> via the <a href="http://groups.google.com/group/javascript-project-generator">forum</a></p>
|
380
378
|
<p class="coda">
|
381
|
-
<a href="drnicwilliams@gmail.com">Dr Nic Williams</a>,
|
379
|
+
<a href="drnicwilliams@gmail.com">Dr Nic Williams</a>, 17th February 2008<br>
|
382
380
|
Theme extended from <a href="http://rb2js.rubyforge.org/">Paul Battley</a>
|
383
381
|
</p>
|
384
382
|
</div>
|
data/website/index.txt
CHANGED
@@ -37,32 +37,34 @@ h2. Getting started
|
|
37
37
|
|
38
38
|
To kick-off your new project/library, run the command-line app <code>newjs</code>:
|
39
39
|
|
40
|
-
<pre>$ newjs mylib
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
40
|
+
<pre>$ newjs mylib -a "Dr Nic" -e "drnicwilliams@gmail.com" -u "http://mylib.rubyforge.org"
|
41
|
+
create config
|
42
|
+
create lib
|
43
|
+
create src
|
44
|
+
create script
|
45
|
+
create tasks
|
46
|
+
create test/assets
|
47
|
+
create test/assets/unittest.css
|
48
|
+
create test/assets/unittest.js
|
49
|
+
create test/assets/prototype.js
|
50
|
+
create tasks/javascript_test_autotest_tasks.rake
|
51
|
+
create tasks/environment.rake
|
52
|
+
create tasks/deploy.rake
|
53
|
+
create config/javascript_test_autotest.yml.sample
|
54
|
+
create lib/protodoc.rb
|
55
|
+
create lib/jstest.rb
|
56
|
+
create Rakefile
|
57
|
+
create README.txt
|
58
|
+
create History.txt
|
59
|
+
create License.txt
|
60
|
+
create src/HEADER
|
61
|
+
create src/mylib.js
|
62
|
+
create script/rstakeout
|
63
|
+
create script/js_autotest
|
64
|
+
dependency install_rubigen_scripts
|
65
|
+
exists script
|
66
|
+
create script/generate
|
67
|
+
create script/destroy
|
66
68
|
</pre>
|
67
69
|
|
68
70
|
Look at all that!
|
@@ -80,11 +82,13 @@ When you've got a new version to release, edit <code>Rakefile</code> and modify
|
|
80
82
|
|
81
83
|
To merge your <code>src/</code> files into a distribution file, see below.
|
82
84
|
|
83
|
-
h2.
|
85
|
+
h2. Unit testing
|
84
86
|
|
85
87
|
If you are going to have a <code>src/some_lib.js</code> file, then you'll want a unit
|
86
88
|
test file(s). By default you'd call it <code>test/some_lib_test.html</code>.
|
87
89
|
|
90
|
+
h3. Generating test HTML files
|
91
|
+
|
88
92
|
And then what? Personally, I can never remember what basic HTML + JavaScript
|
89
93
|
goes in the test HTML files. I quite like the "javascript_test plugin":http://drnicwilliams.com/2008/01/04/autotesting-javascript-in-rails/ for "Ruby
|
90
94
|
on Rails":http://www.rubyonrails.org/, which allows you to generate a
|
@@ -92,21 +96,21 @@ test HTML stub. So I've included a version of it
|
|
92
96
|
here. That is, your JavaScript project comes with a generator to create new
|
93
97
|
test HTML files, ready to rock and roll.
|
94
98
|
|
95
|
-
<pre>$ script/generate
|
96
|
-
|
97
|
-
create test/some_lib_test.html</pre>
|
99
|
+
<pre>$ script/generate unit_test some_lib
|
100
|
+
create test/unit
|
101
|
+
create test/unit/some_lib_test.html</pre>
|
98
102
|
|
99
|
-
Now edit <code>test/some_lib_test.html</code> and follow the comments
|
103
|
+
Now edit <code>test/unit/some_lib_test.html</code> and follow the comments
|
100
104
|
that tell you what to do to write your unit tests.
|
101
105
|
|
102
106
|
Want to name your test file something different? Specify the target
|
103
107
|
library as an additional parameter.
|
104
108
|
|
105
|
-
<pre>$ script/generate
|
106
|
-
exists test
|
107
|
-
create test/my_library_tests_test.html</pre>
|
109
|
+
<pre>$ script/generate unit_test my_library_tests some_lib
|
110
|
+
exists test/unit
|
111
|
+
create test/unit/my_library_tests_test.html</pre>
|
108
112
|
|
109
|
-
|
113
|
+
h3. Running unit tests
|
110
114
|
|
111
115
|
Each test HTML file should be self-executable: just open it in a target
|
112
116
|
browser. That is, to run the <code>test/some_lib_test.html</code> tests
|
@@ -116,6 +120,30 @@ It will print out a beautiful log success/error messages for each test.
|
|
116
120
|
|
117
121
|
<img src="images/example-unittest-log.jpg" width="647" height="427" alt="Example Unittest Log">
|
118
122
|
|
123
|
+
h2. Functional tests
|
124
|
+
|
125
|
+
End-to-end functional tests will test the final distribution file(s), rather than
|
126
|
+
the <code>src/</code> files.
|
127
|
+
|
128
|
+
As shown below, your <code>src/</code> files will be merged into (commonly) one
|
129
|
+
distribution file - a merging of your source files.
|
130
|
+
|
131
|
+
h3. Generating test HTML files
|
132
|
+
|
133
|
+
To create functional tests, there is another generator:
|
134
|
+
|
135
|
+
<pre>$ script/generate functional_test basic_usage
|
136
|
+
create test/functional
|
137
|
+
create test/functional/basic_usage_test.html</pre>
|
138
|
+
|
139
|
+
h3. Running functional tests
|
140
|
+
|
141
|
+
<pre>rake test_functionals</pre>
|
142
|
+
|
143
|
+
The generated HTML file uses the <code>dist/mylib.js</code> file. So, if
|
144
|
+
you are running these tests it is best to use the <code>rake test_functionals</code>
|
145
|
+
as it pre-builds the distribution files first.
|
146
|
+
|
119
147
|
h2. Distribution of library
|
120
148
|
|
121
149
|
Your project comes with the ability to concatenate all your <code>src/*.js</code>
|
data/website/template.html.erb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: newjs
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0
|
4
|
+
version: 1.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Dr Nic Williams
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2008-02-
|
12
|
+
date: 2008-02-17 00:00:00 +10:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
@@ -60,7 +60,6 @@ extra_rdoc_files:
|
|
60
60
|
- License.txt
|
61
61
|
- Manifest.txt
|
62
62
|
- README.txt
|
63
|
-
- app_generators/newjs/templates/README.txt
|
64
63
|
- newjs_generators/install_website/templates/website/index.txt
|
65
64
|
- website/index.txt
|
66
65
|
files:
|
@@ -73,7 +72,7 @@ files:
|
|
73
72
|
- app_generators/newjs/newjs_generator.rb
|
74
73
|
- app_generators/newjs/templates/History.txt.erb
|
75
74
|
- app_generators/newjs/templates/License.txt.erb
|
76
|
-
- app_generators/newjs/templates/README.txt
|
75
|
+
- app_generators/newjs/templates/README.txt.erb
|
77
76
|
- app_generators/newjs/templates/Rakefile.erb
|
78
77
|
- app_generators/newjs/templates/config/javascript_test_autotest.yml.sample
|
79
78
|
- app_generators/newjs/templates/lib/jstest.rb
|
@@ -91,9 +90,12 @@ files:
|
|
91
90
|
- bin/newjs
|
92
91
|
- config/hoe.rb
|
93
92
|
- config/requirements.rb
|
94
|
-
- javascript_test_generators/
|
95
|
-
- javascript_test_generators/
|
96
|
-
- javascript_test_generators/
|
93
|
+
- javascript_test_generators/functional_test/USAGE
|
94
|
+
- javascript_test_generators/functional_test/functional_test_generator.rb
|
95
|
+
- javascript_test_generators/functional_test/templates/test/test.html.erb
|
96
|
+
- javascript_test_generators/unit_test/USAGE
|
97
|
+
- javascript_test_generators/unit_test/templates/test/test.html.erb
|
98
|
+
- javascript_test_generators/unit_test/unit_test_generator.rb
|
97
99
|
- lib/newjs.rb
|
98
100
|
- lib/newjs/autotest.rb
|
99
101
|
- lib/newjs/autotest/javascript_test_autotest.rb
|
@@ -123,12 +125,13 @@ files:
|
|
123
125
|
- tasks/deployment.rake
|
124
126
|
- tasks/environment.rake
|
125
127
|
- tasks/website.rake
|
128
|
+
- test/test_functional_test_generator.rb
|
126
129
|
- test/test_generator_helper.rb
|
127
130
|
- test/test_helper.rb
|
128
131
|
- test/test_install_website_generator.rb
|
129
|
-
- test/test_javascript_test_generator.rb
|
130
132
|
- test/test_newjs_generator.rb
|
131
133
|
- test/test_plain_theme_generator.rb
|
134
|
+
- test/test_unit_test_generator.rb
|
132
135
|
- website/images/example-unittest-log.jpg
|
133
136
|
- website/index.html
|
134
137
|
- website/index.txt
|
@@ -163,9 +166,10 @@ signing_key:
|
|
163
166
|
specification_version: 2
|
164
167
|
summary: "Description: The +newjs+ command creates a new JavaScript project/application with a default directory structure and configuration at the path you specify."
|
165
168
|
test_files:
|
169
|
+
- test/test_functional_test_generator.rb
|
166
170
|
- test/test_generator_helper.rb
|
167
171
|
- test/test_helper.rb
|
168
172
|
- test/test_install_website_generator.rb
|
169
|
-
- test/test_javascript_test_generator.rb
|
170
173
|
- test/test_newjs_generator.rb
|
171
174
|
- test/test_plain_theme_generator.rb
|
175
|
+
- test/test_unit_test_generator.rb
|
@@ -1 +0,0 @@
|
|
1
|
-
README
|