From 9f61bc316bc82eb90db7b67abbad53277492f3de Mon Sep 17 00:00:00 2001 From: Mitch Watrous Date: Fri, 16 Dec 2011 18:11:42 -0800 Subject: [PATCH] make create-module.py generate a test skeleton --- src/create-module.py | 86 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 86 insertions(+) diff --git a/src/create-module.py b/src/create-module.py index 38622662b..f1fb486ce 100755 --- a/src/create-module.py +++ b/src/create-module.py @@ -19,6 +19,11 @@ def build(bld): 'helper/%(MODULE)s-helper.cc', ] + module_test = bld.create_ns3_module_test_library('%(MODULE)s') + module_test.source = [ + 'test/%(MODULE)s-test-suite.cc', + ] + headers = bld.new_task_gen(features=['ns3header']) headers.module = %(MODULE)r headers.source = [ @@ -135,6 +140,76 @@ main (int argc, char *argv[]) ''' +TEST_CC_TEMPLATE = '''/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */ + +// Include a header file from your module to test. +#include "ns3/%(MODULE)s.h" + +// An essential include is test.h +#include "ns3/test.h" + +// Do not put your test classes in namespace ns3. You may find it useful +// to use the using directive to access the ns3 namespace directly +using namespace ns3; + +// This is an example TestCase. +class %(CAPITALIZED)sTestCase1 : public TestCase +{ +public: + %(CAPITALIZED)sTestCase1 (); + virtual ~%(CAPITALIZED)sTestCase1 (); + +private: + virtual void DoRun (void); +}; + +// Add some help text to this case to describe what it is intended to test +%(CAPITALIZED)sTestCase1::%(CAPITALIZED)sTestCase1 () + : TestCase ("%(CAPITALIZED)s test case (does nothing)") +{ +} + +// This destructor does nothing but we include it as a reminder that +// the test case should clean up after itself +%(CAPITALIZED)sTestCase1::~%(CAPITALIZED)sTestCase1 () +{ +} + +// +// This method is the pure virtual method from class TestCase that every +// TestCase must implement +// +void +%(CAPITALIZED)sTestCase1::DoRun (void) +{ + // A wide variety of test macros are available in src/core/test.h + NS_TEST_ASSERT_MSG_EQ (true, true, "true doesn't equal true for some reason"); + // Use this one for floating point comparisons + NS_TEST_ASSERT_MSG_EQ_TOL (0.01, 0.01, 0.001, "Numbers are not equal within tolerance"); +} + +// The TestSuite class names the TestSuite, identifies what type of TestSuite, +// and enables the TestCases to be run. Typically, only the constructor for +// this class must be defined +// +class %(CAPITALIZED)sTestSuite : public TestSuite +{ +public: + %(CAPITALIZED)sTestSuite (); +}; + +%(CAPITALIZED)sTestSuite::%(CAPITALIZED)sTestSuite () + : TestSuite ("%(MODULE)s", UNIT) +{ + AddTestCase (new %(CAPITALIZED)sTestCase1); +} + +// Do not forget to allocate an instance of this TestSuite +static %(CAPITALIZED)sTestSuite %(MODULE)sTestSuite; + +''' + + def main(argv): parser = OptionParser(usage=("Usage: %prog [options] modulename\n" "Utility script to create a basic template for a new ns-3 module")) @@ -174,6 +249,17 @@ def main(argv): + # + # test + # + testdir = os.path.join(moduledir, "test") + os.mkdir(testdir) + test_cc = file(os.path.join(moduledir, "test", "%s-test-suite.cc" % modname), "wt") + test_cc.write(TEST_CC_TEMPLATE % dict(MODULE=modname,CAPITALIZED=modname.capitalize())) + test_cc.close() + + + # # helper #