#!/usr/bin/python3
# -*- coding: utf-8 -*-

#external imports
import sys
import os
import io
import subprocess
import copy
import tempfile
import shutil
#internal imports
import subuserlib.docker
import subuserlib.paths

if "--help" in sys.argv:
  print("""
This script can be used to launch the doctest test suit.
To do so run ./logic/test doctest
""")
  sys.exit()
elif "doctest" in sys.argv:
  #import locale
  #locale.setlocale(locale.LC_ALL, '')
  import subuserlib.docker
  import doctest
  import imp
  if not "--travis" in sys.argv:
    subuserDir = "/pwd"
  else:
    subuserDir = subuserlib.paths.getSubuserDir()
  # classes
  import subuserlib.classes.user
  import subuserlib.classes.subuser
  import subuserlib.classes.fileStructure
  import subuserlib.classes.gitRepository
  # libs
  import subuserlib.resolve
  import subuserlib.permissions
  # commands
  def loadSource(command):
    return imp.load_source(command,os.path.join(subuserlib.paths.getSubuserDir(),"logic","subuserlib","builtInCommands",command+".py"))
  list = loadSource("list")
  version = loadSource("version")
  describe = loadSource("describe")
  repository = loadSource("repository")
  subuser = loadSource("subuser")
  update = loadSource("update")
  print_dependency_info = loadSource("print-dependency-info")
  remove_old_images = loadSource("remove-old-images")
  modules = [
    # classes
    subuserlib.classes.user
    ,subuserlib.classes.subusers
    # subuserlib modules
    ,subuserlib.permissions
    ,subuserlib.resolve
    # subuser commands
    ,list
    ,version
    ,describe
    ,print_dependency_info
    ,remove_old_images
    ,repository
    ,subuser
    ,update
    ]
  localOnlyModules = [ # These don't work with travis for some reason...
    subuserlib.classes.fileStructure
    ,subuserlib.classes.gitRepository]
  if not "--travis" in sys.argv:
    modules.extend(localOnlyModules)
  for module in modules:
    print("Testing module: " + module.__name__)
    optionflags = 0
    (failures,_) = doctest.testmod(module,optionflags=optionflags)
    if failures:
      sys.exit(failures)
  doctest.testfile("../test/global-doctests")
  print("Tests passed.")
