mirror of
https://github.com/rails/rails.git
synced 2022-11-09 12:12:34 -05:00
82e345dd7a
Ignore block comments and calculates number of functions.
288 lines
6.7 KiB
Ruby
288 lines
6.7 KiB
Ruby
require 'abstract_unit'
|
|
require 'rails/code_statistics_calculator'
|
|
|
|
class CodeStatisticsCalculatorTest < ActiveSupport::TestCase
|
|
def setup
|
|
@code_statistics_calculator = CodeStatisticsCalculator.new
|
|
end
|
|
|
|
test 'add statistics to another using #add' do
|
|
code_statistics_calculator_1 = CodeStatisticsCalculator.new(1, 2, 3, 4)
|
|
@code_statistics_calculator.add(code_statistics_calculator_1)
|
|
|
|
assert_equal 1, @code_statistics_calculator.lines
|
|
assert_equal 2, @code_statistics_calculator.code_lines
|
|
assert_equal 3, @code_statistics_calculator.classes
|
|
assert_equal 4, @code_statistics_calculator.methods
|
|
|
|
code_statistics_calculator_2 = CodeStatisticsCalculator.new(2, 3, 4, 5)
|
|
@code_statistics_calculator.add(code_statistics_calculator_2)
|
|
|
|
assert_equal 3, @code_statistics_calculator.lines
|
|
assert_equal 5, @code_statistics_calculator.code_lines
|
|
assert_equal 7, @code_statistics_calculator.classes
|
|
assert_equal 9, @code_statistics_calculator.methods
|
|
end
|
|
|
|
test 'accumulate statistics using #add_by_io' do
|
|
code_statistics_calculator_1 = CodeStatisticsCalculator.new(1, 2, 3, 4)
|
|
@code_statistics_calculator.add(code_statistics_calculator_1)
|
|
|
|
code = <<-'CODE'
|
|
def foo
|
|
puts 'foo'
|
|
end
|
|
|
|
def bar; end
|
|
class A; end
|
|
CODE
|
|
|
|
@code_statistics_calculator.add_by_io(StringIO.new(code), :rb)
|
|
|
|
assert_equal 7, @code_statistics_calculator.lines
|
|
assert_equal 7, @code_statistics_calculator.code_lines
|
|
assert_equal 4, @code_statistics_calculator.classes
|
|
assert_equal 6, @code_statistics_calculator.methods
|
|
end
|
|
|
|
test 'calculate statistics using #add_by_file_path' do
|
|
tmp_path = File.expand_path(File.join(File.dirname(__FILE__), 'fixtures', 'tmp'))
|
|
FileUtils.mkdir_p(tmp_path)
|
|
|
|
code = <<-'CODE'
|
|
def foo
|
|
puts 'foo'
|
|
# bar
|
|
end
|
|
CODE
|
|
|
|
file_path = "#{tmp_path}/stats.rb"
|
|
File.open(file_path, 'w') { |f| f.write(code) }
|
|
|
|
@code_statistics_calculator.add_by_file_path(file_path)
|
|
|
|
assert_equal 4, @code_statistics_calculator.lines
|
|
assert_equal 3, @code_statistics_calculator.code_lines
|
|
assert_equal 0, @code_statistics_calculator.classes
|
|
assert_equal 1, @code_statistics_calculator.methods
|
|
|
|
FileUtils.rm_rf(tmp_path)
|
|
end
|
|
|
|
test 'calculate number of Ruby methods' do
|
|
code = <<-'CODE'
|
|
def foo
|
|
puts 'foo'
|
|
end
|
|
|
|
def bar; end
|
|
|
|
class Foo
|
|
def bar(abc)
|
|
end
|
|
end
|
|
CODE
|
|
|
|
@code_statistics_calculator.add_by_io(StringIO.new(code), :rb)
|
|
|
|
assert_equal 3, @code_statistics_calculator.methods
|
|
end
|
|
|
|
test 'calculate Ruby LOCs' do
|
|
code = <<-'CODE'
|
|
def foo
|
|
puts 'foo'
|
|
end
|
|
|
|
# def bar; end
|
|
|
|
class A < B
|
|
end
|
|
CODE
|
|
|
|
@code_statistics_calculator.add_by_io(StringIO.new(code), :rb)
|
|
|
|
assert_equal 8, @code_statistics_calculator.lines
|
|
assert_equal 5, @code_statistics_calculator.code_lines
|
|
end
|
|
|
|
test 'calculate number of Ruby classes' do
|
|
code = <<-'CODE'
|
|
class Foo < Bar
|
|
def foo
|
|
puts 'foo'
|
|
end
|
|
end
|
|
|
|
class Z; end
|
|
|
|
# class A
|
|
# end
|
|
CODE
|
|
|
|
@code_statistics_calculator.add_by_io(StringIO.new(code), :rb)
|
|
|
|
assert_equal 2, @code_statistics_calculator.classes
|
|
end
|
|
|
|
test 'skip Ruby comments' do
|
|
code = <<-'CODE'
|
|
=begin
|
|
class Foo
|
|
def foo
|
|
puts 'foo'
|
|
end
|
|
end
|
|
=end
|
|
|
|
# class A
|
|
# end
|
|
CODE
|
|
|
|
@code_statistics_calculator.add_by_io(StringIO.new(code), :rb)
|
|
|
|
assert_equal 10, @code_statistics_calculator.lines
|
|
assert_equal 0, @code_statistics_calculator.code_lines
|
|
assert_equal 0, @code_statistics_calculator.classes
|
|
assert_equal 0, @code_statistics_calculator.methods
|
|
end
|
|
|
|
test 'calculate number of JS methods' do
|
|
code = <<-'CODE'
|
|
function foo(x, y, z) {
|
|
doX();
|
|
}
|
|
|
|
$(function () {
|
|
bar();
|
|
})
|
|
|
|
var baz = function ( x ) {
|
|
}
|
|
CODE
|
|
|
|
@code_statistics_calculator.add_by_io(StringIO.new(code), :js)
|
|
|
|
assert_equal 3, @code_statistics_calculator.methods
|
|
end
|
|
|
|
test 'calculate JS LOCs' do
|
|
code = <<-'CODE'
|
|
function foo()
|
|
alert('foo');
|
|
end
|
|
|
|
// var b = 2;
|
|
|
|
var a = 1;
|
|
CODE
|
|
|
|
@code_statistics_calculator.add_by_io(StringIO.new(code), :js)
|
|
|
|
assert_equal 7, @code_statistics_calculator.lines
|
|
assert_equal 4, @code_statistics_calculator.code_lines
|
|
end
|
|
|
|
test 'skip JS comments' do
|
|
code = <<-'CODE'
|
|
/*
|
|
* var f = function () {
|
|
1 / 2;
|
|
}
|
|
*/
|
|
|
|
// call();
|
|
//
|
|
CODE
|
|
|
|
@code_statistics_calculator.add_by_io(StringIO.new(code), :js)
|
|
|
|
assert_equal 8, @code_statistics_calculator.lines
|
|
assert_equal 0, @code_statistics_calculator.code_lines
|
|
assert_equal 0, @code_statistics_calculator.classes
|
|
assert_equal 0, @code_statistics_calculator.methods
|
|
end
|
|
|
|
test 'calculate number of CoffeeScript methods' do
|
|
code = <<-'CODE'
|
|
square = (x) -> x * x
|
|
|
|
math =
|
|
cube: (x) -> x * square x
|
|
|
|
fill = (container, liquid = "coffee") ->
|
|
"Filling the #{container} with #{liquid}..."
|
|
|
|
$('.shopping_cart').bind 'click', (event) =>
|
|
@customer.purchase @cart
|
|
CODE
|
|
|
|
@code_statistics_calculator.add_by_io(StringIO.new(code), :coffee)
|
|
|
|
assert_equal 4, @code_statistics_calculator.methods
|
|
end
|
|
|
|
test 'calculate CoffeeScript LOCs' do
|
|
code = <<-'CODE'
|
|
# Assignment:
|
|
number = 42
|
|
opposite = true
|
|
|
|
###
|
|
CoffeeScript Compiler v1.4.0
|
|
Released under the MIT License
|
|
###
|
|
|
|
# Conditions:
|
|
number = -42 if opposite
|
|
CODE
|
|
|
|
@code_statistics_calculator.add_by_io(StringIO.new(code), :coffee)
|
|
|
|
assert_equal 11, @code_statistics_calculator.lines
|
|
assert_equal 3, @code_statistics_calculator.code_lines
|
|
end
|
|
|
|
test 'calculate number of CoffeeScript classes' do
|
|
code = <<-'CODE'
|
|
class Animal
|
|
constructor: (@name) ->
|
|
|
|
move: (meters) ->
|
|
alert @name + " moved #{meters}m."
|
|
|
|
class Snake extends Animal
|
|
move: ->
|
|
alert "Slithering..."
|
|
super 5
|
|
|
|
# class Horse
|
|
CODE
|
|
|
|
@code_statistics_calculator.add_by_io(StringIO.new(code), :coffee)
|
|
|
|
assert_equal 2, @code_statistics_calculator.classes
|
|
end
|
|
|
|
test 'skip CoffeeScript comments' do
|
|
code = <<-'CODE'
|
|
###
|
|
class Animal
|
|
constructor: (@name) ->
|
|
|
|
move: (meters) ->
|
|
alert @name + " moved #{meters}m."
|
|
###
|
|
|
|
# class Horse
|
|
alert 'hello'
|
|
CODE
|
|
|
|
@code_statistics_calculator.add_by_io(StringIO.new(code), :coffee)
|
|
|
|
assert_equal 10, @code_statistics_calculator.lines
|
|
assert_equal 1, @code_statistics_calculator.code_lines
|
|
assert_equal 0, @code_statistics_calculator.classes
|
|
assert_equal 0, @code_statistics_calculator.methods
|
|
end
|
|
end
|