Skip to content

Commit

Permalink
refactoring tests to use nginx_test_helper and rspec gems
Browse files Browse the repository at this point in the history
  • Loading branch information
wandenberg committed Feb 15, 2013
1 parent 67935a7 commit 029daba
Show file tree
Hide file tree
Showing 61 changed files with 6,451 additions and 9,081 deletions.
46 changes: 12 additions & 34 deletions docs/server_tests.textile
Expand Up @@ -3,49 +3,27 @@ h1(#tests). Tests <a name="tests" href="#">&nbsp;</a>
The tests for this module are written in Ruby, and are acceptance tests. The tests for this module are written in Ruby, and are acceptance tests.
To run them is needed to have an environment with: To run them is needed to have an environment with:


* Basic requirements * ruby >= 1.9.3
** ruby >= 1.8.7 * bundler >= 1.1.4
** rubygems >= 1.6.2
** rake >= 0.8.7
* Required gems
** POpen4 >= 0.1.4
** em-http-request >= 0.2.14
** json >= 1.4.3
** ruby-debug >= 0.10.4
** jasmine >= 1.0.2.1
** nokogiri >= 1.5.0
** jshint >= 0.1.1

You can install these gems with bundler (bundler is required to be installed before, _gem install bundler_)


<pre> and install required gems doing:
cd test/
bundle install --without docs
</pre>

or individually


<pre> <pre>
gem install POpen4 -v 0.1.4 cd misc/
gem install em-http-request -v 0.2.14 bundle install --without docs
gem install json -v 1.4.3
gem install ruby-debug -v 0.10.4
gem install jasmine -v 1.0.2.1
gem install nokogiri -v 1.5.0
gem install jshint -v 0.1.1
</pre> </pre>


Then issue @rake tests@. Then issue @rake spec@.
This command run the tests using nginx *executable* located at _/usr/local/nginx/sbin/nginx_ with _1_ *worker* responding at *host* _localhost_ and *port* _9990_. This command run the tests using nginx *executable* located at _/usr/local/nginx/sbin/nginx_ with _1_ *worker* responding at *host* _127.0.0.1_ and *port* _9990_.
To change this behavior use the commands bellow To change this behavior use the commands bellow


<pre> <pre>
rake tests executable="../build/nginx-1.1.15/objs/nginx" # to change default path for nginx executable NGINX_EXEC="../build/nginx-1.1.15/objs/nginx" rake spec # to change default path for nginx executable
rake tests host=my_machine # to change default hostname NGINX_HOST="my_machine" rake spec # to change default hostname
rake tests port=9889 # to change default port NGINX_PORT=9889 rake spec # to change default port
rake tests workers=2 # to change dafault number of workers used NGINX_WORKERS=2 rake spec # to change dafault number of workers used


and can combine any of these parameters, like: and can combine any of these parameters, like:


rake tests port=9889 executable="../build/nginx-1.1.15/objs/nginx" NGINX_PORT=9889 NGINX_EXEC="../build/nginx-1.1.15/objs/nginx" rake spec
</pre> </pre>
1 change: 1 addition & 0 deletions misc/.rvmrc
@@ -0,0 +1 @@
rvm ruby-1.9.3-p194@nginx-push-stream-module --create
23 changes: 23 additions & 0 deletions misc/Gemfile
@@ -0,0 +1,23 @@
source "https://rubygems.org"

gem 'rake', '~> 10.0.3'

group :test do
gem 'rspec', '~> 2.12.0'
gem 'em-http-request', '~> 1.0.3'
gem 'nginx_test_helper', '~> 0.0.1'
gem 'jshintrb', '~> 0.2.1'
gem 'therubyracer', '~> 0.11.3'
gem 'jasmine', '~> 1.3.1'
gem 'listen', '~> 0.7.2'
gem 'rb-inotify', '~> 0.8.8'
gem 'json', '~> 1.7.6'

gem 'debugger', '~> 1.3.1'
end

group :docs do
gem 'github-markup', '~> 0.7.5', :require => 'github/markup'
gem 'RedCloth', '~> 4.2.9'
gem 'nokogiri', '~> 1.5.6'
end
95 changes: 95 additions & 0 deletions misc/Gemfile.lock
@@ -0,0 +1,95 @@
GEM
remote: https://rubygems.org/
specs:
Platform (0.4.0)
RedCloth (4.2.9)
addressable (2.3.2)
childprocess (0.3.8)
ffi (~> 1.0, >= 1.0.11)
columnize (0.3.6)
cookiejar (0.3.0)
debugger (1.3.1)
columnize (>= 0.3.1)
debugger-linecache (~> 1.1.1)
debugger-ruby_core_source (~> 1.1.8)
debugger-linecache (1.1.2)
debugger-ruby_core_source (>= 1.1.1)
debugger-ruby_core_source (1.1.8)
diff-lcs (1.1.3)
em-http-request (1.0.3)
addressable (>= 2.2.3)
cookiejar
em-socksify
eventmachine (>= 1.0.0.beta.4)
http_parser.rb (>= 0.5.3)
em-socksify (0.2.1)
eventmachine (>= 1.0.0.beta.4)
eventmachine (1.0.0)
execjs (1.4.0)
multi_json (~> 1.0)
ffi (1.3.1)
github-markup (0.7.5)
http_parser.rb (0.5.3)
jasmine (1.3.1)
jasmine-core (~> 1.3.1)
rack (~> 1.0)
rspec (>= 1.3.1)
selenium-webdriver (>= 0.1.3)
jasmine-core (1.3.1)
jshintrb (0.2.1)
execjs
multi_json (>= 1.3)
rake
json (1.7.6)
libv8 (3.11.8.13)
listen (0.7.2)
multi_json (1.5.0)
nginx_test_helper (0.0.1)
popen4
nokogiri (1.5.6)
open4 (1.3.0)
popen4 (0.1.2)
Platform (>= 0.4.0)
open4 (>= 0.4.0)
rack (1.5.2)
rake (10.0.3)
rb-inotify (0.8.8)
ffi (>= 0.5.0)
ref (1.0.2)
rspec (2.12.0)
rspec-core (~> 2.12.0)
rspec-expectations (~> 2.12.0)
rspec-mocks (~> 2.12.0)
rspec-core (2.12.2)
rspec-expectations (2.12.1)
diff-lcs (~> 1.1.3)
rspec-mocks (2.12.2)
rubyzip (0.9.9)
selenium-webdriver (2.29.0)
childprocess (>= 0.2.5)
multi_json (~> 1.0)
rubyzip
websocket (~> 1.0.4)
therubyracer (0.11.3)
libv8 (~> 3.11.8.12)
ref
websocket (1.0.7)

PLATFORMS
ruby

DEPENDENCIES
RedCloth (~> 4.2.9)
debugger (~> 1.3.1)
em-http-request (~> 1.0.3)
github-markup (~> 0.7.5)
jasmine (~> 1.3.1)
jshintrb (~> 0.2.1)
json (~> 1.7.6)
listen (~> 0.7.2)
nginx_test_helper (~> 0.0.1)
nokogiri (~> 1.5.6)
rake (~> 10.0.3)
rb-inotify (~> 0.8.8)
rspec (~> 2.12.0)
therubyracer (~> 0.11.3)
208 changes: 208 additions & 0 deletions misc/Rakefile
@@ -0,0 +1,208 @@
project_dir = File.expand_path('..', File.dirname(__FILE__))
javascript_dir = File.expand_path(Dir["#{project_dir}/**/js"].first)

require 'rubygems'

# Set up gems listed in the Gemfile.
ENV['BUNDLE_GEMFILE'] ||= File.expand_path('./Gemfile', File.dirname(__FILE__))
require 'bundler/setup' if File.exists?(ENV['BUNDLE_GEMFILE'])
Bundler.require(:default, :test) if defined?(Bundler)

begin
require "rspec/core/rake_task"

desc "Run all examples"
RSpec::Core::RakeTask.new(:spec) do |t|
t.rspec_opts = %w[--color --debug]
t.pattern = '**/*_spec.rb'
end
rescue LoadError
task :spec do
abort "RSpec is not available. In order to run rspec, you must: (sudo) gem install rspec"
end
end

begin
load 'jasmine/tasks/jasmine.rake'

task "jasmine:require" => ["jshint", "configure_jasmine", "monitor_js"]

task :configure_jasmine do
Jasmine.configure do |config|
config.spec_dir = project_dir
config.spec_files = lambda { Dir["#{project_dir}/misc/spec/javascripts/helpers/**/*.js"] + Dir["#{project_dir}/misc/**/*[sS]pec.js"] }
js_tmp_dir = File.expand_path('pushstream/js', Dir.tmpdir)
config.src_dir = js_tmp_dir
config.src_files = lambda { Dir["#{js_tmp_dir}/**/*.js"] }
end
end

task :monitor_js do
copy_inner_js = Proc.new do |modified, added, removed|
modified.each do |file|
destiny_path = File.dirname(file).gsub(/.*\/js\/?/, File.expand_path('pushstream/js', Dir.tmpdir))
FileUtils.mkdir_p(destiny_path)
content = File.read file
content.gsub!('(function (window, document, undefined) {', '')
content.gsub!('if (window.PushStream) { return; }', '')
content.gsub!('})(window, document);', '')
File.open(File.join(destiny_path, File.basename(file)), 'w') {|f| f.write content }
end
end

copy_inner_js.call([[File.expand_path('misc/js/pushstream.js', project_dir)], [], []])
listener = Listen.to(File.expand_path('misc/js', project_dir), :filter => /\.js$/)
listener.change(&copy_inner_js)
listener.start(false)
end
rescue LoadError
desc "Run javascript tests"
task :jasmine do
abort "Jasmine is not available. In order to run jasmine, you must: (sudo) gem install jasmine"
end
end

begin
require "jshintrb/jshinttask"
Jshintrb::JshintTask.new :jshint do |t|
t.pattern = "#{javascript_dir}/pushstream.js"
t.options = :defaults
end
rescue LoadError
desc "Run jshint on js"
task :jshint do
abort "Jshintrb is not available. In order to run jshint, you must: (sudo) gem install jshintrb"
end
end

namespace :docs do

begin
Bundler.require(:default, :docs) if defined?(Bundler)

task :get_static_files do
base_path = File.expand_path('pushstream/docs/preview', Dir.tmpdir)
FileUtils.mkdir_p("#{base_path}/css")

download_file("https://a248.e.akamai.net/assets.github.com/assets/github-00f65189aa131d891441bde58bf26d999ab4d29c.css", "#{base_path}/css/github.css") unless File.exists?("#{base_path}/css/github.css")
download_file("https://a248.e.akamai.net/assets.github.com/assets/github2-90ff47ca514fab587fdf9f40626c56af77a8fa6b.css", "#{base_path}/css/github2.css") unless File.exists?("#{base_path}/css/github2.css")
end

desc "Generates docs files to preview."
task :generate => :get_static_files do
require 'erb'
template = ERB.new File.read("#{project_dir}/misc/github_template.html.erb")
base_path = File.expand_path('pushstream/docs/preview', Dir.tmpdir)

Dir.glob("#{project_dir}/**/*.textile").each do |file|
filename = File.basename(file)
content = GitHub::Markup.render(file, File.read(file))
rendered = template.result(binding)
output = file.gsub(project_dir, File.expand_path('pushstream/docs/preview', Dir.tmpdir)).gsub(".textile", ".html")
output_dir = File.dirname(output)
FileUtils.mkdir_p(output_dir)
File.open(output, 'w') {|f| f.write(rendered) }
puts "Preview rendered to #{output}"
end
end

desc "Convert docs to Nginx wiki format."
task :convert_to_wiki do
Dir.glob("#{project_dir}/**/*.textile").each do |file|
filename = File.basename(file)
content = File.read(file)

output = file.gsub(project_dir, File.expand_path('pushstream/docs/html', Dir.tmpdir)).gsub(".textile", ".html")
output_wiki = file.gsub(project_dir, File.expand_path('pushstream/docs/wiki', Dir.tmpdir)).gsub(".textile", ".wiki")
FileUtils.mkdir_p(File.dirname(output))
FileUtils.mkdir_p(File.dirname(output_wiki))

File.open(output, 'w') {|f| f.write(RedCloth.new(content).to_html) }
File.open(output_wiki, 'w') {|f| f.write(convert_to_wiki_syntax(content)) }
puts "Wiki converted to #{output_wiki}"
end
end
rescue LoadError
desc "Generates docs files to preview."
task :generate do
abort "github-markup is not available. In order to run docs:generate, you must: (sudo) gem install github-markup"
end

desc "Convert docs to Nginx wiki format."
task :convert_to_wiki do
abort "RedCloth or nokogiri is not available. In order to run docs:convert_to_wiki, you must: (sudo) gem install RedCloth nokogiri"
end
end

def download_file(url, output_file)
EventMachine.run do
http = EventMachine::HttpRequest.new(url).get
http.errback { EM.stop }
http.callback do
File.open(output_file, "w") { |f| f.write(http.response) } if (http.response_header.status == 200)
EM.stop
end
end
end

def convert_to_wiki_syntax(text)
doc = Nokogiri::HTML(RedCloth.new(text).to_html)
convert_elements(doc.children.to_a)
end

def convert_elements(nodes)
result = ""
nodes.each do |node|
if node.element? && !node.text?
childrens = node.children.to_a
unless childrens.empty?
result += convert_element(convert_elements(childrens), node)
end
elsif node.text?
result += node.text
end
end
result
end

def convert_element(text, node)
tag = node.name
text ||= ""
case tag
when "strong"
"'''#{text}'''"
when "b"
"'''#{text}'''"
when "em"
"''#{text}''"
when "h1"
"\n= #{text} ="
when "h2"
"\n== #{text} =="
when "h3"
"\n=== #{text} ==="
when "h4"
"\n==== #{text} ===="
when "h5"
"\n===== #{text} ====="
when "h6"
"\n====== #{text} ======"
when "p"
"\n#{text}"
when "a"
if node.attributes['href'].value.start_with?("#")
"[[#{node.attributes['href'].value}|#{text}]]"
else
"[#{node.attributes['href'].value} #{text}]"
end
when "html"
text
when "body"
text
when "span"
text
else
"<#{tag}>#{text}</#{tag}>"
end
end
end

0 comments on commit 029daba

Please sign in to comment.