Merge remote-tracking branch 'origin/master' into test-helper

* origin/master:
  Add Gemfile.lock sample
  Remove deprecated method
  #all_extensions already includes primary extension
  typo
  remove unused assertion
  Symlink ant.xml to build.xml
  Avoid shadowing variable name
  Update comment
  Make missing sample failure message similar
  Remove blank extensions property
  Fix sample tests
  Add Forth extensions .f and .for; add heuristics for Forth and FORTRAN.
  Add FORTRAN and Forth samples.
  Extensions aren't actually required
  Fix errors from pedantic test
  Make pedantic test actually pedantic
  Removing extensions when they should be filenames
  Adding sample pom.xml files
  Link to contributing docs
  require samples if filename matches multiple languages

Conflicts:
	test/test_pedantic.rb
This commit is contained in:
Brandon Keepers
2014-11-18 16:48:26 -05:00
21 changed files with 1318 additions and 115 deletions

View File

@@ -100,6 +100,16 @@ class TestHeuristcs < Test::Unit::TestCase
end
end
def test_f_by_heuristics
languages = ["FORTRAN", "Forth"]
languages.each do |language|
all_fixtures(language).each do |fixture|
results = Heuristics.disambiguate_f(fixture("#{language}/#{File.basename(fixture)}"))
assert_equal Language[language], results.first
end
end
end
# Candidate languages = ["Hack", "PHP"]
def test_hack_by_heuristics
results = Heuristics.disambiguate_hack(fixture("Hack/funs.php"))

View File

@@ -348,12 +348,6 @@ class TestLanguage < Test::Unit::TestCase
assert_equal '.coffee', Language['CoffeeScript'].primary_extension
assert_equal '.t', Language['Turing'].primary_extension
assert_equal '.ts', Language['TypeScript'].primary_extension
# This is a nasty requirement, but there's some code in GitHub that
# expects this. Really want to drop this.
Language.all.each do |language|
assert language.primary_extension, "#{language} has no primary extension"
end
end
def test_eql

View File

@@ -1,57 +1,29 @@
require_relative "./helper"
class TestPedantic < Test::Unit::TestCase
Lib = File.expand_path("../../lib/linguist", __FILE__)
def file(name)
File.read(File.join(Lib, name))
end
filename = File.expand_path("../../lib/linguist/languages.yml", __FILE__)
LANGUAGES = YAML.load(File.read(filename))
def test_language_names_are_sorted
languages = []
file("languages.yml").lines.each do |line|
if line =~ /^(\w+):$/
languages << $1
end
end
assert_sorted languages
assert_sorted LANGUAGES.keys
end
def test_extensions_are_sorted
extensions = nil
file("languages.yml").lines.each do |line|
if line =~ /^ extensions:$/
extensions = []
elsif extensions && line =~ /^ - \.([\w\-\.]+)( *#.*)?$/
extensions << $1
else
assert_sorted extensions[1..-1] if extensions
extensions = nil
end
LANGUAGES.each do |name, language|
extensions = language['extensions']
assert_sorted extensions[1..-1] if extensions && extensions.size > 1
end
end
def test_filenames_are_sorted
filenames = nil
file("languages.yml").lines.each do |line|
if line =~ /^ filenames:$/
filenames = []
elsif filenames && line =~ /^ - \.(\w+)$/
filenames << $1
else
assert_sorted filenames if filenames
filenames = nil
end
LANGUAGES.each do |name, language|
assert_sorted language['filenames'] if language['filenames']
end
end
def assert_sorted(list)
previous = nil
list.each do |item|
if previous && previous > item
flunk "#{previous} should come after #{item}"
end
previous = item
list.each_cons(2) do |previous, item|
flunk "#{previous} should come after #{item}" if previous > item
end
end
end

View File

@@ -52,20 +52,28 @@ class TestSamples < Test::Unit::TestCase
end
# If a language extension isn't globally unique then make sure there are samples
def test_presence
Linguist::Language.all.each do |language|
language.all_extensions.each do |extension|
language_matches = Language.find_by_filename("foo#{extension}")
Linguist::Language.all.each do |language|
define_method "test_#{language.name}_has_samples" do
language.extensions.each do |extension|
language_matches = Language.find_by_extension(extension)
# If there is more than one language match for a given extension
# then check that there are examples for that language with the extension
# Check for samples if more than one language matches the given extension.
if language_matches.length > 1
language_matches.each do |language|
assert File.directory?("samples/#{language.name}"), "#{language.name} is missing a samples directory"
assert Dir.glob("samples/#{language.name}/*#{extension}").any?, "#{language.name} is missing samples for extension #{extension}"
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"
end
end
end
language.filenames.each do |filename|
# Check for samples if more than one language matches the given filename
if Language.find_by_filename(filename).size > 1
sample = "samples/#{language.name}/filenames/#{filename}"
assert File.exists?(sample),
"Missing sample in #{sample.inspect}. See https://github.com/github/linguist/blob/master/CONTRIBUTING.md"
end
end
end
end
end