#!/usr/bin/env python
#
# Copyright (C) 2012 Richard Purdie
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License version 2 as
# published by the Free Software Foundation.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License along
# with this program; if not, write to the Free Software Foundation, Inc.,
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.

import os
import sys, logging
sys.path.insert(0, os.path.join(os.path.dirname(os.path.dirname(__file__)), 'lib'))

import unittest
try:
    import bb
except RuntimeError as exc:
    sys.exit(str(exc))

def usage():
    print('usage: [BB_SKIP_NETTESTS=yes] %s [-v] [testname1 [testname2]...]' % os.path.basename(sys.argv[0]))

verbosity = 1

tests = sys.argv[1:]
if '-v' in sys.argv:
    tests.remove('-v')
    verbosity = 2

if tests:
    if '--help' in sys.argv[1:]:
        usage()
        sys.exit(0)
else:
    tests = ["bb.tests.codeparser",
             "bb.tests.cow",
             "bb.tests.data",
             "bb.tests.fetch",
             "bb.tests.parse",
             "bb.tests.utils"]

for t in tests:
    t = '.'.join(t.split('.')[:3])
    __import__(t)

unittest.main(argv=["bitbake-selftest"] + tests, verbosity=verbosity)

