3 #include <boost/test/unit_test.hpp>
5 #include <zypp/sat/SolvableSpec.h>
6 #include <zypp/base/Logger.h>
9 #define BOOST_CHECK_MODULE SolvableSpec
15 using namespace boost::unit_test;
18 BOOST_AUTO_TEST_CASE(parsing)
21 sat::SolvableSpec specs;
22 // adds no empty values
23 specs.addIdent ( IdString() );
24 specs.addIdent ( IdString( "" ) );
25 specs.addProvides( Capability() );
26 specs.addProvides( Capability( "" ) );
27 BOOST_CHECK( ! specs.containsIdent( IdString() ) );
28 BOOST_CHECK( ! specs.containsProvides( Capability() ) );
29 BOOST_CHECK( ! specs.containsIdent( IdString( "" ) ) );
30 BOOST_CHECK( ! specs.containsProvides( Capability( "" ) ) );
33 sat::SolvableSpec specs;
34 specs.addIdent ( IdString( "idstr" ) );
35 specs.addProvides( Capability( "idcap" ) );
36 specs.addProvides( Capability( "idvcap=13" ) );
37 specs.addProvides( Capability( "idvwcap = 14" ) );
38 BOOST_CHECK( specs.containsIdent ( IdString( "idstr" ) ) );
39 BOOST_CHECK( specs.containsProvides( Capability( "", "idcap", "", "" ) ) );
40 BOOST_CHECK( specs.containsProvides( Capability( "", "idvcap", "=", "13" ) ) );
41 BOOST_CHECK( specs.containsProvides( Capability( "", "idvwcap", "=", "14" ) ) );
44 sat::SolvableSpec specs;
45 specs.parse( "idstr" );
46 specs.parse( "provides:idcap" );
47 specs.parse( "provides:idvcap=13" );
48 specs.parse( "provides:idvwcap = 14" );
49 BOOST_CHECK( specs.containsIdent ( IdString( "idstr" ) ) );
50 BOOST_CHECK( specs.containsProvides( Capability( "", "idcap", "", "" ) ) );
51 BOOST_CHECK( specs.containsProvides( Capability( "", "idvcap", "=", "13" ) ) );
52 BOOST_CHECK( specs.containsProvides( Capability( "", "idvwcap", "=", "14" ) ) );
55 sat::SolvableSpec specs;
56 std::stringstream str;
57 str << "# some comment" << endl;
58 str << " # maybe indented" << endl;
59 str << " \t " << endl; // white line
60 str << " idstr " << endl;
61 str << " provides:idcap " << endl;
62 str << " provides:idvcap=13 " << endl;
63 str << " provides:idvwcap = 14 " << endl;
65 specs.parseFrom( str );
66 BOOST_CHECK( specs.containsIdent ( IdString( "idstr" ) ) );
67 BOOST_CHECK( specs.containsProvides( Capability( "", "idcap", "", "" ) ) );
68 BOOST_CHECK( specs.containsProvides( Capability( "", "idvcap", "=", "13" ) ) );
69 BOOST_CHECK( specs.containsProvides( Capability( "", "idvwcap", "=", "14" ) ) );
72 sat::SolvableSpec specs;
73 specs.splitParseFrom( "idstr provides:idcap provides:idvcap=13 provides:idvwcap\\ =\\ 14 id\\ ws\\ str provides:id\\ ws\\ cap\\ =\\ 99" );
74 BOOST_CHECK( specs.containsIdent ( IdString( "idstr" ) ) );
75 BOOST_CHECK( specs.containsProvides( Capability( "", "idcap", "", "" ) ) );
76 BOOST_CHECK( specs.containsProvides( Capability( "", "idvcap", "=", "13" ) ) );
77 BOOST_CHECK( specs.containsProvides( Capability( "", "idvwcap", "=", "14" ) ) );
78 BOOST_CHECK( specs.containsIdent ( IdString( "id ws str" ) ) );
79 BOOST_CHECK( specs.containsProvides( Capability( "", "id ws cap", "=", "99" ) ) );
83 BOOST_AUTO_TEST_CASE(eval)
85 sat::SolvableSpec specs;
86 specs.parse( "candidate" );
87 BOOST_CHECK( !specs.dirty() ); // ident don't
88 specs.parse( "provides:available_only > 1-1" );
89 BOOST_CHECK( specs.dirty() ); // deps do
91 TestSetup test( Arch_x86_64 );
92 test.loadTestcaseRepos( TESTS_SRC_DIR "/data/TCSelectable" );
93 std::set<sat::Solvable::IdType> matches {2,3,8,9,14,15,16,17,28}; // matching Solvable IDs in TestcaseRepo (does not match srcpackage:!)
94 for ( const auto & solv : ResPool::instance() )
96 //cout << ( specs.contains( solv ) ? "* " : " " ) << solv << endl;
97 BOOST_CHECK_MESSAGE( specs.contains( solv ) == matches.count( solv.id() ), str::Str() << "Wrong: " << ( specs.contains( solv ) ? "* " : " " ) << solv );
100 BOOST_CHECK( !specs.dirty() ); // loop built the cache
101 specs.parse( "provides:available_only > 1-1" );
102 BOOST_CHECK( !specs.dirty() ); // already have this spec, no need to set dirty
104 specs.parse( "provides:available_only = 1-1" );
105 BOOST_CHECK( specs.dirty() ); // This is a new one, so got dirty
106 matches.insert( 13 );
108 for ( const auto & solv : ResPool::instance() )
110 BOOST_CHECK_MESSAGE( specs.contains( solv ) == matches.count( solv.id() ), str::Str() << "Wrong: " << ( specs.contains( solv ) ? "* " : " " ) << solv );