Merge branch 'master' into revert-2014-revert-1976-path-for-fileblob

This commit is contained in:
Arfon Smith
2015-03-13 11:42:24 -07:00
91 changed files with 6629 additions and 101 deletions

View File

@@ -14,7 +14,7 @@ class TestGrammars < Minitest::Test
# must have a license that allows redistribution.
"vendor/grammars/Sublime-Lasso",
"vendor/grammars/Sublime-REBOL",
"vendor/grammars/x86-assembly-textmate-bundle",
"vendor/grammars/x86-assembly-textmate-bundle"
].freeze
def setup

View File

@@ -47,8 +47,10 @@ class TestHeuristcs < Minitest::Test
# Candidate languages = ["Perl", "Prolog"]
def test_pl_prolog_perl_by_heuristics
assert_heuristics({
"Prolog" => "Prolog/turing.pl",
"Perl" => ["Perl/perl-test.t", "Perl/use5.pl"]
"Prolog" => all_fixtures("Prolog/*.pl"),
"Perl" => all_fixtures("Perl/*.pl"),
"Perl" => ["Perl/perl-test.t"],
"Perl6" => all_fixtures("Perl6/*.pl")
})
end
@@ -60,11 +62,13 @@ class TestHeuristcs < Minitest::Test
})
end
# Candidate languages = ["IDL", "Prolog"]
def test_pro_prolog_idl_by_heuristics
# Candidate languages = ["IDL", "Prolog", "QMake", "INI"]
def test_pro_by_heuristics
assert_heuristics({
"Prolog" => "Prolog/logic-problem.pro",
"IDL" => "IDL/mg_acosh.pro"
"Prolog" => all_fixtures("Prolog", "*.pro"),
"IDL" => all_fixtures("IDL", "*.pro"),
"INI" => all_fixtures("INI", "*.pro"),
"QMake" => all_fixtures("QMake", "*.pro")
})
end

View File

@@ -0,0 +1,50 @@
require_relative "./helper"
class TestInstrumentation < Minitest::Test
include Linguist
class LocalInstrumenter
Event = Struct.new(:name, :args)
attr_reader :events
def initialize
@events = []
end
def instrument(name, *args)
@events << Event.new(name, args)
yield if block_given?
end
end
def setup
Linguist.instrumenter = LocalInstrumenter.new
end
def teardown
Linguist.instrumenter = nil
end
def test_detection_instrumentation_with_binary_blob
binary_blob = fixture_blob("Binary/octocat.ai")
Language.detect(binary_blob)
# Shouldn't instrument this (as it's binary)
assert_equal 0, Linguist.instrumenter.events.size
end
def test_modeline_instrumentation
blob = fixture_blob("Data/Modelines/ruby")
Language.detect(blob)
detect_event = Linguist.instrumenter.events.last
detect_event_payload = detect_event[:args].first
assert_equal 3, Linguist.instrumenter.events.size
assert_equal "linguist.detected", detect_event.name
assert_equal Language['Ruby'], detect_event_payload[:language]
assert_equal blob, detect_event_payload[:blob]
assert_equal Linguist::Strategy::Modeline, detect_event_payload[:strategy]
end
end

View File

@@ -155,10 +155,6 @@ class TestLanguage < Minitest::Test
assert_equal :prose, Language['Org'].type
end
def test_other
assert_nil Language['Brainfuck'].type
end
def test_searchable
assert Language['Ruby'].searchable?
assert !Language['Gettext Catalog'].searchable?
@@ -192,7 +188,7 @@ class TestLanguage < Minitest::Test
assert_equal [], Language.find_by_extension('foo.rb')
assert_equal [Language['Ruby']], Language.find_by_extension('rb')
assert_equal [Language['Ruby']], Language.find_by_extension('.rb')
assert_equal [Language['M'], Language['Mathematica'], Language['Matlab'], Language['Mercury'], Language['Objective-C']], Language.find_by_extension('.m')
assert_equal [Language['M'], Language['MUF'], Language['Mathematica'], Language['Matlab'], Language['Mercury'], Language['Objective-C']], Language.find_by_extension('.m')
end
def test_find_all_by_extension
@@ -358,6 +354,15 @@ class TestLanguage < Minitest::Test
assert missing.empty?, message
end
def test_all_languages_have_type
missing = Language.all.select { |language| language.type.nil? }
message = "The following languages do not have a type listed in grammars.yml. Please add types for all new languages.\n"
width = missing.map { |language| language.name.length }.max
message << missing.map { |language| sprintf("%-#{width}s", language.name) }.sort.join("\n")
assert missing.empty?, message
end
def test_all_languages_have_a_valid_ace_mode
ace_fixture_path = File.join('test', 'fixtures', 'ace_modes.json')
skip("No ace_modes.json file") unless File.exist?(ace_fixture_path)

View File

@@ -12,7 +12,7 @@ class TestPedantic < Minitest::Test
def test_extensions_are_sorted
LANGUAGES.each do |name, language|
extensions = language['extensions']
assert_sorted extensions[1..-1] if extensions && extensions.size > 1
assert_sorted extensions[1..-1].map(&:downcase) if extensions && extensions.size > 1
end
end

View File

@@ -43,7 +43,7 @@ class TestSamples < Minitest::Test
if extnames = Samples.cache['extnames'][name]
extnames.each do |extname|
next if extname == '.script!'
assert options['extensions'].index { |x| x.end_with? extname }, "#{name} has a sample with extension (#{extname}) that isn't explicitly defined in languages.yml"
assert options['extensions'].index { |x| x.downcase.end_with? extname.downcase }, "#{name} has a sample with extension (#{extname.downcase}) that isn't explicitly defined in languages.yml"
end
end
@@ -67,7 +67,7 @@ class TestSamples < Minitest::Test
if language_matches.length > 1
language_matches.each do |match|
samples = "samples/#{match.name}/*#{extension}"
assert Dir.glob(samples).any?, "Missing samples in #{samples.inspect}. See https://github.com/github/linguist/blob/master/CONTRIBUTING.md"
assert Dir.glob(samples, File::FNM_CASEFOLD).any?, "Missing samples in #{samples.inspect}. See https://github.com/github/linguist/blob/master/CONTRIBUTING.md"
end
end
end