Add some test case
This commit is contained in:
parent
d3e6240d3a
commit
4ec52d887b
|
@ -0,0 +1,7 @@
|
||||||
|
source 'https://rubygems.org'
|
||||||
|
|
||||||
|
gemspec
|
||||||
|
# For test OCR
|
||||||
|
gem 'rtesseract'
|
||||||
|
gem 'mini_magick'
|
||||||
|
gem 'active_support'
|
|
@ -0,0 +1,44 @@
|
||||||
|
PATH
|
||||||
|
remote: .
|
||||||
|
specs:
|
||||||
|
rucaptcha (0.1.3)
|
||||||
|
posix-spawn (>= 0.3.0)
|
||||||
|
|
||||||
|
GEM
|
||||||
|
remote: https://rubygems.org/
|
||||||
|
specs:
|
||||||
|
diff-lcs (1.2.5)
|
||||||
|
mini_magick (4.3.6)
|
||||||
|
mini_portile (0.6.2)
|
||||||
|
nokogiri (1.6.6.2)
|
||||||
|
mini_portile (~> 0.6.0)
|
||||||
|
posix-spawn (0.3.11)
|
||||||
|
rake (10.4.2)
|
||||||
|
rspec (3.3.0)
|
||||||
|
rspec-core (~> 3.3.0)
|
||||||
|
rspec-expectations (~> 3.3.0)
|
||||||
|
rspec-mocks (~> 3.3.0)
|
||||||
|
rspec-core (3.3.2)
|
||||||
|
rspec-support (~> 3.3.0)
|
||||||
|
rspec-expectations (3.3.1)
|
||||||
|
diff-lcs (>= 1.2.0, < 2.0)
|
||||||
|
rspec-support (~> 3.3.0)
|
||||||
|
rspec-mocks (3.3.2)
|
||||||
|
diff-lcs (>= 1.2.0, < 2.0)
|
||||||
|
rspec-support (~> 3.3.0)
|
||||||
|
rspec-support (3.3.0)
|
||||||
|
rtesseract (1.3.1)
|
||||||
|
nokogiri
|
||||||
|
|
||||||
|
PLATFORMS
|
||||||
|
ruby
|
||||||
|
|
||||||
|
DEPENDENCIES
|
||||||
|
mini_magick
|
||||||
|
rake
|
||||||
|
rspec (>= 3.3.0)
|
||||||
|
rtesseract
|
||||||
|
rucaptcha!
|
||||||
|
|
||||||
|
BUNDLED WITH
|
||||||
|
1.10.6
|
|
@ -1,4 +1,6 @@
|
||||||
require 'active_support/core_ext'
|
require 'rails'
|
||||||
|
require 'action_controller'
|
||||||
|
require 'active_support/all'
|
||||||
require_relative 'rucaptcha/version'
|
require_relative 'rucaptcha/version'
|
||||||
require_relative 'rucaptcha/configuration'
|
require_relative 'rucaptcha/configuration'
|
||||||
require_relative 'rucaptcha/controller_helpers'
|
require_relative 'rucaptcha/controller_helpers'
|
||||||
|
|
|
@ -13,7 +13,7 @@ module RuCaptcha
|
||||||
|
|
||||||
def random_rucaptcha_chars
|
def random_rucaptcha_chars
|
||||||
chars = SecureRandom.hex(RuCaptcha.config.len / 2).downcase
|
chars = SecureRandom.hex(RuCaptcha.config.len / 2).downcase
|
||||||
chars.gsub!(/[0ol1]/i, (rand(9) + 1).to_s)
|
chars.gsub!(/[0ol1]/i, (rand(8) + 2).to_s)
|
||||||
chars
|
chars
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,12 @@
|
||||||
|
require 'spec_helper'
|
||||||
|
|
||||||
|
describe RuCaptcha do
|
||||||
|
describe 'normal' do
|
||||||
|
it 'should read right config with spec_helper set' do
|
||||||
|
expect(RuCaptcha.config.len).to eq(2)
|
||||||
|
expect(RuCaptcha.config.width).to eq(123)
|
||||||
|
expect(RuCaptcha.config.height).to eq(33)
|
||||||
|
expect(RuCaptcha.config.implode).to eq(0.111)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
|
@ -0,0 +1,59 @@
|
||||||
|
require 'spec_helper'
|
||||||
|
|
||||||
|
describe RuCaptcha do
|
||||||
|
class Simple < ActionController::Base
|
||||||
|
def session
|
||||||
|
@session ||= {}
|
||||||
|
end
|
||||||
|
|
||||||
|
def params
|
||||||
|
@params ||= {}
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
let(:simple) { Simple.new }
|
||||||
|
|
||||||
|
describe '.generate_rucaptcha' do
|
||||||
|
it 'should work' do
|
||||||
|
expect(simple).to receive(:random_rucaptcha_chars).and_return('abcd')
|
||||||
|
expect(simple.generate_rucaptcha).not_to be_nil
|
||||||
|
expect(simple.session[:_rucaptcha]).to eq('abcd')
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
describe '.random_rucaptcha_chars' do
|
||||||
|
it 'should len equal config.len' do
|
||||||
|
expect(simple.random_rucaptcha_chars.length).to eq(RuCaptcha.config.len)
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'should return 0-9 and lower str' do
|
||||||
|
expect(simple.random_rucaptcha_chars).to match(/[a-z0-9]/)
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'should not include [0ol1]' do
|
||||||
|
10000.times do
|
||||||
|
expect(simple.random_rucaptcha_chars).not_to match(/[0ol1]/i)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
describe '.verify_rucaptcha?' do
|
||||||
|
context 'Correct chars in params' do
|
||||||
|
it 'should work' do
|
||||||
|
simple.session[:_rucaptcha] = 'abcd'
|
||||||
|
simple.params[:_rucaptcha] = 'Abcd'
|
||||||
|
expect(simple.verify_rucaptcha?).to eq(true)
|
||||||
|
simple.params[:_rucaptcha] = 'AbcD'
|
||||||
|
expect(simple.verify_rucaptcha?).to eq(true)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
describe 'Incorrect chars' do
|
||||||
|
it "should work" do
|
||||||
|
simple.session[:_rucaptcha] = 'abcd'
|
||||||
|
simple.params[:_rucaptcha] = 'd123'
|
||||||
|
expect(simple.verify_rucaptcha?).to eq(false)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
|
@ -0,0 +1,34 @@
|
||||||
|
require 'spec_helper'
|
||||||
|
|
||||||
|
describe 'OCR' do
|
||||||
|
before do
|
||||||
|
@samples = []
|
||||||
|
10.times do
|
||||||
|
@samples << SecureRandom.hex(2)
|
||||||
|
end
|
||||||
|
@filenames = []
|
||||||
|
@samples.each do |chars|
|
||||||
|
fname = File.join(File.dirname(__FILE__), "..", "tmp", "#{chars}.png")
|
||||||
|
img = RuCaptcha::Captcha.create(chars)
|
||||||
|
File.open(fname, 'w+') do |f|
|
||||||
|
f.puts img
|
||||||
|
end
|
||||||
|
@filenames << fname
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
after do
|
||||||
|
`rm #{File.join(File.dirname(__FILE__), '../tmp/*.png')}`
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'should not read by OCR lib' do
|
||||||
|
results = []
|
||||||
|
@samples.each do |chars|
|
||||||
|
str = RTesseract.new(File.join(File.dirname(__FILE__), "..", "tmp", "#{chars}.png")).to_s
|
||||||
|
results << "- Chars: #{chars}, OCR read #{str.strip}"
|
||||||
|
expect(chars).not_to eq(str)
|
||||||
|
end
|
||||||
|
|
||||||
|
puts %(------------------------\nOCR all results: \n#{results.join("\n")})
|
||||||
|
end
|
||||||
|
end
|
|
@ -0,0 +1,14 @@
|
||||||
|
require 'rubygems'
|
||||||
|
|
||||||
|
$LOAD_PATH.unshift(File.dirname(__FILE__))
|
||||||
|
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
||||||
|
|
||||||
|
require 'rucaptcha'
|
||||||
|
require 'rtesseract'
|
||||||
|
|
||||||
|
RuCaptcha.configure do
|
||||||
|
self.len = 2
|
||||||
|
self.width = 123
|
||||||
|
self.height = 33
|
||||||
|
self.implode = 0.111
|
||||||
|
end
|
Loading…
Reference in New Issue