File: SolvableSpec_test.cc

package info (click to toggle)
libzypp 17.38.2-1
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 27,744 kB
  • sloc: cpp: 132,661; xml: 2,587; sh: 518; python: 266; makefile: 27
file content (112 lines) | stat: -rw-r--r-- 4,563 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
#include <stdio.h>
#include <iostream>
#include <boost/test/unit_test.hpp>

#include <zypp/sat/SolvableSpec.h>
#include <zypp-core/base/Logger.h>
#include <tests/lib/TestSetup.h>

#define BOOST_CHECK_MODULE SolvableSpec

using std::cout;
using std::endl;
using std::string;
using namespace zypp;
using namespace boost::unit_test;


BOOST_AUTO_TEST_CASE(parsing)
{
  {
    sat::SolvableSpec specs;
    // adds no empty values
    specs.addIdent   ( IdString() );
    specs.addIdent   ( IdString( "" ) );
    specs.addProvides( Capability() );
    specs.addProvides( Capability( "" ) );
    BOOST_CHECK( ! specs.containsIdent( IdString() ) );
    BOOST_CHECK( ! specs.containsProvides( Capability() ) );
    BOOST_CHECK( ! specs.containsIdent( IdString( "" ) ) );
    BOOST_CHECK( ! specs.containsProvides( Capability( "" ) ) );
  }
  {
    sat::SolvableSpec specs;
    specs.addIdent   ( IdString( "idstr" ) );
    specs.addProvides( Capability( "idcap" ) );
    specs.addProvides( Capability( "idvcap=13" ) );
    specs.addProvides( Capability( "idvwcap = 14" ) );
    BOOST_CHECK( specs.containsIdent   ( IdString( "idstr" ) ) );
    BOOST_CHECK( specs.containsProvides( Capability( "", "idcap", "", "" ) ) );
    BOOST_CHECK( specs.containsProvides( Capability( "", "idvcap", "=", "13" ) ) );
    BOOST_CHECK( specs.containsProvides( Capability( "", "idvwcap", "=", "14" ) ) );
  }
  {
    sat::SolvableSpec specs;
    specs.parse( "idstr" );
    specs.parse( "provides:idcap" );
    specs.parse( "provides:idvcap=13" );
    specs.parse( "provides:idvwcap = 14" );
    BOOST_CHECK( specs.containsIdent   ( IdString( "idstr" ) ) );
    BOOST_CHECK( specs.containsProvides( Capability( "", "idcap", "", "" ) ) );
    BOOST_CHECK( specs.containsProvides( Capability( "", "idvcap", "=", "13" ) ) );
    BOOST_CHECK( specs.containsProvides( Capability( "", "idvwcap", "=", "14" ) ) );
  }
  {
    sat::SolvableSpec specs;
    std::stringstream str;
    str << "# some comment" << endl;
    str << "  # maybe indented" << endl;
    str << "  \t   " << endl;	// white line
    str << " idstr " << endl;
      str << " provides:idcap  " << endl;
    str << " provides:idvcap=13 " << endl;
    str << " provides:idvwcap = 14 " << endl;
    str << "" << endl;
    specs.parseFrom( str );
    BOOST_CHECK( specs.containsIdent   ( IdString( "idstr" ) ) );
    BOOST_CHECK( specs.containsProvides( Capability( "", "idcap", "", "" ) ) );
    BOOST_CHECK( specs.containsProvides( Capability( "", "idvcap", "=", "13" ) ) );
    BOOST_CHECK( specs.containsProvides( Capability( "", "idvwcap", "=", "14" ) ) );
  }
  {
    sat::SolvableSpec specs;
    specs.splitParseFrom( "idstr  provides:idcap  provides:idvcap=13  provides:idvwcap\\ =\\ 14  id\\ ws\\ str  provides:id\\ ws\\ cap\\ =\\ 99" );
    BOOST_CHECK( specs.containsIdent   ( IdString( "idstr" ) ) );
    BOOST_CHECK( specs.containsProvides( Capability( "", "idcap", "", "" ) ) );
    BOOST_CHECK( specs.containsProvides( Capability( "", "idvcap", "=", "13" ) ) );
    BOOST_CHECK( specs.containsProvides( Capability( "", "idvwcap", "=", "14" ) ) );
    BOOST_CHECK( specs.containsIdent   ( IdString( "id ws str" ) ) );
    BOOST_CHECK( specs.containsProvides( Capability( "", "id ws cap", "=", "99" ) ) );
  }
}

BOOST_AUTO_TEST_CASE(eval)
{
  sat::SolvableSpec specs;
  specs.parse( "candidate" );
  BOOST_CHECK( !specs.dirty() );	// ident don't
  specs.parse( "provides:available_only > 1-1" );
  BOOST_CHECK( specs.dirty() );		// deps do

  TestSetup test( Arch_x86_64 );
  test.loadTestcaseRepos( TESTS_SRC_DIR "/data/TCSelectable" );
  std::set<sat::Solvable::IdType> matches {2,3,8,9,14,15,16,17,28};	// matching Solvable IDs in TestcaseRepo (does not match srcpackage:!)
  for ( const auto & solv : ResPool::instance() )
  {
    //cout << ( specs.contains( solv ) ? "* " : "  " ) << solv << endl;
    BOOST_CHECK_MESSAGE( specs.contains( solv ) == matches.count( solv.id() ), str::Str() << "Wrong: " << ( specs.contains( solv ) ? "* " : "  " ) << solv );
  }

  BOOST_CHECK( !specs.dirty() );	// loop built the cache
  specs.parse( "provides:available_only > 1-1" );
  BOOST_CHECK( !specs.dirty() );	// already have this spec, no need to set dirty

  specs.parse( "provides:available_only = 1-1" );
  BOOST_CHECK( specs.dirty() );		// This is a new one, so got dirty
  matches.insert( 13 );

  for ( const auto & solv : ResPool::instance() )
  {
    BOOST_CHECK_MESSAGE( specs.contains( solv ) == matches.count( solv.id() ), str::Str() << "Wrong: " << ( specs.contains( solv ) ? "* " : "  " ) << solv );
  }
}