From f3b9038bc42b5c8a26edb5a5fa84306b5505dc38 Mon Sep 17 00:00:00 2001 From: Mischa The Evil Date: Wed, 14 Jun 2017 06:33:39 +0200 Subject: [PATCH 1/2] Add method to explicitly retrieve supported languages. --- lib/coderay.rb | 14 ++++++++++++++ test/functional/basic.rb | 34 ++++++++++++++++++++++++++++++++++ 2 files changed, 48 insertions(+) diff --git a/lib/coderay.rb b/lib/coderay.rb index c3de20b5..67edee18 100644 --- a/lib/coderay.rb +++ b/lib/coderay.rb @@ -279,6 +279,20 @@ def get_scanner_options options options.fetch :scanner_options, {} end + # Provide a list of supported code languages. + # + # Returns a hash of symbols. + def supported_languages(include_aliases=true, include_internals=false) + languages = CodeRay::Scanners.list + if include_aliases == true + languages += CodeRay::Scanners.plugin_hash.keys.map(&:to_sym) + end + if include_internals == false + languages -= %w(debug default raydebug scanner).map(&:to_sym) + end + return languages + end + end end diff --git a/test/functional/basic.rb b/test/functional/basic.rb index 752d4ba0..b6e2b603 100644 --- a/test/functional/basic.rb +++ b/test/functional/basic.rb @@ -155,6 +155,40 @@ def test_list_of_scanners assert CodeRay::Scanners.list.include?(:text) end + def test_supported_languages_should_return_array_of_symbols + assert_kind_of(Array, CodeRay.supported_languages) + assert_kind_of(Symbol, CodeRay.supported_languages.first) + end + + def test_supported_languages_should_include_languages + assert_includes CodeRay.supported_languages, :ruby + end + + def test_supported_languages_without_arguments_should_include_aliases_and_exclude_internals + assert_includes CodeRay.supported_languages, :javascript + refute_includes CodeRay.supported_languages, :debug + end + + def test_supported_languages_with_arguments_should_include_aliases_and_exclude_internals + assert_includes CodeRay.supported_languages(true, false), :javascript + refute_includes CodeRay.supported_languages(true, false), :debug + end + + def test_supported_languages_with_arguments_should_exclude_aliases_and_include_internals + refute_includes CodeRay.supported_languages(false, true), :javascript + assert_includes CodeRay.supported_languages(false, true), :debug + end + + def test_supported_languages_with_arguments_should_include_aliases_and_internals + assert_includes CodeRay.supported_languages(true, true), :javascript + assert_includes CodeRay.supported_languages(true, true), :debug + end + + def test_supported_languages_with_arguments_should_exclude_aliases_and_internals + refute_includes CodeRay.supported_languages(false, false), :javascript + refute_includes CodeRay.supported_languages(false, false), :debug + end + def test_token_kinds assert_kind_of Hash, CodeRay::TokenKinds for kind, css_class in CodeRay::TokenKinds From b75ca18a67f5dc07384cde81e00935d778d0db19 Mon Sep 17 00:00:00 2001 From: Mischa The Evil Date: Thu, 15 Jun 2017 16:51:34 +0200 Subject: [PATCH 2/2] Make CodeRay.supported_languages tests Ruby 1.8 compatible. Ruby 1.8 (using Test::Unit) doesn't provide: * the assert_includes method; * the refute_includes method; * the refute method. --- test/functional/basic.rb | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/test/functional/basic.rb b/test/functional/basic.rb index b6e2b603..441eec0a 100644 --- a/test/functional/basic.rb +++ b/test/functional/basic.rb @@ -161,32 +161,32 @@ def test_supported_languages_should_return_array_of_symbols end def test_supported_languages_should_include_languages - assert_includes CodeRay.supported_languages, :ruby + assert CodeRay.supported_languages.include?(:ruby) end def test_supported_languages_without_arguments_should_include_aliases_and_exclude_internals - assert_includes CodeRay.supported_languages, :javascript - refute_includes CodeRay.supported_languages, :debug + assert CodeRay.supported_languages.include?(:javascript) + assert !CodeRay.supported_languages.include?(:debug) end def test_supported_languages_with_arguments_should_include_aliases_and_exclude_internals - assert_includes CodeRay.supported_languages(true, false), :javascript - refute_includes CodeRay.supported_languages(true, false), :debug + assert CodeRay.supported_languages(true, false).include?(:javascript) + assert !CodeRay.supported_languages(true, false).include?(:debug) end def test_supported_languages_with_arguments_should_exclude_aliases_and_include_internals - refute_includes CodeRay.supported_languages(false, true), :javascript - assert_includes CodeRay.supported_languages(false, true), :debug + assert !CodeRay.supported_languages(false, true).include?(:javascript) + assert CodeRay.supported_languages(false, true).include?(:debug) end def test_supported_languages_with_arguments_should_include_aliases_and_internals - assert_includes CodeRay.supported_languages(true, true), :javascript - assert_includes CodeRay.supported_languages(true, true), :debug + assert CodeRay.supported_languages(true, true).include?(:javascript) + assert CodeRay.supported_languages(true, true).include?(:debug) end def test_supported_languages_with_arguments_should_exclude_aliases_and_internals - refute_includes CodeRay.supported_languages(false, false), :javascript - refute_includes CodeRay.supported_languages(false, false), :debug + assert !CodeRay.supported_languages(false, false).include?(:javascript) + assert !CodeRay.supported_languages(false, false).include?(:debug) end def test_token_kinds