Test all languages can by found by name

This commit is contained in:
Joshua Peek
2011-05-25 09:27:20 -05:00
parent b047d67064
commit cbd69732f7
2 changed files with 26 additions and 2 deletions

View File

@@ -4,6 +4,7 @@ require 'yaml'
module Linguist module Linguist
class Language class Language
@languages = []
@name_index = {} @name_index = {}
@lexer_index = {} @lexer_index = {}
@extension_index = {} @extension_index = {}
@@ -16,6 +17,8 @@ module Linguist
def self.create(attributes = {}) def self.create(attributes = {})
language = new(attributes) language = new(attributes)
@languages << language
# All Language names should be unique. Warn if there is a duplicate. # All Language names should be unique. Warn if there is a duplicate.
if @name_index.key?(language.name.downcase) if @name_index.key?(language.name.downcase)
warn "Duplicate language name: #{language.name}" warn "Duplicate language name: #{language.name}"
@@ -51,6 +54,13 @@ module Linguist
language language
end end
# Public: Get all Languages
#
# Returns an Array of Languages
def self.all
@languages
end
# Public: Look up Language by its proper name. # Public: Look up Language by its proper name.
# #
# name - The case-insensitive String name of the Language # name - The case-insensitive String name of the Language
@@ -122,7 +132,7 @@ module Linguist
# #
# Returns an Array of Lexers. # Returns an Array of Lexers.
def self.popular def self.popular
@popular ||= @name_index.values.select(&:popular?).sort_by { |lang| lang.name.downcase } @popular ||= all.select(&:popular?).sort_by { |lang| lang.name.downcase }
end end
# Public: A List of non-popular languages # Public: A List of non-popular languages
@@ -134,7 +144,7 @@ module Linguist
# #
# Returns an Array of Lexers. # Returns an Array of Lexers.
def self.unpopular def self.unpopular
@unpopular ||= @name_index.values.select(&:unpopular?).sort_by { |lang| lang.name.downcase } @unpopular ||= all.select(&:unpopular?).sort_by { |lang| lang.name.downcase }
end end
# Internal: Initialize a new Language # Internal: Initialize a new Language

View File

@@ -12,12 +12,26 @@ class TestLanguage < Test::Unit::TestCase
assert_equal ruby, Language.find_by_name('RUBY') assert_equal ruby, Language.find_by_name('RUBY')
end end
def test_find_all_by_name
Language.all.each do |language|
assert_equal language, Language.find_by_name(language.name)
end
end
def test_find_by_extension def test_find_by_extension
assert_equal Language['Ruby'], Language.find_by_extension('.rb') assert_equal Language['Ruby'], Language.find_by_extension('.rb')
assert_equal Language['Ruby'], Language.find_by_extension('rb') assert_equal Language['Ruby'], Language.find_by_extension('rb')
assert_nil Language.find_by_extension('.kt') assert_nil Language.find_by_extension('.kt')
end end
def test_find_all_by_extension
Language.all.each do |language|
language.extensions.each do |extension|
assert_equal language, Language.find_by_extension(extension)
end
end
end
def test_find_by_lexer def test_find_by_lexer
assert_equal Language['C'], Language.find_by_lexer('c') assert_equal Language['C'], Language.find_by_lexer('c')
assert_equal Language['C++'], Language.find_by_lexer('cpp') assert_equal Language['C++'], Language.find_by_lexer('cpp')