def test_entry3(self):
        snippet = Snippet(TestSnippetPattern.DATA3)

        entry = snippet.pattern().entry()
        entries = [x for x in entry.finditer(TestSnippetPattern.EXAMPLE3)]

        self.assertEqual(2, len(entries))

        entry = entries[0]
        self.assertNotEqual(None, entry.group(GroupName.CODE_SNIPPET))
        self.assertEqual(None, entry.group(GroupName.OUTPUT_SNIPPET))
        self.assertNotEqual(None, entry.group(GroupName.CODE))

        code = '''
    for i in range(10):
        print(i)

        print('Test')
    '''

        self.assertEqual(code, entry.group(GroupName.CODE))

        settings = '''echo[T], output[T], id[Test]'''

        self.assertEqual(settings, entry.group(GroupName.CODE_SETTINGS))

        entry = entries[1]
        self.assertEqual(None, entry.group(GroupName.CODE_SNIPPET))
        self.assertNotEqual(None, entry.group(GroupName.OUTPUT_SNIPPET))
        self.assertEqual(None, entry.group(GroupName.CODE))

        settings = '''id[Test]'''

        self.assertEqual(settings, entry.group(GroupName.OUTPUT_SETTINGS))
    def test_entry1(self):
        snippet = Snippet(TestSnippetPattern.DATA1)

        entry = snippet.pattern().entry()
        entries = [x for x in entry.finditer(TestSnippetPattern.EXAMPLE1)]

        self.assertEqual(2, len(entries))

        entry = entries[0]
        self.assertNotEqual(None, entry.group(GroupName.CODE_SNIPPET))
        self.assertEqual(None, entry.group(GroupName.OUTPUT_SNIPPET))
        self.assertNotEqual(None, entry.group(GroupName.CODE))

        code = '''
for i in range(10):
    print(i)

print('Test')
'''

        self.assertEqual(code, entry.group(GroupName.CODE))

        settings = '''[Python 3] echo=T output=T id=Abcde5'''

        self.assertEqual(settings, entry.group(GroupName.CODE_SETTINGS))

        entry = entries[1]
        self.assertEqual(None, entry.group(GroupName.CODE_SNIPPET))
        self.assertNotEqual(None, entry.group(GroupName.OUTPUT_SNIPPET))
        self.assertEqual(None, entry.group(GroupName.CODE))

        settings = '''id=Abcde5'''

        self.assertEqual(settings, entry.group(GroupName.OUTPUT_SETTINGS))
    def test_id2(self):
        snippet = Snippet(TestSnippetPattern.DATA2)

        self.assertEqual('test_id1', snippet.pattern().id(''' lang="Python 3"    output="F" context="TestCtx2" allow_error="F" processor="highlight"
             id="test_id1"'''))

        self.assertEqual(None, snippet.pattern().id(''' lang="Python 3"    output="F" context="TestCtx2" allow_error="F" processor="highlight"
            aid="test_id1"'''))

        self.assertEqual(None, snippet.pattern().id(''' lang="Python 3"    output="F" context="TestCtx2" allow_error="F" processor="highlight"
            idw="test_id1"'''))

        self.assertEqual(None, snippet.pattern().id('''  output="F" context="TestCtx2" allow_error="F" processor="highlight"  '''))
    def test_id1(self):
        snippet = Snippet(TestSnippetPattern.DATA1)

        self.assertEqual('test_id1', snippet.pattern().id(''' [Python 3]    output=F context=TestCtx2 allow_error=F processor=highlight
             id=test_id1'''))

        self.assertEqual(None, snippet.pattern().id(''' [Python 3]    output=F context=TestCtx2 allow_error=F processor=highlight
            aid=test_id1'''))

        self.assertEqual(None, snippet.pattern().id(''' [Python 3]   output=F context=TestCtx2 allow_error=F processor=highlight
            idw=test_id1'''))

        self.assertEqual(None, snippet.pattern().id('''  output=F context=TestCtx2 allow_error=F processor=highlight  '''))
    def test_language2(self):
        snippet = Snippet(TestSnippetPattern.DATA2)

        self.assertEqual('Python 3', snippet.pattern().language(''' lang="Python 3"    output="F" context="TestCtx2" allow_error="F" processor="highlight"
             id="test_id1"'''))

        self.assertEqual(None, snippet.pattern().language(''' aalang="Python 3"    output="F" context="TestCtx2" allow_error="F" processor="highlight"
            id="test_id1"'''))

        self.assertEqual(None, snippet.pattern().language(''' langaa="Python 3"    output="F" context="TestCtx2" allow_error="F" processor="highlight"
            id="test_id1"'''))

        self.assertEqual(None, snippet.pattern().language('''  output="F" context="TestCtx2" allow_error="F" processor="highlight"
            id="test_id1"'''))
    def test_default_settings2(self):
        snippet = Snippet(TestSnippetPattern.DATA2)
        entry = snippet.pattern().default_settings()
        entries = [x for x in entry.finditer(TestSnippetPattern.EXAMPLE2)]

        self.assertEqual(1, len(entries))

        entry = entries[0]

        self.assertNotEqual(None, entry.group(GroupName.DEFAULT_SETTINGS_SNIPPET))

        settings = ''' lang="Python 3" '''

        self.assertEqual(settings, entry.group(GroupName.DEFAULT_SETTINGS))
    def test_echo_lines2(self):
        snippet = Snippet(TestSnippetPattern.DATA2)

        lines = snippet.pattern().echo_lines('echo_lines="5,6, 10"')
        self.assertEqual(2, len(lines))
        self.assertFalse(lines[0])
        self.assertEqual(3, len(lines[1]))
        self.assertEqual(6, lines[1][1])

        lines = snippet.pattern().echo_lines('echo_lines="1, 5-15, 23"')
        self.assertEqual(2, len(lines))
        self.assertFalse(lines[0])
        self.assertEqual(13, len(lines[1]))
        self.assertEqual(7, lines[1][3])

        lines = snippet.pattern().echo_lines('echo_lines="! 1, 5 - 15, 23"')
        self.assertEqual(2, len(lines))
        self.assertTrue(lines[0])
        self.assertEqual(13, len(lines[1]))
        self.assertEqual(7, lines[1][3])

        with self.assertRaises(ValueError):
            lines = snippet.pattern().echo_lines('echo_lines="! 1, 5 - 15, 23 aqqw"')
    def test_timeout2(self):
        snippet = Snippet(TestSnippetPattern.DATA2)

        self.assertEqual(2.5, snippet.pattern().timeout(''' lang="Python 3"    output="F" context="TestCtx2" timeout="2500" allow_error="F" processor="highlight"
             id="test_id1"'''))

        self.assertEqual(None, snippet.pattern().timeout(''' lang="Python 3"  aatimeout="2500"   output="F" context="TestCtx2" allow_error="F" processor="highlight"
            aid="test_id1"'''))

        self.assertEqual(None, snippet.pattern().timeout(''' lang="Python 3"  timeoutaa="2500"  output="F" context="TestCtx2" allow_error="F" processor="highlight"
            idw="test_id1"'''))

        self.assertEqual(None, snippet.pattern().timeout('''  output="F" context="TestCtx2" allow_error="F" processor="highlight"  '''))

        with self.assertRaises(TimeoutValueError):
            snippet.pattern().timeout(''' lang="Python 3"  timeout="invalid"  output="F" context="TestCtx2" allow_error="F" processor="highlight"
            idw="test_id1"''')
    def test_timeout1(self):
        snippet = Snippet(TestSnippetPattern.DATA1)

        self.assertEqual(2.5, snippet.pattern().timeout(''' [Python 3]    output=F context=TestCtx2 timeout=2500 allow_error=F processor=highlight
             id="test_id1"'''))

        self.assertEqual(None, snippet.pattern().timeout(''' [Python 3]  aatimeout=2500   output=F context=TestCtx2 allow_error="F" processor=highlight
            aid="test_id1"'''))

        self.assertEqual(None, snippet.pattern().timeout(''' [Python 3]  timeoutaa=2500  output=F context=TestCtx2 allow_error=F processor=highlight
            idw="test_id1"'''))

        self.assertEqual(None, snippet.pattern().timeout('''  output=F context=TestCtx2 allow_error=F processor=highlight  '''))

        with self.assertRaises(TimeoutValueError):
            snippet.pattern().timeout(''' [Python 3]  timeout=invalid  output=F context=TestCtx2 allow_error=F processor=highlight
            idw=test_id1''')
    def test_output_type2(self):
        snippet = Snippet(TestSnippetPattern.DATA2)

        self.assertTrue(snippet.pattern().output_type(''' lang="Python 3"    output="F" context="TestCtx2" allow_error="F" output_type="Stdout, Image" processor="highlight"
             id="test_id1"''').is_enabled('Stdout'))

        self.assertTrue(snippet.pattern().output_type(''' lang="Python 3"    output="F" context="TestCtx2" allow_error="F" output_type="Stdout, Image" processor="highlight"
             id="test_id1"''').is_enabled('Image'))

        self.assertFalse(snippet.pattern().output_type(''' lang="Python 3"    output="F" context="TestCtx2" allow_error="F" output_type="Stdout, Image" processor="highlight"
             id="test_id1"''').is_enabled('Stderr'))

        self.assertFalse(snippet.pattern().output_type(''' lang="Python 3"    output="F" context="TestCtx2" allow_error="F" output_type="Stdout, Image" processor="highlight"
             id="test_id1"''').is_enabled('Text'))

        self.assertTrue(snippet.pattern().output_type(''' lang="Python 3"    output="F" context="TestCtx2" allow_error="F" processor="highlight"
             id="test_id1"''').is_enabled('Stdout'))

        self.assertTrue(snippet.pattern().output_type(''' lang="Python 3"    output="F" context="TestCtx2" allow_error="F" processor="highlight"
             id="test_id1"''').is_enabled('Image'))
    def test_output_type1(self):
        snippet = Snippet(TestSnippetPattern.DATA1)

        self.assertTrue(snippet.pattern().output_type(''' [Python 3]    output=F context=TestCtx2 allow_error=F output_type=Stdout,Image processor=highlight
             id=test_id1''').is_enabled('Stdout'))

        self.assertTrue(snippet.pattern().output_type(''' [Python 3]    output=F context=TestCtx2 allow_error=F output_type=Stdout,Image processor=highlight
             id=test_id1''').is_enabled('Image'))

        self.assertFalse(snippet.pattern().output_type(''' [Python 3]    output=F context=TestCtx2 allow_error=F output_type=Stdout,Image processor=highlight
             id=test_id1''').is_enabled('Stderr'))

        self.assertFalse(snippet.pattern().output_type(''' [Python 3]    output=F context=TestCtx2 allow_error=F output_type=Stdout,Image processor=highlight
             id=test_id1''').is_enabled('Text'))

        self.assertTrue(snippet.pattern().output_type(''' [Python 3]    output=F context=TestCtx2 allow_error=F processor=highlight
             id=test_id1''').is_enabled('Stdout'))

        self.assertTrue(snippet.pattern().output_type(''' [Python 3]    output=F context=TestCtx2 allow_error=F processor=highlight
             id=test_id1''').is_enabled('Image'))
    def test_error2(self):
        snippet = Snippet(TestSnippetPattern.DATA2)

        self.assertEqual(None, snippet.pattern().error(''' lang="Python 3"    output="F" context="TestCtx2"  processor="highlight"
                     id="test_id1"'''))

        self.assertTrue(snippet.pattern().error(''' lang="Python 3"    output="F" context="TestCtx2" echo="T" allow_error="1" processor="highlight"
                     id="test_id1"'''))

        self.assertEqual(None, snippet.pattern().error(''' lang="Python 3"    output="F" aecho="1" echoqq="False" context="TestCtx2" aallow_error="F" allow_errorq="1" processor="highlight"
                    id="test_id1"'''))

        self.assertTrue(snippet.pattern().error('allow_error="T"'))
        self.assertTrue(snippet.pattern().error('allow_error="1"'))
        self.assertTrue(snippet.pattern().error('allow_error="True"'))
        self.assertTrue(snippet.pattern().error('allow_error="Y"'))
        self.assertTrue(snippet.pattern().error('allow_error="t"'))
        self.assertTrue(snippet.pattern().error('allow_error="y"'))
        self.assertTrue(snippet.pattern().error('allow_error="YES"'))
        self.assertTrue(snippet.pattern().error('allow_error="yes"'))

        self.assertFalse(snippet.pattern().error('allow_error="F"'))
        self.assertFalse(snippet.pattern().error('allow_error="False"'))
        self.assertFalse(snippet.pattern().error('allow_error="0"'))
        self.assertFalse(snippet.pattern().error('allow_error="N"'))
        self.assertFalse(snippet.pattern().error(' allow_error="No"'))
        self.assertFalse(snippet.pattern().error('allow_error="no" '))

        with self.assertRaises(InvalidBoolValueError):
            snippet.pattern().error('allow_error="X"')
    def test_error1(self):
        snippet = Snippet(TestSnippetPattern.DATA1)

        self.assertEqual(None, snippet.pattern().error(''' [Python 3]    output=F context=TestCtx2  processor=highlight
                     id=test_id1'''))

        self.assertTrue(snippet.pattern().error(''' [Python 3]    output=F context=TestCtx2 echo=T allow_error=1 processor=highlight
                     id=test_id1'''))

        self.assertEqual(None, snippet.pattern().error(''' [Python 3]   output=F aecho=1 echoqq=False context=TestCtx2 aallow_error=F allow_errorq=1 processor=highlight
                    id=test_id1'''))

        self.assertTrue(snippet.pattern().error('allow_error=T'))
        self.assertTrue(snippet.pattern().error('allow_error=1'))
        self.assertTrue(snippet.pattern().error('allow_error=True'))
        self.assertTrue(snippet.pattern().error('allow_error=Y'))
        self.assertTrue(snippet.pattern().error('allow_error=t'))
        self.assertTrue(snippet.pattern().error('allow_error=y'))
        self.assertTrue(snippet.pattern().error('allow_error=YES'))
        self.assertTrue(snippet.pattern().error('allow_error=yes'))

        self.assertFalse(snippet.pattern().error('allow_error=F'))
        self.assertFalse(snippet.pattern().error('allow_error=False'))
        self.assertFalse(snippet.pattern().error('allow_error=0'))
        self.assertFalse(snippet.pattern().error('allow_error=N'))
        self.assertFalse(snippet.pattern().error(' allow_error=No'))
        self.assertFalse(snippet.pattern().error('allow_error=no '))

        with self.assertRaises(InvalidBoolValueError):
            snippet.pattern().error('allow_error=X')
    def test_output1(self):
        snippet = Snippet(TestSnippetPattern.DATA1)

        self.assertEqual(None, snippet.pattern().output(''' [Python 3]  context=TestCtx2 allow_error=F processor=highlight
                     id=test_id1'''))

        self.assertFalse(snippet.pattern().output(''' [Python 3]output=F context=TestCtx2 echo=T allow_error=F processor=highlight
                     id=test_id1'''))

        self.assertEqual(None, snippet.pattern().output(''' [Python 3]   qqoutput=F outputww=0 context=TestCtx2 allow_error=F processor=highlight
                    id=test_id1'''))

        self.assertTrue(snippet.pattern().output('output=T'))
        self.assertTrue(snippet.pattern().output('output=1'))
        self.assertTrue(snippet.pattern().output('output=True'))
        self.assertTrue(snippet.pattern().output('output=Y'))
        self.assertTrue(snippet.pattern().output('output=t'))
        self.assertTrue(snippet.pattern().output('output=y'))
        self.assertTrue(snippet.pattern().output('output=YES'))
        self.assertTrue(snippet.pattern().output('output=yes'))

        self.assertFalse(snippet.pattern().output('output=F'))
        self.assertFalse(snippet.pattern().output('output=False '))
        self.assertFalse(snippet.pattern().output('output=0'))
        self.assertFalse(snippet.pattern().output('output=N'))
        self.assertFalse(snippet.pattern().output(' output=No'))
        self.assertFalse(snippet.pattern().output('output=no '))

        with self.assertRaises(InvalidBoolValueError):
            snippet.pattern().output('output="X"')
    def test_entry2(self):
        snippet = Snippet(TestSnippetPattern.DATA2)
        entry = snippet.pattern().entry()
        entries = [x for x in entry.finditer(TestSnippetPattern.EXAMPLE2)]

        self.assertEqual(4, len(entries))

        entry = entries[0]
        self.assertNotEqual(None, entry.group(GroupName.CODE_SNIPPET))
        self.assertEqual(None, entry.group(GroupName.OUTPUT_SNIPPET))
        self.assertNotEqual(None, entry.group(GroupName.CODE))

        code = """
%matplotlib inline
import matplotlib
import numpy as np
import matplotlib.pyplot as plt

def f(x):
    return x**2

x = np.linspace(0, 3*np.pi, 500)
plt.plot(x, np.sin(f(x)))
plt.title('A simple chirp')
print('before')
plt.show()
print('after')
    """

        self.assertEqual(code, entry.group(GroupName.CODE))

        settings = ''' output="T" timeout="20000" echo="True" output_type="All" processor="highlight" lines="6:11,13"'''

        self.assertEqual(settings, entry.group(GroupName.CODE_SETTINGS))

        entry = entries[1]
        self.assertNotEqual(None, entry.group(GroupName.CODE_SNIPPET))
        self.assertEqual(None, entry.group(GroupName.OUTPUT_SNIPPET))
        self.assertNotEqual(None, entry.group(GroupName.CODE))

        code = """
for i in range(5):
    print(i)

j = 100
j
    """

        self.assertEqual(code, entry.group(GroupName.CODE))

        settings = ''' lang="Python 3"    output="F" context="TestCtx2" allow_error="F" processor="highlight"
             id="test_id1"'''

        self.assertEqual(settings, entry.group(GroupName.CODE_SETTINGS))

        entry = entries[2]
        self.assertEqual(None, entry.group(GroupName.CODE_SNIPPET))
        self.assertNotEqual(None, entry.group(GroupName.OUTPUT_SNIPPET))
        self.assertEqual(None, entry.group(GroupName.CODE))

        settings = '''
            id="test_id1" '''

        self.assertEqual(settings, entry.group(GroupName.OUTPUT_SETTINGS))

        entry = entries[3]
        self.assertNotEqual(None, entry.group(GroupName.CODE_SNIPPET))
        self.assertEqual(None, entry.group(GroupName.OUTPUT_SNIPPET))
        self.assertNotEqual(None, entry.group(GroupName.CODE))

        code = """
        !sqlite:///:memory:;
        CREATE TABLE test (id, aa, bb);
        INSERT INTO test VALUES (1, 'test1', 'test2');
        INSERT INTO test VALUES (2, 'test2', 'test2');
        SELECT * FROM test;
        SELECT 5;
        DELETE FROM test WHERE id = 2;
        SELECT * FROM test;
    """

        self.assertEqual(code, entry.group(GroupName.CODE))

        settings = ''' lang="SQL" lines="!1"'''

        self.assertEqual(settings, entry.group(GroupName.CODE_SETTINGS))