Skip to content

Commit

Permalink
Merge branch 'master' into 0.8.x
Browse files Browse the repository at this point in the history
  • Loading branch information
jodosha committed Jul 19, 2016
2 parents 77316ab + 8913b12 commit 00a7ade
Show file tree
Hide file tree
Showing 9 changed files with 187 additions and 129 deletions.
2 changes: 1 addition & 1 deletion .travis.yml
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
language: ruby
sudo: false
cache: bundler
script: 'bundle exec rake test:coverage --trace && bundle exec rubocop --display-cop-names'
script: 'script/ci && bundle exec rubocop --display-cop-names'
rvm:
- 2.2.5
- 2.3.1
Expand Down
11 changes: 8 additions & 3 deletions Gemfile
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,11 @@ unless ENV['TRAVIS']
gem 'yard', require: false
end

gem 'multi_json', '~> 1.0', require: false
gem 'rubocop', '~> 0.41', require: false
gem 'coveralls', require: false
group :multi_json do
gem 'multi_json', '~> 1.0', require: false
end

gem 'minitest', '~> 5.9'
gem 'gson', '>= 0.6', require: false, platforms: :jruby
gem 'rubocop', '~> 0.41', require: false
gem 'coveralls', require: false
5 changes: 4 additions & 1 deletion Rakefile
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,10 @@ require 'rake/testtask'
require 'bundler/gem_tasks'

Rake::TestTask.new do |t|
t.pattern = 'test/**/*_test.rb'
t.test_files = Dir['test/**/*_test.rb'].reject do |path|
path.include?('isolation')
end

t.libs.push 'test'
end

Expand Down
5 changes: 2 additions & 3 deletions hanami-utils.gemspec
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,6 @@ Gem::Specification.new do |spec|
spec.require_paths = ['lib']
spec.required_ruby_version = '>= 2.2.0'

spec.add_development_dependency 'bundler', '~> 1.6'
spec.add_development_dependency 'rake', '~> 11'
spec.add_development_dependency 'minitest', '~> 5.4'
spec.add_development_dependency 'bundler', '~> 1.6'
spec.add_development_dependency 'rake', '~> 11'
end
42 changes: 42 additions & 0 deletions script/ci
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
#!/bin/bash
set -euo pipefail
IFS=$'\n\t'

run_code_quality_checks() {
bundle exec rubocop --display-cop-names
}

run_unit_tests() {
bundle exec rake test:coverage
}

run_integration_tests() {
local pwd=$PWD
local root="$pwd/test/isolation"

for test in $(find $root -name '*_test.rb')
do
run_test $test

if [ $? -ne 0 ]; then
local exit_code=$?
echo "Failing test: $test"
exit $exit_code
fi
done
}

run_test() {
local test=$1

printf "\n\n\nRunning: $test\n"
ruby -Itest $test
}

main() {
run_code_quality_checks &&
run_unit_tests &&
run_integration_tests
}

main
35 changes: 35 additions & 0 deletions test/isolation/json/json_test.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
require 'rubygems'
require 'bundler'
Bundler.require(:default)

require 'minitest'
require 'minitest/autorun'
$LOAD_PATH.unshift 'lib'
require 'json'
require 'hanami/utils/json'

describe Hanami::Utils::Json do
describe 'with JSON' do
it 'uses JSON engine' do
Hanami::Utils::Json.class_variable_get(:@@engine).must_equal(JSON)
end

describe '.load' do
it 'loads given payload' do
actual = Hanami::Utils::Json.load %({"a":1})
actual.must_equal('a' => 1)
end

it 'raises error if given payload is malformed' do
-> { Hanami::Utils::Json.load %({"a:1}) }.must_raise(Hanami::Utils::Json::ParserError)
end
end

describe '.dump' do
it 'dumps given Hash' do
actual = Hanami::Utils::Json.dump(a: 1)
actual.must_equal %({"a":1})
end
end
end
end
35 changes: 35 additions & 0 deletions test/isolation/json/multi_json_test.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
require 'rubygems'
require 'bundler'
Bundler.require(:default, :multi_json)

require 'minitest/autorun'
$LOAD_PATH.unshift 'lib'
require 'hanami/utils'
require 'gson' if Hanami::Utils.jruby?
require 'hanami/utils/json'

describe Hanami::Utils::Json do
describe 'with MultiJson' do
it 'uses MultiJson engine' do
Hanami::Utils::Json.class_variable_get(:@@engine).must_equal(MultiJson)
end

describe '.load' do
it 'loads given payload' do
actual = Hanami::Utils::Json.load %({"a":1})
actual.must_equal('a' => 1)
end

it 'raises error if given payload is malformed' do
-> { Hanami::Utils::Json.load %({"a:1}) }.must_raise(Hanami::Utils::Json::ParserError)
end
end

describe '.dump' do
it 'dumps given Hash' do
actual = Hanami::Utils::Json.dump(a: 1)
actual.must_equal %({"a":1})
end
end
end
end
81 changes: 0 additions & 81 deletions test/json_test.rb

This file was deleted.

100 changes: 60 additions & 40 deletions test/logger_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -318,58 +318,78 @@ class TestLogger < Hanami::Logger; end
end

describe 'with JSON formatter' do
it 'when passed as a symbol, it has JSON format for string messages' do
stub_time_now do
output =
stub_stdout_constant do
class TestLogger < Hanami::Logger; end
TestLogger.new(formatter: :json).info('foo')
end
output.must_equal '{"app":"Hanami","severity":"INFO","time":"1988-09-01 00:00:00 UTC","message":"foo"}'
if Hanami::Utils.jruby?
it 'when passed as a symbol, it has JSON format for string messages'
else
it 'when passed as a symbol, it has JSON format for string messages' do
stub_time_now do
output =
stub_stdout_constant do
class TestLogger < Hanami::Logger; end
TestLogger.new(formatter: :json).info('foo')
end
output.must_equal '{"app":"Hanami","severity":"INFO","time":"1988-09-01 00:00:00 UTC","message":"foo"}'
end
end
end

it 'has JSON format for string messages' do
stub_time_now do
output =
stub_stdout_constant do
class TestLogger < Hanami::Logger; end
TestLogger.new(formatter: Hanami::Logger::JSONFormatter.new).info('foo')
end
output.must_equal '{"app":"Hanami","severity":"INFO","time":"1988-09-01 00:00:00 UTC","message":"foo"}'
if Hanami::Utils.jruby?
it 'has JSON format for string messages'
else
it 'has JSON format for string messages' do
stub_time_now do
output =
stub_stdout_constant do
class TestLogger < Hanami::Logger; end
TestLogger.new(formatter: Hanami::Logger::JSONFormatter.new).info('foo')
end
output.must_equal '{"app":"Hanami","severity":"INFO","time":"1988-09-01 00:00:00 UTC","message":"foo"}'
end
end
end

it 'has JSON format for error messages' do
stub_time_now do
output =
stub_stdout_constant do
class TestLogger < Hanami::Logger; end
TestLogger.new(formatter: Hanami::Logger::JSONFormatter.new).error(Exception.new('foo'))
end
output.must_equal '{"app":"Hanami","severity":"ERROR","time":"1988-09-01 00:00:00 UTC","message":"foo","backtrace":[],"error":"Exception"}'
if Hanami::Utils.jruby?
it 'has JSON format for error messages'
else
it 'has JSON format for error messages' do
stub_time_now do
output =
stub_stdout_constant do
class TestLogger < Hanami::Logger; end
TestLogger.new(formatter: Hanami::Logger::JSONFormatter.new).error(Exception.new('foo'))
end
output.must_equal '{"app":"Hanami","severity":"ERROR","time":"1988-09-01 00:00:00 UTC","message":"foo","backtrace":[],"error":"Exception"}'
end
end
end

it 'has JSON format for hash messages' do
stub_time_now do
output =
stub_stdout_constant do
class TestLogger < Hanami::Logger; end
TestLogger.new(formatter: Hanami::Logger::JSONFormatter.new).info(foo: :bar)
end
output.must_equal '{"app":"Hanami","severity":"INFO","time":"1988-09-01 00:00:00 UTC","foo":"bar"}'
if Hanami::Utils.jruby?
it 'has JSON format for hash messages'
else
it 'has JSON format for hash messages' do
stub_time_now do
output =
stub_stdout_constant do
class TestLogger < Hanami::Logger; end
TestLogger.new(formatter: Hanami::Logger::JSONFormatter.new).info(foo: :bar)
end
output.must_equal '{"app":"Hanami","severity":"INFO","time":"1988-09-01 00:00:00 UTC","foo":"bar"}'
end
end
end

it 'has JSON format for not string messages' do
stub_time_now do
output =
stub_stdout_constant do
class TestLogger < Hanami::Logger; end
TestLogger.new(formatter: Hanami::Logger::JSONFormatter.new).info(['foo'])
end
output.must_equal '{"app":"Hanami","severity":"INFO","time":"1988-09-01 00:00:00 UTC","message":["foo"]}'
if Hanami::Utils.jruby?
it 'has JSON format for not string messages'
else
it 'has JSON format for not string messages' do
stub_time_now do
output =
stub_stdout_constant do
class TestLogger < Hanami::Logger; end
TestLogger.new(formatter: Hanami::Logger::JSONFormatter.new).info(['foo'])
end
output.must_equal '{"app":"Hanami","severity":"INFO","time":"1988-09-01 00:00:00 UTC","message":["foo"]}'
end
end
end
end
Expand Down

0 comments on commit 00a7ade

Please sign in to comment.