wscript_errors_test.py :  » Build » Waf » waf-1.5.17 » test » Python Open Source

Home
Python Open Source
1.3.1.2 Python
2.Ajax
3.Aspect Oriented
4.Blog
5.Build
6.Business Application
7.Chart Report
8.Content Management Systems
9.Cryptographic
10.Database
11.Development
12.Editor
13.Email
14.ERP
15.Game 2D 3D
16.GIS
17.GUI
18.IDE
19.Installer
20.IRC
21.Issue Tracker
22.Language Interface
23.Log
24.Math
25.Media Sound Audio
26.Mobile
27.Network
28.Parser
29.PDF
30.Project Management
31.RSS
32.Search
33.Security
34.Template Engines
35.Test
36.UML
37.USB Serial
38.Web Frameworks
39.Web Server
40.Web Services
41.Web Unit
42.Wiki
43.Windows
44.XML
Python Open Source » Build » Waf 
Waf » waf 1.5.17 » test » wscript_errors_test.py
#! /usr/bin/env python
# encoding: utf-8
# Yinon Ehrlich, 2008

"""
Tests wscript errors handling
"""

import os, unittest, tempfile, shutil, imp
import common_test

import Test
from Constants import *
import Options
import Scripting
import Build
import Utils
import Configure

non_exist_path = '/non/exist/path'

class WscriptErrorsTester(common_test.CommonTester):
  def __init__(self, methodName):
    common_test.CommonTester.__init__(self, methodName)

  def setUp(self):
    '''setup the foundations needed for tests'''
    self._bld = Build.BuildContext()
    # define & create temporary testing directories - 
    # needed to make sure it will run in same manner always 
    self._test_dir_root = tempfile.mkdtemp("", ".waf-testing_")
    self._wscript_file_path = os.path.join(self._test_dir_root, WSCRIPT_FILE)
    os.chdir(self._test_dir_root)

  def tearDown(self):
    '''tearDown - cleanup after each test'''
    del self._bld
    os.chdir(self._waf_root_dir)

    if os.path.isdir(self._test_dir_root):
      shutil.rmtree(self._test_dir_root)

class WhiteWscriptTester(WscriptErrorsTester):
  """white-box tests for Wscript Errors"""
  
  def _setup_options(self):
    opt_obj = Options.Handler()
    opt_obj.parse_args()
    Options.options.prefix = Options.default_prefix

  def test_nonexist_blddir(self):
    self._bld.load_dirs(srcdir=non_exist_path, blddir=os.path.join(non_exist_path, 'out'))
    self.failUnlessRaises(Utils.WscriptError, Scripting.add_subdir, self._test_dir_root, self._bld)

  def test_nonexist_subdir(self):
    self._bld.load_dirs(srcdir=self._test_dir_root, blddir=os.path.join(self._test_dir_root, 'out'))
    self.failUnlessRaises(Utils.WscriptError, Scripting.add_subdir, non_exist_path, self._bld)
    
  def test_missing_blddir(self):
    self._setup_options()
    Utils.g_module = imp.new_module('main_wscript')
    Utils.g_module.srcdir = '.'
    # TODO: tests for WafError upon change
    conf = Configure.ConfigurationContext()
    self.failUnlessRaises(Utils.WscriptError, Scripting.configure, conf)

  def test_missing_srcdir(self):
    self._setup_options()
    Utils.g_module = imp.new_module('main_wscript')
    Utils.g_module.blddir = 'out'
    # TODO: tests for WafError upon change
    conf = Configure.ConfigurationContext()
    self.failUnlessRaises(Utils.WscriptError, Scripting.configure, conf)

  def test_missing_configure(self):
    # white_box test: missing def configure()
    wscript_contents = """
blddir = 'build'
srcdir = '.'
"""
    self._write_wscript(wscript_contents, use_dic=False)
    self._setup_options()
    Utils.set_main_module(self._wscript_file_path)
    conf = Configure.ConfigurationContext()
    self.failUnlessRaises(Utils.WscriptError, Scripting.configure, conf)

  def test_attr_err_in_configure(self):
    # white_box test: configure raised AttributeError - don't raise WafError becasue of that
    wscript_contents = """
blddir = 'build'
srcdir = '.'

def configure(conf):
  raise AttributeError
"""
    self._write_wscript(wscript_contents, use_dic=False)
    self._setup_options()
    Utils.set_main_module(self._wscript_file_path)
    conf = Configure.ConfigurationContext()
    self.failUnlessRaises(AttributeError, Scripting.configure, conf)

  def test_set_options_is_optional(self):
    # white_box test: set_options() is not required anymore
    self._write_wscript("\n", use_dic=False)
    opt_obj = Options.Handler()
    opt_obj.sub_options('')

  def test_attr_err_in_set_options(self):
    # white_box test: set_options raised AttributeError - don't raise WafError because of that
    wscript_contents = """
blddir = 'build'
srcdir = '.'

def set_options(opt):
  raise AttributeError
"""
    self._write_wscript(wscript_contents, use_dic=False)
    opt_obj = Options.Handler()
    self.failUnlessRaises(AttributeError, opt_obj.sub_options, '.')

  def test_no_wscript_for_config(self):
    conf = Configure.ConfigurationContext()
    self.failUnlessRaises(Utils.WscriptError, conf.sub_config, non_exist_path)

  def test_no_tool_to_set_options(self):
    # white_box test: set_options raise WafError when cannot find a tool
    Options.tooldir = os.path.join(self._waf_root_dir, Test.DIRS.WAFADMIN, Test.DIRS.TOOLS)
    opt = Options.Handler()
    self.failUnlessRaises(Utils.WscriptError, opt.tool_options, 'kk', '.')

class BlackWscriptTester(WscriptErrorsTester):
  """Black box tests for wscript errors"""
  def test_missing_build_def(self):
    wscript_contents = """
blddir = 'build'
srcdir = '.'

def configure(conf):
  pass

def set_options(opt):
  pass
"""
    self._write_wscript(wscript_contents, 0)
    self._test_configure()
    
    # TODO: this should be white-box test - make sure the proper exception was raised
    self._test_build(False)
    #Scripting.main()

def run_tests(verbose=1):
  white_suite = unittest.TestLoader().loadTestsFromTestCase(WhiteWscriptTester)
  black_suite = unittest.TestLoader().loadTestsFromTestCase(BlackWscriptTester)
  all_tests = unittest.TestSuite((white_suite, black_suite))
  return unittest.TextTestRunner(verbosity=verbose).run(all_tests)

if __name__ == '__main__':
  # test must be ran from waf's root directory
  os.chdir(os.path.pardir)
  options = common_test.get_args_options()
  run_tests(options.verbose)
www.java2java.com | Contact Us
Copyright 2009 - 12 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.