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.
 | 
			
		||||
    #
 | 
			
		||||
    # 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
									
								
							
							
						
						
									
										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['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
 | 
			
		||||
 
 | 
			
		||||
@@ -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
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user