import os
import unittest
from src.outils import *

class TestOutils(unittest.TestCase):

    #TODO -> finish this

    def test_get_next_element_caracter(self):
        test = """This is a test\n!"""
        val, index = get_next_element_caracter(test, 3)
        self.assertEqual(val, 'i')
        self.assertEqual(index, 5)
        val, index = get_next_element_caracter(test, 13)
        self.assertEqual(val, '!')
        self.assertEqual(index, 15)
        val, index = get_next_element_caracter(test, 15)
        self.assertEqual(val, -1)
        self.assertEqual(index, -1)
    
    def test_get_before_element_caracter(self):
        test = """This is a test\n!"""
        val, index = get_before_element_caracter(test, 0)
        self.assertEqual(val, -1)
        self.assertEqual(index, -1)
        val, index = get_before_element_caracter(test, 5)
        self.assertEqual(val, 's')
        self.assertEqual(index, 3)
        val, index = get_before_element_caracter(test, 15)
        self.assertEqual(val, 't')
        self.assertEqual(index, 13)

    def test_remove_comments(self):
        code_with_comments = ''
        with open("tests/ressources/outils/remove_comments_with.nf", 'r') as f:
            code_with_comments = f.read()
    
        with open("tests/ressources/outils/remove_comments_wo.nf", 'r') as f:
            code_wo_comments = f.read()

        produced = remove_comments(code_with_comments)
        with open(candidate := "tests/ressources/outils/remove_comments_wo.candidate.nf", 'w') as f:
            f.write(produced)

        self.assertEqual(produced.strip(), code_wo_comments.strip())
        os.unlink(candidate)