take care about the forceResolve in the testcases
[platform/upstream/libzypp.git] / zypp / solver / detail / Testcase.h
1 /*---------------------------------------------------------------------\
2 |                          ____ _   __ __ ___                          |
3 |                         |__  / \ / / . \ . \                         |
4 |                           / / \ V /|  _/  _/                         |
5 |                          / /__ | | | | | |                           |
6 |                         /_____||_| |_| |_|                           |
7 |                                                                      |
8 \---------------------------------------------------------------------*/
9 /** \file       zypp/solver/detail/Testcase.h
10  *
11 */
12
13 #ifndef ZYPP_SOLVER_DETAIL_TESTCASE_H
14 #define ZYPP_SOLVER_DETAIL_TESTCASE_H
15
16 #include <iosfwd>
17 #include <string>
18 #include "zypp/base/ReferenceCounted.h"
19 #include "zypp/base/NonCopyable.h"
20 #include "zypp/base/PtrTypes.h"
21 #include "zypp/solver/detail/Resolver.h"
22 #include "zypp/Capabilities.h"
23 #include "zypp/ResPool.h"
24 #include "zypp/base/GzStream.h"
25 #include "zypp/Repository.h"
26 #include "zypp/Locale.h"
27
28 /////////////////////////////////////////////////////////////////////////
29 namespace zypp
30 { ///////////////////////////////////////////////////////////////////////
31   ///////////////////////////////////////////////////////////////////////
32   namespace solver
33   { /////////////////////////////////////////////////////////////////////
34     /////////////////////////////////////////////////////////////////////
35     namespace detail
36     { ///////////////////////////////////////////////////////////////////
37
38
39 template<class T>
40 std::string helixXML( const T &obj ); //undefined
41
42 template<> 
43 std::string helixXML( const Edition &edition );
44
45 template<> 
46 std::string helixXML( const Arch &arch );
47
48 template<> 
49 std::string helixXML( const Capability &cap );
50
51 template<> 
52 std::string helixXML( const Capabilities &caps );
53
54 template<> 
55 std::string helixXML( const CapabilitySet &caps );
56
57 template<> 
58 std::string helixXML( const Dependencies &dep );
59         
60 template<> 
61 std::string helixXML( const PoolItem &item );
62
63
64 ///////////////////////////////////////////////////////////////////
65 //
66 //      CLASS NAME : HelixResolvable
67 /**
68  * Creates a file in helix format which includes all available
69  * or installed packages,patches,selections.....
70  **/
71 class  HelixResolvable : public base::ReferenceCounted, private base::NonCopyable{
72
73   private:
74     std::string dumpFile; // Path of the generated testcase
75     ofgzstream *file;    
76
77   public:
78     HelixResolvable (const std::string & path);
79     ~HelixResolvable ();
80
81     void addResolvable (const PoolItem item);
82     std::string filename () { return dumpFile; }
83 };
84
85 DEFINE_PTR_TYPE(HelixResolvable);
86 typedef std::map<Repository, HelixResolvable_Ptr> RepositoryTable;
87
88 ///////////////////////////////////////////////////////////////////
89 //
90 //      CLASS NAME : HelixControl
91 /**
92  * Creates a file in helix format which contains all controll
93  * action of a testcase ( file is known as *-test.xml)
94  **/
95 class  HelixControl {
96
97   private:
98     std::string dumpFile; // Path of the generated testcase
99     std::ofstream *file;
100
101   public:
102     HelixControl (const std::string & controlPath,
103                   const RepositoryTable & sourceTable,
104                   const Arch & systemArchitecture,
105                   const LocaleSet &languages,             
106                   const std::string & systemPath = "solver-system.xml.gz",
107                   const bool forceResolve = false);
108     HelixControl ();    
109     ~HelixControl ();
110
111     void installResolvable (const ResObject::constPtr &resObject,
112                             const ResStatus &status);
113     void lockResolvable (const ResObject::constPtr &resObject,
114                          const ResStatus &status);
115     void keepResolvable (const ResObject::constPtr &resObject,
116                          const ResStatus &status);        
117     void deleteResolvable (const ResObject::constPtr &resObject,
118                            const ResStatus &status);
119     void addDependencies (const CapabilitySet &capRequire, const CapabilitySet &capConflict);
120     std::string filename () { return dumpFile; }
121 };
122         
123
124
125         
126 ///////////////////////////////////////////////////////////////////
127 //
128 //      CLASS NAME : Testcase
129 /**
130  * Generating a testcase of the current pool and solver state
131  **/
132 class Testcase {
133
134   private:
135     std::string dumpPath; // Path of the generated testcase
136
137   public:
138     Testcase (const std::string & path);
139     Testcase ();    
140     ~Testcase ();
141
142     bool createTestcase (Resolver & resolver, bool dumpPool = true, bool runSolver = true);
143     bool createTestcasePool(const ResPool &pool);    
144 };
145
146
147 ///////////////////////////////////////////////////////////////////
148     };// namespace detail
149     /////////////////////////////////////////////////////////////////////
150     /////////////////////////////////////////////////////////////////////
151   };// namespace solver
152   ///////////////////////////////////////////////////////////////////////
153   ///////////////////////////////////////////////////////////////////////
154 };// namespace zypp
155 /////////////////////////////////////////////////////////////////////////
156
157 #endif // ZYPP_SOLVER_DETAIL_TESTCASE_H