mirror of
				https://github.com/KevinMidboe/linguist.git
				synced 2025-10-29 17:50:22 +00:00 
			
		
		
		
	Both JSON and Yajl were listed as dependencies. Pygments.rb already requires yajl, so let's just use that instead of using both.
		
			
				
	
	
		
			75 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
			
		
		
	
	
			75 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
| require 'linguist/samples'
 | |
| require 'linguist/language'
 | |
| require 'tempfile'
 | |
| require 'yajl'
 | |
| require 'test/unit'
 | |
| 
 | |
| 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
 | |
|   def test_presence
 | |
|     Linguist::Language.all.each do |language|
 | |
|       language.all_extensions.each do |extension|
 | |
|         language_matches = Language.find_by_filename("foo#{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
 | |
|         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}"
 | |
|           end
 | |
|         end
 | |
|       end
 | |
|     end
 | |
|   end
 | |
| end
 |