diff --git a/alib2cli/test-src/cli/CliTest.cpp b/alib2cli/test-src/cli/CliTest.cpp index 5d593c4c1bd289fb5f0c7dcaa89314e6b2ba0298..4a332e96a59a109bd89dbb4c2a07bb9dbcde94a4 100644 --- a/alib2cli/test-src/cli/CliTest.cpp +++ b/alib2cli/test-src/cli/CliTest.cpp @@ -9,6 +9,11 @@ #include <registry/AlgorithmRegistry.hpp> #include <registration/AlgoRegistration.hpp> +void testLine ( std::string line, cli::Environment & environment ) { + cli::Parser parser { cli::Lexer ( line ) }; + parser.parse ( )->run ( environment ); +} + class Foo { int m_base; public: @@ -101,29 +106,21 @@ TEST_CASE ( "Cli", "[unit][cli]" ) { cli::Environment environment; environment.setBinding ( "1", "1" ); - cli::Parser parser ( cli::Lexer ( "execute One | Add <( Add (int) #1 <(One) ) - | Neg - > local/xxx.xml" ) ); - parser.parse ( )->run ( environment ); - - environment.setBinding ( "2", "local/xxx.xml" ); - parser = cli::Parser ( cli::Lexer ( "execute One | Add <( Add (int) <#2 <(One) ) - | Neg (double) - | Divide (double) - <(One | (double) Add <(One) - )" ) ); - parser.parse ( )->run ( environment ); - - parser = cli::Parser ( cli::Lexer ( "execute <:int #2" ) ); - parser.parse ( )->run ( environment ); - parser = cli::Parser ( cli::Lexer ( "execute One > $res" ) ); - parser.parse ( )->run ( environment ); + testLine ( "execute One | Add <( Add (int) #1 <(One) ) - | Neg - > local/xxx.xml", environment ); - parser = cli::Parser ( cli::Lexer ( "execute $res" ) ); - parser.parse ( )->run ( environment ); + environment.setBinding ( "2", "local/xxx.xml" ); - parser = cli::Parser ( cli::Lexer ( "execute Divide <(One) <(One)" ) ); - CHECK_NOTHROW ( parser.parse ( )->run ( environment ) ); + testLine ( "execute One | Add <( Add (int) <#2 <(One) ) - | Neg (double) - | Divide (double) - <(One | (double) Add <(One) - )", environment ); + testLine ( "execute <:int #2", environment ); + testLine ( "execute One > $res", environment ); + testLine ( "execute $res", environment ); + CHECK_NOTHROW ( testLine ( "execute Divide <(One) <(One)", environment ) ); abstraction::AlgorithmRegistry::unregisterAlgorithm < Divide, double, double > ( abstraction::AlgorithmCategories::AlgorithmCategory::DEFAULT ); abstraction::AlgorithmRegistry::unregisterAlgorithm < Divide, int, int > ( abstraction::AlgorithmCategories::AlgorithmCategory::DEFAULT ); - CHECK_THROWS_AS ( parser.parse ( )->run ( environment ), exception::CommonException ); + CHECK_THROWS ( testLine ( "execute Divide <(One) <(One)", environment ) ); } class Source { @@ -145,8 +142,7 @@ TEST_CASE ( "Cli", "[unit][cli]" ) { abstraction::AlgorithmRegistry::registerAlgorithm < Sink > ( Sink::sink, abstraction::AlgorithmCategories::AlgorithmCategory::DEFAULT, std::array < std::string, 1 > ( ) ); cli::Environment environment; - cli::Parser parser ( cli::Lexer ( "execute Source | Sink ^ - >" ) ); - parser.parse ( )->run ( environment ); + testLine ( "execute Source | Sink ^ - >", environment ); } static std::unique_ptr < int > source; @@ -174,8 +170,7 @@ TEST_CASE ( "Cli", "[unit][cli]" ) { { source = std::make_unique < int > ( 1 ); cli::Environment environment; - cli::Parser parser ( cli::Lexer ( "execute RvalueReferenceProvider | RvalueReferenceAcceptor - >" ) ); - CHECK_NOTHROW ( parser.parse ( )->run ( environment ) ); + testLine ( "execute RvalueReferenceProvider | RvalueReferenceAcceptor - >", environment ); } CHECK ( * target == 1 ); @@ -184,10 +179,8 @@ TEST_CASE ( "Cli", "[unit][cli]" ) { { source = std::make_unique < int > ( 1 ); cli::Environment environment; - cli::Parser parser ( cli::Lexer ( "execute RvalueReferenceProvider > $tmp" ) ); - CHECK_NOTHROW ( parser.parse ( )->run ( environment ) ); - parser = cli::Parser ( cli::Lexer ( "execute $tmp | RvalueReferenceAcceptor ^ - >" ) ); - CHECK_NOTHROW ( parser.parse ( )->run ( environment ) ); + CHECK_NOTHROW ( testLine ( "execute RvalueReferenceProvider > $tmp", environment ) ); + CHECK_NOTHROW ( testLine ( "execute $tmp | RvalueReferenceAcceptor ^ - >", environment ) ); } CHECK ( * target == 1 ); @@ -196,10 +189,8 @@ TEST_CASE ( "Cli", "[unit][cli]" ) { { source = std::make_unique < int > ( 1 ); cli::Environment environment; - cli::Parser parser ( cli::Lexer ( "execute RvalueReferenceProvider > $tmp" ) ); - CHECK_NOTHROW ( parser.parse ( )->run ( environment ) ); - parser = cli::Parser ( cli::Lexer ( "execute $tmp | RvalueReferenceAcceptor - >" ) ); - CHECK_THROWS ( parser.parse ( )->run ( environment ) ); + CHECK_NOTHROW ( testLine ( "execute RvalueReferenceProvider > $tmp", environment ) ); + CHECK_THROWS ( testLine ( "execute $tmp | RvalueReferenceAcceptor - >", environment ) ); } } @@ -224,8 +215,7 @@ TEST_CASE ( "Cli", "[unit][cli]" ) { abstraction::AlgorithmRegistry::registerAlgorithm < ConstReferenceAcceptor > ( ConstReferenceAcceptor::bar, abstraction::AlgorithmCategories::AlgorithmCategory::DEFAULT, std::array < std::string, 1 > ( ) ); cli::Environment environment; - cli::Parser parser ( cli::Lexer ( "execute ConstReferenceProvider | ConstReferenceAcceptor - >" ) ); - parser.parse ( )->run ( environment ); + testLine ( "execute ConstReferenceProvider | ConstReferenceAcceptor - >", environment ); } class ReferenceProvider { @@ -247,8 +237,7 @@ TEST_CASE ( "Cli", "[unit][cli]" ) { abstraction::AlgorithmRegistry::registerAlgorithm < ReferenceAcceptor > ( ReferenceAcceptor::bar, abstraction::AlgorithmCategories::AlgorithmCategory::DEFAULT, std::array < std::string, 1 > ( ) ); cli::Environment environment; - cli::Parser parser ( cli::Lexer ( "execute ReferenceProvider | ReferenceAcceptor - >" ) ); - parser.parse ( )->run ( environment ); + testLine ( "execute ReferenceProvider | ReferenceAcceptor - >", environment ); } class ConstRvalueReferenceProvider { @@ -271,8 +260,7 @@ TEST_CASE ( "Cli", "[unit][cli]" ) { abstraction::AlgorithmRegistry::registerAlgorithm < ConstRvalueReferenceAcceptor > ( ConstRvalueReferenceAcceptor::bar, abstraction::AlgorithmCategories::AlgorithmCategory::DEFAULT, std::array < std::string, 1 > ( ) ); cli::Environment environment; - cli::Parser parser ( cli::Lexer ( "execute ConstRvalueReferenceProvider | ConstRvalueReferenceAcceptor ^ - >" ) ); - parser.parse ( )->run ( environment ); + testLine ( "execute ConstRvalueReferenceProvider | ConstRvalueReferenceAcceptor ^ - >", environment ); } class Print { @@ -289,22 +277,17 @@ TEST_CASE ( "Cli", "[unit][cli]" ) { cli::Environment environment; - cli::Parser parser ( cli::Lexer ( "execute { :int 1 2 3 } > $set" ) ); - parser.parse ( )->run ( environment ); + testLine ( "execute { :int 1 2 3 } > $set", environment ); CHECK_THAT ( environment.getVariable ( "set" )->getType ( ), Catch::Matchers::StartsWith ( "ext::set<int," ) ); - parser = cli::Parser ( cli::Lexer ( "execute $set | Print -" ) ); - parser.parse ( )->run ( environment ); + testLine ( "execute $set | Print -", environment ); - parser = cli::Parser ( cli::Lexer ( "execute $set >lo\\cal/yyy.xml" ) ); - parser.parse ( )->run ( environment ); + testLine ( "execute $set >lo\\cal/yyy.xml", environment ); - parser = cli::Parser ( cli::Lexer ( "execute < :set @int \"local/yyy.xml\" > $set2" ) ); - parser.parse ( )->run ( environment ); + testLine ( "execute < :set @int \"local/yyy.xml\" > $set2", environment ); CHECK_THAT ( environment.getVariable ( "set2" )->getType ( ), Catch::Matchers::StartsWith ( "ext::set<int," ) ); - parser = cli::Parser ( cli::Lexer ( "execute $set2 | Print -" ) ); - parser.parse ( )->run ( environment ); + testLine ( "execute $set2 | Print -", environment ); } SECTION ( "Test Member" ) { @@ -312,10 +295,8 @@ TEST_CASE ( "Cli", "[unit][cli]" ) { abstraction::AlgorithmRegistry::registerMethod < Foo > ( & Foo::base, "base", std::array < std::string, 0 > ( ) ); cli::Environment environment; - cli::Parser parser ( cli::Lexer ( "execute Foo 3 | Foo::base -" ) ); - parser.parse ( )->run ( environment ); - parser = cli::Parser ( cli::Lexer ( "execute Foo 3 | Foo::bar - 2" ) ); - parser.parse ( )->run ( environment ); + testLine ( "execute Foo 3 | Foo::base -", environment ); + testLine ( "execute Foo 3 | Foo::bar - 2", environment ); } SECTION ( "Test XML IO" ) { @@ -323,8 +304,7 @@ TEST_CASE ( "Cli", "[unit][cli]" ) { cli::Environment environment; environment.setVariable ( "in", in ); - cli::Parser parser ( cli::Lexer ( "execute sax::SaxParseInterface $in | xml::Parse ^ - | Add <(One) - | xml::Compose - | sax::SaxComposeInterface - > $out" ) ); - parser.parse ( )->run ( environment ); + testLine ( "execute sax::SaxParseInterface $in | xml::Parse ^ - | Add <(One) - | xml::Compose - | sax::SaxComposeInterface - > $out", environment ); std::string out = environment.getVariable < std::string > ( "out" ); std::string ref = "<?xml version=\"1.0\"?>\n<Integer>2</Integer>\n";