Add tests for Perl and Turning detection

This commit is contained in:
Joshua Peek
2011-11-21 10:42:39 -06:00
parent 0b5a265644
commit e4fe1d17e7
5 changed files with 48 additions and 4 deletions

View File

@@ -470,12 +470,20 @@ module Linguist
# Internal: Guess language of .t files.
#
# Makes fairly sure that it is Turing.
# Turing is not very popular so it would not be good to have perl users' files being confused.
#
# Returns a Language.
def guess_t_language
if lines.grep(/:=/).any? && lines.grep(/proc |procedure |fcn |function /).any? && lines.grep(/var/).any?
score = 0
score += 1 if lines.grep(/^% /).any?
score += data.gsub(/ := /).count
score += data.gsub(/proc |procedure |fcn |function /).count
score += data.gsub(/var \w+: \w+/).count
# Tell-tale signs its gotta be Perl
if lines.grep(/^(my )?(sub |\$|@|%)\w+/).any?
score = 0
end
if score >= 3
Language['Turing']
else
Language['Perl']

10
test/fixtures/perl-test.t vendored Normal file
View File

@@ -0,0 +1,10 @@
use strict;
use warnings;
use Foo::Bar
$n = 42;
$name = "world";
@array = ("1","2","3");
%hash = ("foo":"bar");
my $name = "josh";

19
test/fixtures/turing.t vendored Normal file
View File

@@ -0,0 +1,19 @@
% Accepts a number and calculates its factorial
function factorial (n: int) : real
if n = 0 then
result 1
else
result n * factorial (n - 1)
end if
end factorial
var n: int
loop
put "Please input an integer: " ..
get n
exit when n >= 0
put "Input must be a non-negative integer."
end loop
put "The factorial of ", n, " is ", factorial (n)

View File

@@ -281,6 +281,10 @@ class TestBlob < Test::Unit::TestCase
assert_equal Language['R'], blob("hello-r.R").language
assert_equal Language['Rebol'], blob("hello-rebol.r").language
# .t disambiguation
assert_equal Language['Perl'], blob("perl-test.t").language
assert_equal Language['Turing'], blob("turing.t").language
# ML
assert_equal Language['OCaml'], blob("Foo.ml").language
assert_equal Language['Standard ML'], blob("Foo.sig").language

View File

@@ -20,6 +20,9 @@ class TestLanguage < Test::Unit::TestCase
assert Language.ambiguous?('.r')
assert_equal Language['R'], Language.find_by_extension('r')
assert Language.ambiguous?('.t')
assert_equal Language['Perl'], Language.find_by_extension('t')
end
def test_lexer