Skip to content

Commit

Permalink
Add requirements to the cpptest tool
Browse files Browse the repository at this point in the history
Detailed requirements for three main scenarios have been added.
The related system-tests have been aded.
  • Loading branch information
TannazVhdBMWExt committed Dec 11, 2024
1 parent 0a90610 commit 41f1b71
Show file tree
Hide file tree
Showing 47 changed files with 2,077 additions and 7 deletions.
4 changes: 3 additions & 1 deletion lobster/tools/cpptest/cpptest.py
Original file line number Diff line number Diff line change
Expand Up @@ -372,7 +372,9 @@ def main():
Main function to parse arguments, read configuration
and launch lobster_cpptest.
"""
# lobster-trace: cpptest_req.Dummy_Requirement
# lobster-trace: cpptest_req.Valid_Source_Input_File_Paths
# lobster-trace: cpptest_req.No_Source_Input_File_Path
# lobster-trace: cpptest_req.Invalid_Source_Input_File_Paths
ap = argparse.ArgumentParser()
ap.add_argument("files",
nargs="+",
Expand Down
71 changes: 65 additions & 6 deletions lobster/tools/cpptest/requirements.trlc
Original file line number Diff line number Diff line change
@@ -1,16 +1,75 @@
package cpptest_req
import req

req.Software_Requirement Dummy_Requirement {
req.Tool_Definition Source_Input_Valid {
title = '''Valid source input given'''
description = '''
This is not really a requirement. It will be used only to generate a minimal tracing report for each tool.
It can be deleted as soon as all the tools get their real requirements.
Valid source input means that the tool was called with
a list of terms as a command line argument.
Each term is an existing file or an existing directory path
'''
}

req.Software_Requirement Dummy_Requirement_Unit_Test {
req.Tool_Definition No_Source_Input {
title = '''No source input given'''
description = '''
This is not really a requirement. It will be used only to generate a minimal tracing report for each tool.
It can be deleted as soon as all the tools get their real requirements.
No source input means that the tool was called with nothing specified
in the command line argument.
'''
}

req.Tool_Definition Source_Inputs_Invalid {
title = '''Invalid source input given'''
description = '''
Invalid source input means that the tool was called with
a list of terms as a command line argument.
At least one term is an non-existent file or an non-existent directory path
'''
}

req.Tool_Definition Source_Input_Files {
title = '''Source input files given'''
description = '''
Valid existing source input files in the case of [[Source_Inputs_Valid]]
'''
}

req.Tool_Definition Config_File {
title = '''Config file'''
description = '''
This file consists of the configuration of the tool.
'''
}

req.Tool_Config_Parameter Source_Input_File_Paths {
description = '''
The input terms can be specified in space separated format
as a command line argument.
Only files ending on [".cpp", ".cc", ".c", ".h"] are considered.
'''
}

req.Tool_Config_Parameter Config_File_Path {
description = '''
This parameter specifies the path to [[Config_File]].
'''
}

req.System_Requirement Valid_Source_Input_File_Paths {
description = '''
If [[Source_Inputs_Valid]] and [[Config_File_Path]] is specified, the output file/s containing the extracted tests
from [[Source_Input_Files]] will be written with user-specific markers to the file specified in [[Config_File]].
'''
}

req.System_Requirement_Else No_Source_Input_File_Path {
description = '''
Else if [[No_Source_Input]], the tool shall exit with return code 1.
'''
}

req.System_Requirement_Else Invalid_Source_Input_File_Paths {
description = '''
Else if [[Source_Inputs_Invalid]], the tool shall exit with return code 1.
'''
}
23 changes: 23 additions & 0 deletions lobster/tools/requirements.rsl
Original file line number Diff line number Diff line change
@@ -1,5 +1,21 @@
package req

type Tool_Definition {
title '''
Title of the definition.
''' String
description '''
A definition describes what a particular entity is.
''' String
}

type Tool_Config_Parameter {
description '''
A tool configuration parameter describes the exact way in which the
parameters shall be given for the tool from the user's point of view.
''' String
}

type System_Requirement {
description '''
The content of the requirement.
Expand All @@ -14,3 +30,10 @@ type Software_Requirement {
A software requirement describes the behaviour of a lobster tool.
''' String
}

type System_Requirement_Else {
description '''
A tool requirement else describes the behavior of a Lobster tool in which the specific conditions
can be applied by the user.
''' String
}
53 changes: 53 additions & 0 deletions tests-system/lobster-cpptest/data/other-data/test_case.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@

/** ensure version are parsed correctly */

/// @version 1
TEST(VersionTagTest, VersionTagTestInOnline) {}

/// @version 1, 42
TEST(VersionTagTest, MultipleVersionTagTestInOnline) {}

/// @requirement CB-#0815
/// @version 12, 70
TEST(VersionTagTest, MoreVersionsThanRequirements) {}

/// @requirement CB-#0815, CB-#0816
/// @version 28
TEST(VersionTagTest, MoreRequirementsThanVersions) {}

/// @requirement CB-#123 CB-#456
/// @version 28 99
TEST(VersionTagTest, VersionSpaceSeparated) {}

/** ensure everything is parsed correctly at once */

///
/// @test foo
/// @brief this test tests something
/// @version 42, 2
/// @requirement CB-#0815, CB-#0816
/// @requiredby FOO0::BAR0
/// @testmethods TM_BOUNDARY, TM_REQUIREMENT
///
TEST(AllTogetherTest, ImplementationMultipleLines) {
EXPECT_EQ(true, DummyFunctionForValidCondition());
}

/**
* commented test cases
*/
// TEST(LayoutTest1, SingleComment){}
/* TEST(LayoutTest2, InlineComment){} */
/*
* TEST(LayoutTest2, Comment) {}
*/

/**
* invalid test cases
* the following tests should not be parsed
* as valid test cases
*/
TEST(InvalidTest1,) {}
TEST(, InvalidTest2) {}
TEST(,) {}
TEST() {}
183 changes: 183 additions & 0 deletions tests-system/lobster-cpptest/data/test_case.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,183 @@
/** ensure all desired test macros are parsed */

TEST_P_INSTANCE(TestMacrosTest, TestPInstance) {}
TEST(TestMacrosTest, TestTest) {}
TEST_F(TestMacrosTest1, TestTestF) {}
TEST_P(TestMacrosTest1, TestTestP) {}
TYPED_TEST(TestMacrosTest2, TestTypedTest) {}
TYPED_TEST_P(TestMacrosTest2, TestTypedTestP) {}
TYPED_TEST_SUITE(TestMacrosTest2, TestTypedTestSuite) {}
TEST_F_INSTANCE(TestMacrosTest3, TestFInstance) {}

/** ensure test implementation is correctly parsed */

TEST(
ImplementationTest,
TestMultiLine
) {}

TEST(ImplementationTest, EmptyImplementation) {}

TEST(ImplementationTest, ImplementationMultipleLines) {
EXPECT_EQ(true, DummyFunctionForValidCondition());
}

TEST(ImplementationTest, MultipleLinesWithComments)
{
// Some comments
EXPECT_EQ(true, DummyFunctionForValidCondition());
// Some other comments
}

/** ensure test tag is correctly parsed */

/// @test foo1
TEST(TestTagTest, TestTagInOnline) {}

///
/// @test foo2
TEST(TestTagTest, TestTagPrecededByComment) {}

/// @test foo3
///
TEST(TestTagTest, TestTagFollowedByComment) {}

///
/// @test foo4
///
TEST(TestTagTest, TestTagWithCommentsAround) {}

/// @test lorem ipsum
TEST(TestTagTest, TestTagAsText) {}

/** ensure brief are parsed correctly */

/// @brief Some nasty bug1
TEST(BriefTagTest, BriefTagInOnline) {}

/// @brief This is a brief field
/// with a long description
TEST(BriefTagTest, BriefTagMultipleLines) {}

/** ensure requirement tags are parse correctly */

/// @requirement CB-#0815
TEST(RequirementTagTest, Requirement) {}

/** @requirement CB-#0815 CB-#0816 */
TEST(RequirementTagTest1, RequirementAsOneLineComments) {}

/**
* @requirement CB-#0815 CB-#0816
*/
TEST(RequirementTagTest1, RequirementAsComments) {}

/**
* @requirement CB-#0815, CB-#0816,
* CB-#0817
* @requirement CB-#0818 CB-#0819
* CB-#0820
*/
TEST(RequirementTagTest1, RequirementsAsMultipleComments) {}

///
/// @requirement https://codebeamer.company.net/cb/issue/0815
///
TEST(RequirementTagTest2, URLRequirement) {}

///
/// @requirement https://codebeamer.company.net/cb/issue/0815,
/// https://codebeamer.company.net/cb/issue/0816
///
TEST(RequirementTagTest2, URLRequirementsCommaSeparated) {}

/**
* @requirement https://codebeamer.company.net/cb/issue/0815
* https://codebeamer.company.net/cb/issue/0816
*/
TEST(RequirementTagTest2, URLRequirementsAsCommentsSpaceSeparated) {}

/**
* @requirement https://codebeamer.company.net/cb/issue/0815, https://codebeamer.company.net/cb/issue/0816
* @requirement https://codebeamer.company.net/cb/issue/0817
* https://codebeamer.company.net/cb/issue/0818
*/
TEST(RequirementTagTest2, MultipleURLRequirements) {}

///
/// @requirement https://codebeamer.company.net/cb/issue/0815
/// @requirement CB-#0816
///
TEST(RequirementTagTest3, MixedRequirements) {}

///
/// @requirement something_arbitrary
///
TEST(RequirementTagTest4, InvalidRequirement) {}

///
/// @requirement
///
TEST(RequirementTagTest4, MissingRequirementReference) {}

/** ensure required-by tags are parsed correctly */

///
/// @requiredby FOO0::BAR0
///
TEST(RequirementByTest1, RequiredByWithAt) {}

///
/// @requiredby FOO0::BAR0, FOO1::BAR1
///
TEST(RequirementByTest1, MultipleRequiredByCommaSeparated) {}

/**
* @requiredby FOO0::BAR0, FOO1::BAR1,
* FOO2::BAR2
* @requiredby FOO3::BAR3 FOO4::BAR4,
* FOO5::BAR5
* @requiredby FOO6::BAR6 FOO7::BAR7
* FOO8::BAR8
*/
TEST(RequirementByTest1, MultipleRequiredByAsComments) {}

/// @test lorem ipsum
/// @requiredby FOO0::BAR0,
/// FOO1::BAR1,
/// FOO2::BAR2,
/// FOO3::BAR3,
/// FOO4::BAR4,
/// FOO5::BAR5,
/// FOO6::BAR6,
/// FOO7::BAR7,
/// FOO8::BAR8
///
TEST(RequirementByTest2, RequiredByWithNewLines) {}

/** ensure testmethods are parsed correctly */

/// @testmethods TM_REQUIREMENT
TEST(TestMethodsTagTest, TestMethod) {}

/**
* @testmethods TM_PAIRWISE TM_BOUNDARY
*/
TEST(TestMethodsTagTest2, TestMethodAsCommentsSpaceSeparated) {}

/// @testmethods TM_REQUIREMENT, TM_EQUIVALENCE
TEST(TestMethodsTagTest2, TestMethodAsCommentsCommaSeparated) {}

// /// @testmethods TM_REQUIREMENT, TM_EQUIVALENCE
// /// @testmethods TM_BOUNDARY, TM_CONDITION
// TEST(TestMethodsTagTest2, TestMethodAsCommentsMultipleLines) {}

///
/// @testmethods something_arbitrary
///
TEST(TestMethodsTagTest3, InvalidTestMethod) {}

///
/// @testmethods
///
TEST(TestMethodsTagTest4, MissingTestMethod) {}
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
1
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
usage: lobster-cpptest [-h] --config-file CONFIG_FILE FILE|DIR [FILE|DIR ...]
lobster-cpptest: error: "../../../dattta" is not a file or directory.
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
../../../dattta
--config-file=cpptest_output.conf
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
{
"output": {
"output.lobster" :
{
"markers": ["@requirement"],
"kind": "req"
}
},
"codebeamer_url": "https://codebeamer.com"
}
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
1
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
usage: lobster-cpptest [-h] --config-file CONFIG_FILE FILE|DIR [FILE|DIR ...]
lobster-cpptest: error: "../../../data/testtt_case.cpp" is not a file or directory.
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
../../../data/testtt_case.cpp
--config-file=cpptest_output.conf
Loading

0 comments on commit 41f1b71

Please sign in to comment.