mirror of
https://github.com/KevinMidboe/linguist.git
synced 2025-10-29 17:50:22 +00:00
* 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
80 lines
2.8 KiB
Ruby
80 lines
2.8 KiB
Ruby
require_relative "./helper"
|
|
require "tempfile"
|
|
|
|
class TestSamples < Test::Unit::TestCase
|
|
include Linguist
|
|
|
|
def test_up_to_date
|
|
assert serialized = Samples.cache
|
|
assert latest = Samples.data
|
|
|
|
# Just warn, it shouldn't scare people off by breaking the build.
|
|
if serialized['md5'] != latest['md5']
|
|
warn "Samples database is out of date. Run `bundle exec rake samples`."
|
|
|
|
expected = Tempfile.new('expected.json')
|
|
expected.write Yajl.dump(serialized, :pretty => true)
|
|
expected.close
|
|
|
|
actual = Tempfile.new('actual.json')
|
|
actual.write Yajl.dump(latest, :pretty => true)
|
|
actual.close
|
|
|
|
expected.unlink
|
|
actual.unlink
|
|
end
|
|
end
|
|
|
|
def test_verify
|
|
assert data = Samples.cache
|
|
|
|
assert_equal data['languages_total'], data['languages'].inject(0) { |n, (_, c)| n += c }
|
|
assert_equal data['tokens_total'], data['language_tokens'].inject(0) { |n, (_, c)| n += c }
|
|
assert_equal data['tokens_total'], data['tokens'].inject(0) { |n, (_, ts)| n += ts.inject(0) { |m, (_, c)| m += c } }
|
|
end
|
|
|
|
# Check that there aren't samples with extensions that aren't explicitly defined in languages.yml
|
|
def test_parity
|
|
extensions = Samples.cache['extnames']
|
|
languages_yml = File.expand_path("../../lib/linguist/languages.yml", __FILE__)
|
|
languages = YAML.load_file(languages_yml)
|
|
|
|
languages.each do |name, options|
|
|
options['extensions'] ||= []
|
|
|
|
if extnames = extensions[name]
|
|
extnames.each do |extname|
|
|
next if extname == '.script!'
|
|
assert options['extensions'].include?(extname), "#{name} has a sample with extension (#{extname}) that isn't explicitly defined in languages.yml"
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
# If a language extension isn't globally unique then make sure there are samples
|
|
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)
|
|
|
|
# Check for samples if more than one language matches the given extension.
|
|
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"
|
|
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
|