mirror of
https://github.com/KevinMidboe/linguist.git
synced 2025-10-29 17:50:22 +00:00
Add tests for Perl and Turning detection
This commit is contained in:
@@ -470,12 +470,20 @@ module Linguist
|
|||||||
|
|
||||||
# Internal: Guess language of .t files.
|
# 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.
|
# Returns a Language.
|
||||||
def guess_t_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']
|
Language['Turing']
|
||||||
else
|
else
|
||||||
Language['Perl']
|
Language['Perl']
|
||||||
|
|||||||
10
test/fixtures/perl-test.t
vendored
Normal file
10
test/fixtures/perl-test.t
vendored
Normal 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
19
test/fixtures/turing.t
vendored
Normal 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)
|
||||||
@@ -281,6 +281,10 @@ class TestBlob < Test::Unit::TestCase
|
|||||||
assert_equal Language['R'], blob("hello-r.R").language
|
assert_equal Language['R'], blob("hello-r.R").language
|
||||||
assert_equal Language['Rebol'], blob("hello-rebol.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
|
# ML
|
||||||
assert_equal Language['OCaml'], blob("Foo.ml").language
|
assert_equal Language['OCaml'], blob("Foo.ml").language
|
||||||
assert_equal Language['Standard ML'], blob("Foo.sig").language
|
assert_equal Language['Standard ML'], blob("Foo.sig").language
|
||||||
|
|||||||
@@ -20,6 +20,9 @@ class TestLanguage < Test::Unit::TestCase
|
|||||||
|
|
||||||
assert Language.ambiguous?('.r')
|
assert Language.ambiguous?('.r')
|
||||||
assert_equal Language['R'], Language.find_by_extension('r')
|
assert_equal Language['R'], Language.find_by_extension('r')
|
||||||
|
|
||||||
|
assert Language.ambiguous?('.t')
|
||||||
|
assert_equal Language['Perl'], Language.find_by_extension('t')
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_lexer
|
def test_lexer
|
||||||
|
|||||||
Reference in New Issue
Block a user