From cbd69732f7e64ebf708527cde37d95255a251717 Mon Sep 17 00:00:00 2001 From: Joshua Peek Date: Wed, 25 May 2011 09:27:20 -0500 Subject: [PATCH] Test all languages can by found by name --- lib/linguist/language.rb | 14 ++++++++++++-- test/test_language.rb | 14 ++++++++++++++ 2 files changed, 26 insertions(+), 2 deletions(-) diff --git a/lib/linguist/language.rb b/lib/linguist/language.rb index ca90c698..34bf90bf 100644 --- a/lib/linguist/language.rb +++ b/lib/linguist/language.rb @@ -4,6 +4,7 @@ require 'yaml' module Linguist class Language + @languages = [] @name_index = {} @lexer_index = {} @extension_index = {} @@ -16,6 +17,8 @@ module Linguist def self.create(attributes = {}) language = new(attributes) + @languages << language + # All Language names should be unique. Warn if there is a duplicate. if @name_index.key?(language.name.downcase) warn "Duplicate language name: #{language.name}" @@ -51,6 +54,13 @@ module Linguist language end + # Public: Get all Languages + # + # Returns an Array of Languages + def self.all + @languages + end + # Public: Look up Language by its proper name. # # name - The case-insensitive String name of the Language @@ -122,7 +132,7 @@ module Linguist # # Returns an Array of Lexers. 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 # Public: A List of non-popular languages @@ -134,7 +144,7 @@ module Linguist # # Returns an Array of Lexers. 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 # Internal: Initialize a new Language diff --git a/test/test_language.rb b/test/test_language.rb index a588b49e..332335e9 100644 --- a/test/test_language.rb +++ b/test/test_language.rb @@ -12,12 +12,26 @@ class TestLanguage < Test::Unit::TestCase assert_equal ruby, Language.find_by_name('RUBY') 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 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') 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 assert_equal Language['C'], Language.find_by_lexer('c') assert_equal Language['C++'], Language.find_by_lexer('cpp')