This repository has been archived on 2024-06-20. You can view files and clone it, but you cannot make any changes to it's state, such as pushing and creating new issues, pull requests or comments.
coffee.pygments/tests/test_guess.py
2023-03-29 21:11:12 +02:00

200 lines
5.4 KiB
Python

"""
Pygments basic API tests
~~~~~~~~~~~~~~~~~~~~~~~~
:copyright: Copyright 2006-2023 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_guess_carbon_lexer():
code = '''
package Sorting api;
abstract class C {
var a: i32;
}
base class B {
var value_b: i32;
}
impl JustX as X {}
'''
lexer = guess_lexer(code)
assert lexer.__class__.__name__ == 'CarbonLexer'
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