from test.vim_test_case import VimTestCase as _VimTest
from test.constant import EX, ESC

# Snippet Priority  {{{#


class SnippetPriorities_MultiWordTriggerOverwriteExisting(_VimTest):
    snippets = (
        ('test me', '${1:Hallo}', 'Types Hallo'),
        ('test me', '${1:World}', 'Types World'),
        ('test me', 'We overwrite', 'Overwrite the two', '', 1),
    )
    keys = 'test me' + EX
    wanted = 'We overwrite'


class SnippetPriorities_DoNotCareAboutNonMatchings(_VimTest):
    snippets = (
        ('test1', 'Hallo', 'Types Hallo'),
        ('test2', 'We overwrite', 'Overwrite the two', '', 1),
    )
    keys = 'test1' + EX
    wanted = 'Hallo'


class SnippetPriorities_OverwriteExisting(_VimTest):
    snippets = (
        ('test', '${1:Hallo}', 'Types Hallo'),
        ('test', '${1:World}', 'Types World'),
        ('test', 'We overwrite', 'Overwrite the two', '', 1),
    )
    keys = 'test' + EX
    wanted = 'We overwrite'


class SnippetPriorities_OverwriteTwice_ECR(_VimTest):
    snippets = (
        ('test', '${1:Hallo}', 'Types Hallo'),
        ('test', '${1:World}', 'Types World'),
        ('test', 'We overwrite', 'Overwrite the two', '', 1),
        ('test', 'again', 'Overwrite again', '', 2),
    )
    keys = 'test' + EX
    wanted = 'again'


class SnippetPriorities_OverwriteThenChoose_ECR(_VimTest):
    snippets = (
        ('test', '${1:Hallo}', 'Types Hallo'),
        ('test', '${1:World}', 'Types World'),
        ('test', 'We overwrite', 'Overwrite the two', '', 1),
        ('test', 'No overwrite', 'Not overwritten', '', 1),
    )
    keys = 'test' + EX + '1\n\n' + 'test' + EX + '2\n'
    wanted = 'We overwrite\nNo overwrite'


class SnippetPriorities_AddedHasHigherThanFile(_VimTest):
    files = { 'us/all.snippets': r"""
        snippet test "Test Snippet" b
        This is a test snippet
        endsnippet
        """}
    snippets = (
        ('test', 'We overwrite', 'Overwrite the two', '', 1),
    )
    keys = 'test' + EX
    wanted = 'We overwrite'


class SnippetPriorities_FileHasHigherThanAdded(_VimTest):
    files = { 'us/all.snippets': r"""
        snippet test "Test Snippet" b
        This is a test snippet
        endsnippet
        """}
    snippets = (
        ('test', 'We do not overwrite', 'Overwrite the two', '', -1),
    )
    keys = 'test' + EX
    wanted = 'This is a test snippet'


class SnippetPriorities_FileHasHigherThanAdded_neg_prio(_VimTest):
    files = { 'us/all.snippets': r"""
        priority -3
        snippet test "Test Snippet" b
        This is a test snippet
        endsnippet
        """}
    snippets = (
        ('test', 'We overwrite', 'Overwrite the two', '', -5),
    )
    keys = 'test' + EX
    wanted = 'This is a test snippet'


class SnippetPriorities_SimpleClear(_VimTest):
    files = {
        'us/all.snippets': r"""
        priority 1
        clearsnippets
        priority -1
        snippet test "Test Snippet"
        Should not expand to this.
        endsnippet
        """
    }
    keys = 'test' + EX
    wanted = 'test' + EX


class SnippetPriorities_SimpleClear2(_VimTest):
    files = {
        'us/all.snippets': r"""
        clearsnippets
        snippet test "Test snippet"
        Should not expand to this.
        endsnippet
        """
    }
    keys = 'test' + EX
    wanted = 'test' + EX


class SnippetPriorities_ClearedByParent(_VimTest):
    files = {
        'us/p.snippets': r"""
        clearsnippets
        """,
        'us/c.snippets': r"""
        extends p
        snippet test "Test snippets"
        Should not expand to this.
        endsnippet
        """
    }
    keys = ESC + ':set ft=c\n' + 'itest' + EX
    wanted = 'test' + EX


class SnippetPriorities_ClearedByChild(_VimTest):
    files = {
        'us/p.snippets': r"""
        snippet test "Test snippets"
        Should only expand in p.
        endsnippet
        """,
        'us/c.snippets': r"""
        extends p
        clearsnippets
        """
    }
    keys = (ESC + ':set ft=p\n' + 'itest' + EX + '\n' +
            ESC + ':set ft=c\n' + 'itest' + EX + ESC + ':set ft=p')
    wanted = 'Should only expand in p.\ntest' + EX

# End: Snippet Priority  #}}}