__author__ = 'Chris'

import unittest
from gooey.python_bindings import code_prep


def test_split_line():
  line = "parser = ArgumentParser(description='Example Argparse Program')"
  assert "parser" == code_prep.split_line(line)[0]
  assert "ArgumentParser(description='Example Argparse Program')" == code_prep.split_line(line)[1]


def test_update_parser_varname_assigns_new_name_to_parser_var():
  line = ["parser = ArgumentParser(description='Example Argparse Program')"]
  expected = "jarser = ArgumentParser(description='Example Argparse Program')"
  result = code_prep.update_parser_varname('jarser', line)[0]
  assert result == expected

def test_update_parser_varname_assigns_new_name_to_parser_var__multiline():
  lines = '''
import argparse
from argparse import ArgumentParser
parser = ArgumentParser(description='Example Argparse Program')
parser.parse_args()
  '''.split('\n')

  line = "jarser = ArgumentParser(description='Example Argparse Program')"
  result = code_prep.update_parser_varname('jarser', lines)[2]
  assert line == result


def test_take_imports_drops_all_non_imports_statements():
  lines = '''
import argparse
from argparse import ArgumentParser
parser = ArgumentParser(description='Example Argparse Program')
parser.parse_args()
  '''.split('\n')[1:]

  assert 2 == len(list(code_prep.take_imports(lines)))
  assert 'import argparse' == list(code_prep.take_imports(lines))[0]


def test_drop_imports_excludes_all_imports_statements():
  lines = '''
import argparse
from argparse import ArgumentParser
parser = ArgumentParser(description='Example Argparse Program')
parser.parse_args()
  '''.split('\n')[1:]

  assert 2 == len(list(code_prep.take_imports(lines)))
  assert 'parser.parse_args()' == list(code_prep.drop_imports(lines))[1]