summaryrefslogtreecommitdiffstats
path: root/tests/test_guess.py
diff options
context:
space:
mode:
Diffstat (limited to 'tests/test_guess.py')
-rw-r--r--tests/test_guess.py184
1 files changed, 184 insertions, 0 deletions
diff --git a/tests/test_guess.py b/tests/test_guess.py
new file mode 100644
index 0000000..8adf161
--- /dev/null
+++ b/tests/test_guess.py
@@ -0,0 +1,184 @@
+"""
+ Pygments basic API tests
+ ~~~~~~~~~~~~~~~~~~~~~~~~
+
+ :copyright: Copyright 2006-2022 by the Pygments team, see AUTHORS.
+ :license: BSD, see LICENSE for details.
+"""
+
+from pathlib import Path
+
+import pytest
+
+from pygments.lexers import guess_lexer, get_lexer_by_name
+from pygments.lexers.basic import CbmBasicV2Lexer
+from pygments.lexers.ecl import ECLLexer
+
+TESTDIR = Path(__file__).resolve().parent
+
+
+def get_input(lexer, filename):
+ return Path(TESTDIR, 'examplefiles', lexer, filename).read_text(encoding='utf-8')
+
+
+@pytest.mark.skip(reason="This is identified as T-SQL")
+def test_guess_lexer_fsharp():
+ lx = guess_lexer(get_input('fsharp', 'Deflate.fs'))
+ assert lx.__class__.__name__ == 'FSharpLexer'
+
+
+def test_guess_lexer_brainfuck():
+ lx = guess_lexer('>>[-]<<[->>+<<]')
+ assert lx.__class__.__name__ == 'BrainfuckLexer'
+
+
+def test_guess_lexer_singularity():
+ lx = guess_lexer(get_input('singularity', 'Singularity'))
+ assert lx.__class__.__name__ == 'SingularityLexer'
+
+
+@pytest.mark.skip(reason="This is identified as MIME")
+def test_guess_lexer_matlab():
+ lx = guess_lexer(r'A \ B')
+ assert lx.__class__.__name__ == 'OctaveLexer'
+
+
+@pytest.mark.skip(reason="This is identified as Python")
+def test_guess_lexer_hybris():
+ lx = guess_lexer(get_input('hybris', 'hybris_File.hy'))
+ assert lx.__class__.__name__ == 'HybrisLexer'
+
+
+def test_guess_lexer_forth():
+ lx = guess_lexer(get_input('forth', 'demo.frt'))
+ assert lx.__class__.__name__ == 'ForthLexer'
+
+
+def test_guess_lexer_modula2():
+ lx = guess_lexer(get_input('modula2', 'modula2_test_cases.def'))
+ assert lx.__class__.__name__ == 'Modula2Lexer'
+
+
+def test_guess_lexer_unicon():
+ lx = guess_lexer(get_input('unicon', 'example.icn'))
+ assert lx.__class__.__name__ == 'UcodeLexer'
+
+
+def test_guess_lexer_ezhil():
+ lx = guess_lexer(get_input('ezhil', 'ezhil_primefactors.n'))
+ assert lx.__class__.__name__ == 'EzhilLexer'
+
+
+def test_guess_lexer_gdscript():
+ lx = guess_lexer(get_input('gdscript', 'gdscript_example.gd'))
+ assert lx.__class__.__name__ == 'GDScriptLexer'
+
+
+def test_guess_lexer_gap():
+ lx = guess_lexer(get_input('gap', 'example.gd'))
+ assert lx.__class__.__name__ == 'GAPLexer'
+ lx = guess_lexer(get_input('gap', 'example.gi'))
+ assert lx.__class__.__name__ == 'GAPLexer'
+
+
+def test_guess_lexer_easytrieve():
+ lx = guess_lexer(get_input('easytrieve', 'example.ezt'))
+ assert lx.__class__.__name__ == 'EasytrieveLexer'
+ lx = guess_lexer(get_input('easytrieve', 'example.mac'))
+ assert lx.__class__.__name__ == 'EasytrieveLexer'
+
+
+def test_guess_lexer_jcl():
+ lx = guess_lexer(get_input('jcl', 'example.jcl'))
+ assert lx.__class__.__name__ == 'JclLexer'
+
+
+def test_guess_lexer_rexx():
+ lx = guess_lexer(get_input('rexx', 'example.rexx'))
+ assert lx.__class__.__name__ == 'RexxLexer'
+
+
+def test_easytrieve_can_guess_from_text():
+ lx = get_lexer_by_name('easytrieve')
+ assert lx.analyse_text('MACRO')
+ assert lx.analyse_text('\nMACRO')
+ assert lx.analyse_text(' \nMACRO')
+ assert lx.analyse_text(' \n MACRO')
+ assert lx.analyse_text('*\nMACRO')
+ assert lx.analyse_text('*\n *\n\n \n*\n MACRO')
+
+
+def test_rexx_can_guess_from_text():
+ lx = get_lexer_by_name('rexx')
+ assert lx.analyse_text('/* */') == pytest.approx(0.01)
+ assert lx.analyse_text('''/* Rexx */
+ say "hello world"''') == pytest.approx(1.0)
+ val = lx.analyse_text('/* */\n'
+ 'hello:pRoceduRe\n'
+ ' say "hello world"')
+ assert val > 0.5
+ val = lx.analyse_text('''/* */
+ if 1 > 0 then do
+ say "ok"
+ end
+ else do
+ say "huh?"
+ end''')
+ assert val > 0.2
+ val = lx.analyse_text('''/* */
+ greeting = "hello world!"
+ parse value greeting "hello" name "!"
+ say name''')
+ assert val > 0.2
+
+
+def test_guess_cmake_lexer_from_header():
+ headers = [
+ "CMAKE_MINIMUM_REQUIRED(VERSION 2.6 FATAL_ERROR)",
+ "cmake_minimum_required(version 3.13) # CMake version check",
+ " CMAKE_MINIMUM_REQUIRED\t( VERSION 2.6 FATAL_ERROR ) ",
+ ]
+ for header in headers:
+ code = '\n'.join([
+ header,
+ 'project(example)',
+ 'set(CMAKE_CXX_STANDARD 14)',
+ 'set(SOURCE_FILES main.cpp)',
+ 'add_executable(example ${SOURCE_FILES})',
+ ])
+ lexer = guess_lexer(code)
+ assert lexer.__class__.__name__ == 'CMakeLexer', \
+ "header must be detected as CMake: %r" % header
+
+
+def test_guess_c_lexer():
+ code = '''
+ #include <stdio.h>
+ #include <stdlib.h>
+
+ int main(void);
+
+ int main(void) {
+ uint8_t x = 42;
+ uint8_t y = x + 1;
+
+ /* exit 1 for success! */
+ return 1;
+ }
+ '''
+ lexer = guess_lexer(code)
+ assert lexer.__class__.__name__ == 'CLexer'
+
+
+def test_cbmbasicv2_analyse_text():
+ text = "10 PRINT \"PART 1\""
+ res = CbmBasicV2Lexer.analyse_text(text)
+ assert res == 0.2
+
+
+def test_ecl_analyze_text():
+ text = r"""
+ STRING ABC -> size32_t lenAbc, const char * abc;
+ """
+ res = ECLLexer.analyse_text(text)
+ assert res == 0.01