Changeset 107

User picture

Author: poliklosio

(2010/06/18 11:53) Almost 2 years ago

CHANGES: PKinilib now does not treat empty value as an error; 
ADDITIONS: warning functionality added to PKini_file_holder (so far just 1 warning about empty value);
FIXES: some tests of PKinilib now use strings instead of files; confusing names in PKinilib (those with "single line" changed; PKpreprocessed entry analyzer now expects values with no garbage at the end, garbage removal moved to preprocessor, where it should be;

Affected files

Updated PKinilib/PKerror_holder.h Download diff

106107
30
        ///get_errors is guaranteed to end with '_text';
30
        ///get_errors is guaranteed to end with '_text';
31
        virtual void put_error(const std::string& _text);
31
        virtual void put_error(const std::string& _text);
32
        virtual void reset_errors();
32
        virtual void reset_errors();
33
        bool has_errors()const;
33
        const std::string& get_errors()const;
34
        const std::string& get_errors()const;
34
    };
35
    };
35
36
...
...
48
        err_msg="";
49
        err_msg="";
49
    }
50
    }
50
51
52
    inline bool PKstring_error_holder:: has_errors()const
53
    {
54
        return !err_msg.empty();
55
    }
56
51
    inline const std::string& PKstring_error_holder::get_errors()const
57
    inline const std::string& PKstring_error_holder::get_errors()const
52
    {
58
    {
53
        return err_msg;
59
        return err_msg;

Updated PKinilib/PKhelpers.h Download diff

106107
60
            static const char_type defs[]={';','[',']','\\','=',0};
60
            static const char_type defs[]={';','[',']','\\','=',0};
61
            return defs;
61
            return defs;
62
        }
62
        }
63
        PKini_forbidden_chars(const string_type& _in_sec_name,
63
        PKini_forbidden_chars(const string_type& _additional_in_sec_name,
64
            const string_type& _in_key,
64
            const string_type& _additional_in_key,
65
            const string_type& _in_value):
65
            const string_type& _additional_in_value):
66
            in_sec_name(unify_strings(_in_sec_name,in_sec_name_defaults())),
66
            in_sec_name(unify_strings(
67
            in_key(unify_strings(_in_key,in_key_defaults())),
67
                _additional_in_sec_name,in_sec_name_defaults())),
68
            in_value(unify_strings(_in_value,in_value_defaults()))
68
            in_key(unify_strings(_additional_in_key,in_key_defaults())),
69
            in_value(unify_strings(_additional_in_value,in_value_defaults()))
69
            {}
70
            {}
70
        PKini_forbidden_chars():
71
        PKini_forbidden_chars():
71
            in_sec_name(in_sec_name_defaults()),
72
            in_sec_name(in_sec_name_defaults()),

Updated PKinilib/PKinilib.h Download diff

106107
3
#ifndef PKINILIB_H_DEFINED
3
#ifndef PKINILIB_H_DEFINED
4
#define PKINILIB_H_DEFINED
4
#define PKINILIB_H_DEFINED
5
5
6
#include "PKsingle_line_entry_analyzer.h"
6
#include "PKpreprocessed_entry_analyzer.h"
7
#include "PKsingle_line_entry_parser.h"
7
#include "PKpreprocessed_entry_parser.h"
8
#include "PKerror_holder.h"
8
#include "PKerror_holder.h"
9
#include "PKini_file_format_ASCII.h"
9
#include "PKini_file_format_ASCII.h"
10
#include "PKinilib_private.h"
10
#include "PKinilib_private.h"
...
...
14
///to/from ini files using the names of sections and keys;
14
///to/from ini files using the names of sections and keys;
15
namespace PKinilib
15
namespace PKinilib
16
{
16
{
17
    //documentation needed;
17
    //different values of this enum tell PKini_file_holder when to write to
18
    //the opened file stream;
19
    //- NO_WRITE means that the stream is left unchanged;
20
    //- WRITE_LAZY means that changes to ini entries are written to the file
21
    //  just before it is closed;
22
    //- WRITE_IMMEDIATELY tells to update the file contents immediately after
23
    //  every change
24
    //.
18
    enum PKini_write_flag
25
    enum PKini_write_flag
19
    {
26
    {
20
        NO_WRITE=0,
27
        NO_WRITE=0,
...
...
36
    ///in the 'sections' map and the writing to the file happens in
43
    ///in the 'sections' map and the writing to the file happens in
37
    ///destructor; if you need to update the ini file averytime you change
44
    ///destructor; if you need to update the ini file averytime you change
38
    ///anything in the ini data, set 'lazy_write' member to false;
45
    ///anything in the ini data, set 'lazy_write' member to false;
39
    ///for the details about the used ini specification read PKINILIBDOC.txt;
40
    template<class file_format>
46
    template<class file_format>
41
    class PKini_file_holder
47
    class PKini_file_holder
42
    {
48
    {
...
...
65
        PKini_write_flag write_flag;
71
        PKini_write_flag write_flag;
66
        bool file_changed;
72
        bool file_changed;
67
        PKini_forbidden_chars<char_type> forbidden_chars;
73
        PKini_forbidden_chars<char_type> forbidden_chars;
68
//        std::string err_msg;
69
        PKstring_error_holder err_msg;
74
        PKstring_error_holder err_msg;
75
        PKstring_error_holder warning_msgs;
70
        std::string filename;
76
        std::string filename;
71
        char_type semicolon[2];
77
        char_type semicolon[2];
72
      public:
78
      public:
...
...
95
        void set_forbidden_chars(
101
        void set_forbidden_chars(
96
            const PKini_forbidden_chars<char_type>& _new_chars);
102
            const PKini_forbidden_chars<char_type>& _new_chars);
97
        void reset_err_msg();
103
        void reset_err_msg();
104
        void reset_warnings();
98
        ///those characters are forbidden in various parts of ini file, so
105
        ///those characters are forbidden in various parts of ini file, so
99
        ///if they are found in it, the reading process is terminated
106
        ///if they are found in it, the reading process is terminated
100
        ///and an error message is put to 'err_msg' field;
107
        ///and an error message is put to 'err_msg' field;
...
...
104
        const PKini_forbidden_chars<char_type>& get_forbidden_chars()const;
111
        const PKini_forbidden_chars<char_type>& get_forbidden_chars()const;
105
        ///returns the last error message;
112
        ///returns the last error message;
106
        const std::string& get_err_msg()const;
113
        const std::string& get_err_msg()const;
114
        bool error_messages_exist()const;
115
        const std::string& get_warning_msg()const;
116
        bool warning_messages_exist()const;
107
        ///returns data if there is something associated with given
117
        ///returns data if there is something associated with given
108
        ///arguments or nulls if there is not;
118
        ///arguments or nulls if there is not;
109
        ///returns pointer to internal data;
119
        ///returns pointer to internal data;
...
...
169
            string_type assembled_line;
179
            string_type assembled_line;
170
        };
180
        };
171
        struct PKanalysis_events:
181
        struct PKanalysis_events:
172
            public PKsingle_line_semantic_events<char_type>
182
            public PKentry_analyzis_semantic_events<char_type>
173
        {
183
        {
174
            PKini_file_holder& file_holder;
184
            PKini_file_holder& file_holder;
175
            string_type& current_section_name_buf;
185
            string_type& current_section_name_buf;
...
...
187
            virtual void section_found(const string_type& _section_name);
197
            virtual void section_found(const string_type& _section_name);
188
            virtual void key_value_pair_found(const string_type& _key_name,
198
            virtual void key_value_pair_found(const string_type& _key_name,
189
                const string_type& _value_name);
199
                const string_type& _value_name);
200
            virtual void empty_line_found(){}
190
        };
201
        };
191
        friend struct PKanalysis_events;
202
        friend struct PKanalysis_events;
192
        bool assemble_line(const string_type& _line,
203
        bool assemble_line(const string_type& _line,
...
...
279
        std::fstream* temp_file=new std::fstream(_filename.c_str(),
290
        std::fstream* temp_file=new std::fstream(_filename.c_str(),
280
            std::ios_base::binary|std::ios_base::in|std::ios_base::out);
291
            std::ios_base::binary|std::ios_base::in|std::ios_base::out);
281
        if(file_format::OMITTED_BYTES)
292
        if(file_format::OMITTED_BYTES)
282
        {
283
            //std::cout<<"OMITTED_BYTES"<<
284
            //    (unsigned)(file_format::OMITTED_BYTES)<<std::endl;
285
            temp_file->ignore((unsigned)(file_format::OMITTED_BYTES),EOF);
293
            temp_file->ignore((unsigned)(file_format::OMITTED_BYTES),EOF);
286
        }
287
        sections_map_type* temp_sections=0;
294
        sections_map_type* temp_sections=0;
288
        std::list<line_type>* temp_file_contents=0;
295
        std::list<line_type>* temp_file_contents=0;
289
        if(*temp_file)
296
        if(*temp_file)
...
...
612
        ///
619
        ///
613
        if(_line.empty())
620
        if(_line.empty())
614
            {return true;}
621
            {return true;}
615
        bool is_before_first_section_name=false;
616
        if(_current_section_name_buf.empty())
617
            is_before_first_section_name=true;
618
        bool no_error=true;
622
        bool no_error=true;
619
        PKassembling_output out;
623
        PKassembling_output out;
620
        no_error=assemble_line(_line,is_before_first_section_name,
624
        no_error=assemble_line(_line,_current_section_name_buf.empty(),
621
            _multiline_key_and_value_buf,out,_err_msg);
625
            _multiline_key_and_value_buf,out,_err_msg);
622
        if(out.is_beginning_of_key_or_section)
626
        if(out.is_beginning_of_key_or_section)
623
        {
627
        {
...
...
632
            _current_section_name_buf,
636
            _current_section_name_buf,
633
            temp_sections,
637
            temp_sections,
634
            _file_contents);
638
            _file_contents);
635
        PKsingle_line_entry_analyzer<char_type> analyzer(
639
        PKpreprocessed_entry_analyzer<char_type> analyzer(
636
            forbidden_chars);
640
            forbidden_chars);
637
        no_error=analyzer.analyze(out.assembled_line,
641
        no_error=analyzer.analyze(out.assembled_line,
638
            !_current_section_name_buf.empty(),
642
            !_current_section_name_buf.empty(),
...
...
698
            if(cur_pos<_line.length() && no_error &&
702
            if(cur_pos<_line.length() && no_error &&
699
                !line_is_a_beginning_of_multiline_entry)
703
                !line_is_a_beginning_of_multiline_entry)
700
            {
704
            {
705
                const char_type end_line_chars[]={';','\n','\r',0};
706
                size_type end_line_pos=
707
                    _line.find_first_of(end_line_chars,cur_pos);
708
                if(end_line_pos==string_type::npos)
709
                    {end_line_pos=_line.length();}
701
                string_type rest_of_line=_line.substr(
710
                string_type rest_of_line=_line.substr(
702
                    cur_pos,_line.length()-cur_pos);
711
                    cur_pos,end_line_pos-cur_pos);
703
                out.finished_assembling_and_has_content=true;
712
                out.finished_assembling_and_has_content=true;
704
                out.assembled_line_must_be_key_value_pair=false;
713
                out.assembled_line_must_be_key_value_pair=false;
705
                out.assembled_line=rest_of_line;
714
                out.assembled_line=rest_of_line;
...
...
754
        temp_sections[current_section_name_buf][_key_name]=_value_name;
763
        temp_sections[current_section_name_buf][_key_name]=_value_name;
755
        temp_sections[current_section_name_buf][_key_name].in_file_iter=
764
        temp_sections[current_section_name_buf][_key_name].in_file_iter=
756
            file_holder.get_last_good_line(file_contents);
765
            file_holder.get_last_good_line(file_contents);
766
        if(_value_name.empty())
767
        {
768
            file_holder.warning_msgs.put_error(
769
                "value for key ["+to_string(_key_name)+
770
                "] of section ["+to_string(current_section_name_buf)+
771
                "] has 0 length;");
772
        }
757
    }
773
    }
758
774
759
    template<class file_format>
775
    template<class file_format>
...
...
810
    {
826
    {
811
        if(file)
827
        if(file)
812
        {
828
        {
813
            //std::cout<<"close_file_finally..."<<std::endl;
814
            if(file_changed && write_flag==WRITE_LAZY)
829
            if(file_changed && write_flag==WRITE_LAZY)
815
                {actualize_file();}
830
                {actualize_file();}
816
            file->close();
831
            file->close();
...
...
829
        {err_msg.reset_errors();}
844
        {err_msg.reset_errors();}
830
845
831
    template<class file_format>
846
    template<class file_format>
847
    inline void PKini_file_holder<file_format>::reset_warnings()
848
        {warning_msgs.reset_errors();}
849
850
    template<class file_format>
832
    inline const PKini_forbidden_chars<typename file_format::char_type>&
851
    inline const PKini_forbidden_chars<typename file_format::char_type>&
833
        PKini_file_holder<file_format>::
852
        PKini_file_holder<file_format>::
834
      get_forbidden_chars()const
853
      get_forbidden_chars()const
835
        {return forbidden_chars;}
854
        {return forbidden_chars;}
836
855
837
    template<class file_format>
856
    template<class file_format>
838
    const std::string& PKini_file_holder<file_format>::
857
    inline const std::string& PKini_file_holder<file_format>::
839
      get_err_msg()const
858
      get_err_msg()const
840
        {return err_msg.get_errors();}
859
        {return err_msg.get_errors();}
860
861
    template<class file_format>
862
    inline bool PKini_file_holder<file_format>::error_messages_exist()const
863
        {return err_msg.has_errors();}
864
865
    template<class file_format>
866
    inline const std::string& PKini_file_holder<file_format>::
867
      get_warning_msg()const
868
        {return warning_msgs.get_errors();}
869
870
    template<class file_format>
871
    inline bool PKini_file_holder<file_format>::warning_messages_exist()const
872
        {return warning_msgs.has_errors();}
841
}
873
}
842
#endif
874
#endif
843
///921
875
///921

Updated PKinilib_tests/PKinilib_tests.cpp Download diff

106107
16
        void test_PKini_file_format_ASCII_writing();
16
        void test_PKini_file_format_ASCII_writing();
17
        void test_PKini_file_format_ASCII_reading();
17
        void test_PKini_file_format_ASCII_reading();
18
        void test_PKini_file_holder();
18
        void test_PKini_file_holder();
19
        void test_PKpreprocessed_entry_parser();
20
        void test_PKpreprocessed_entry_analyzer();
19
        bool test_inferring_line_ending(const char* _ending);
21
        bool test_inferring_line_ending(const char* _ending);
20
        bool section_exist_and_has_correct_key_count(HolderT& _holder,
22
        bool section_exist_and_has_correct_key_count(HolderT& _holder,
21
            const char* _sec_name,size_t _count);
23
            const char* _sec_name,size_t _count);
...
...
25
            const key_val_vec_type& _args,std::string& _err_msg);
27
            const key_val_vec_type& _args,std::string& _err_msg);
26
        void put(key_val_vec_type& _vec,const char* _arg1,const char*_arg2);
28
        void put(key_val_vec_type& _vec,const char* _arg1,const char*_arg2);
27
        bool test_wrong_file(const char*);
29
        bool test_wrong_file(const char*);
30
        bool test_section_name_line(const char* _line);
31
        bool test_key_value_line(const char* _line);
32
        struct semantic_events:public PKentry_analyzis_semantic_events<char>
33
        {
34
            bool key_value_fired;
35
            bool section_fired;
36
            bool empty_fired;
37
            std::string data;
38
            std::string separator;
39
            semantic_events():key_value_fired(false),section_fired(false),
40
                empty_fired(false),
41
                separator("][")
42
                {}
43
            virtual void empty_line_found()
44
            {
45
                empty_fired=true;
46
            }
47
            virtual void section_found(const string_type& _section_name)
48
            {
49
                section_fired=true;
50
                data=_section_name;
51
            }
52
            virtual void key_value_pair_found(const string_type& _key_name,
53
                const string_type& _value_name)
54
            {
55
                key_value_fired=true;
56
                data=_key_name+_value_name;
57
            }
58
        };
59
        bool test_key_value_classification(const char* _key,
60
            const char* _value,std::string& error_buf);
28
    };
61
    };
29
62
63
    bool test_PKinilib::pimpl::test_section_name_line(const char* _line)
64
    {
65
        PKpreprocessed_entry_parser<char> parser=
66
            PKini_forbidden_chars<char>();
67
        std::string result;
68
        PKstring_error_holder err_holder;
69
        return parser.parse_section_name(_line,result,err_holder);
70
    }
71
72
    bool test_PKinilib::pimpl::test_key_value_line(const char* _line)
73
    {
74
        PKpreprocessed_entry_parser<char> parser=
75
            PKini_forbidden_chars<char>();
76
        std::string resulting_key;
77
        std::string resulting_value;
78
        PKstring_error_holder err_holder;
79
        return parser.parse_key_value(_line,resulting_key,
80
            resulting_value,err_holder);
81
    }
82
30
    bool test_PKinilib::pimpl::test_wrong_file(const char* _filename)
83
    bool test_PKinilib::pimpl::test_wrong_file(const char* _filename)
31
    {
84
    {
32
        bool good=true;
85
        bool good=true;
...
...
410
            PKTESTER_IS_TRUE(key_exists_and_value_equals(
463
            PKTESTER_IS_TRUE(key_exists_and_value_equals(
411
                holder,"section1","key1","h"));
464
                holder,"section1","key1","h"));
412
        }
465
        }
413
        //test incorrect files:
414
        PKTESTER_IS_TRUE(test_wrong_file("test_text_files/"
415
            "wrong_section_name_backslash.ini"));
416
        PKTESTER_IS_TRUE(test_wrong_file("test_text_files/"
417
            "wrong_section_name_closing_sq_bracket.ini"));
418
        PKTESTER_IS_TRUE(test_wrong_file("test_text_files/"
419
            "wrong_section_name_equals.ini"));
420
        PKTESTER_IS_TRUE(test_wrong_file("test_text_files/"
421
            "wrong_section_name_newline_cr.ini"));
422
        PKTESTER_IS_TRUE(test_wrong_file("test_text_files/"
423
            "wrong_section_name_equals.ini"));
424
    }
466
    }
425
467
468
    void test_PKinilib::pimpl::test_PKpreprocessed_entry_parser()
469
    {
470
        //test correct section names
471
        PKTESTER_IS_TRUE(test_section_name_line("[k]"));
472
        PKTESTER_IS_TRUE(test_section_name_line("[kg_fd_fd]"));
473
        PKTESTER_IS_TRUE(test_section_name_line("[_]"));
474
        PKTESTER_IS_TRUE(test_section_name_line("[kgfdfd]"));
475
        //test faulty section names
476
        PKTESTER_IS_FALSE(test_section_name_line("[kgfd\\fd]"));
477
        PKTESTER_IS_FALSE(test_section_name_line("[jksaf]]"));
478
        PKTESTER_IS_FALSE(test_section_name_line("[fkdas=fds]"));
479
        PKTESTER_IS_FALSE(test_section_name_line("[fdsafs\nfdsafsdfds]"));
480
        PKTESTER_IS_FALSE(test_section_name_line("[fdsj[kj]"));
481
        PKTESTER_IS_FALSE(test_section_name_line("[fdsafj;fds]"));
482
        PKTESTER_IS_FALSE(test_section_name_line("[fdsa ]"));
483
        PKTESTER_IS_FALSE(test_section_name_line("[fdsa\tfds]"));
484
        PKTESTER_IS_FALSE(test_section_name_line("[\vfdsafds]"));
485
        PKTESTER_IS_FALSE(test_section_name_line("[fdsafds\r]"));
486
        //test correct key-value pairs
487
        PKTESTER_IS_TRUE(test_key_value_line("fdklsl=fdslfj"));
488
        PKTESTER_IS_TRUE(test_key_value_line("fdklsl=  fdslfj"));
489
        PKTESTER_IS_TRUE(test_key_value_line("fdklsl=fdslfj  "));
490
        PKTESTER_IS_TRUE(test_key_value_line("fdklsl=\t\tfdslfj  "));
491
        PKTESTER_IS_TRUE(test_key_value_line("fdklsl= fdslfj  "));
492
        PKTESTER_IS_TRUE(test_key_value_line("fdk_lsl=fdslfj"));
493
        PKTESTER_IS_TRUE(test_key_value_line("_fdk_lsl_=fdslfj"));
494
        PKTESTER_IS_TRUE(test_key_value_line("_=fdslfj"));
495
        PKTESTER_IS_TRUE(test_key_value_line("a=fdslfj"));
496
        PKTESTER_IS_TRUE(test_key_value_line("a="));
497
        //test faulty key names
498
        PKTESTER_IS_FALSE(test_key_value_line("  fdklsl=fdslfj"));
499
        PKTESTER_IS_FALSE(test_key_value_line("fdklsl  =fdslfj"));
500
        PKTESTER_IS_FALSE(test_key_value_line("fdk;lsl=fdslfj"));
501
        PKTESTER_IS_FALSE(test_key_value_line("fdk[lsl=fdslfj"));
502
        PKTESTER_IS_FALSE(test_key_value_line("fdklsl]=fdslfj"));
503
        PKTESTER_IS_FALSE(test_key_value_line("\\fdklsl=fdslfj"));
504
        PKTESTER_IS_FALSE(test_key_value_line("fd=klsl=  fdslfj"));
505
        PKTESTER_IS_FALSE(test_key_value_line("fdkl\tsl=fdslfj"));
506
        PKTESTER_IS_FALSE(test_key_value_line("\vfdklsl=fdslfj"));
507
        PKTESTER_IS_FALSE(test_key_value_line("fdk\nlsl=fdslfj"));
508
        PKTESTER_IS_FALSE(test_key_value_line("fdk\rlsl=fdslfj"));
509
        //test faulty value names
510
        PKTESTER_IS_FALSE(test_key_value_line("fdklsl=f;dslfj"));
511
        PKTESTER_IS_FALSE(test_key_value_line("fdklsl=fdsl[fj"));
512
        PKTESTER_IS_FALSE(test_key_value_line("fdklsl=fd]slfj"));
513
        PKTESTER_IS_FALSE(test_key_value_line("fdklsl=fd]s\\lfj"));
514
        PKTESTER_IS_FALSE(test_key_value_line("fdklsl=fd]s=lfj"));
515
    }
516
517
    bool test_PKinilib::pimpl::test_key_value_classification(
518
        const char* _key,
519
        const char* _value,
520
        std::string& error_buf)
521
    {
522
        error_buf="";
523
        PKpreprocessed_entry_analyzer<char> analyzer=
524
            PKini_forbidden_chars<char>();
525
        PKstring_error_holder errors;
526
        semantic_events events;
527
        analyzer.analyze(std::string(_key)+"="+_value,
528
            true,events,errors);
529
        if(events.key_value_fired!=true)
530
        {
531
            error_buf=errors.get_errors();
532
            return false;
533
        }
534
        return true;
535
    }
536
537
    void test_PKinilib::pimpl::test_PKpreprocessed_entry_analyzer()
538
    {
539
        std::string err;
540
        //test real cases
541
        PKTESTER_IS_TRUE_MSG(test_key_value_classification(
542
            "fdsfds"," kljkgds fds' fds*&  ",err),err);
543
        PKTESTER_IS_TRUE_MSG(test_key_value_classification(
544
            "_"," kljkgds fds' fds*&  ",err),err);
545
        PKTESTER_IS_TRUE_MSG(test_key_value_classification(
546
            "_"," kljkg\nds f\rds' f\vd\rs*&\t\t\t\t  \t",err),err);
547
        PKTESTER_IS_TRUE_MSG(test_key_value_classification(
548
            "_","\n",err),err);
549
        PKTESTER_IS_TRUE_MSG(test_key_value_classification(
550
            "_","\r",err),err);
551
        PKTESTER_IS_TRUE_MSG(test_key_value_classification(
552
            "_","",err),err);
553
        PKTESTER_IS_TRUE_MSG(test_key_value_classification(
554
            "_","\t",err),err);
555
        PKTESTER_IS_FALSE_MSG(test_key_value_classification(
556
            "","kkkk",err),err);
557
        PKTESTER_IS_FALSE_MSG(test_key_value_classification(
558
            "fdsfds "," kljkgds fds' fds*&  ",err),err);
559
        PKTESTER_IS_FALSE_MSG(test_key_value_classification(
560
            " fdsfds "," kljkgds fds' fds*&  ",err),err);
561
        PKTESTER_IS_FALSE_MSG(test_key_value_classification(
562
            " fdsfds"," kljkgds fds' fds*&  ",err),err);
563
    }
564
426
    bool test_PKinilib::pimpl::test()
565
    bool test_PKinilib::pimpl::test()
427
    {
566
    {
428
        test_PKini_file_format_ASCII_writing();
567
        test_PKini_file_format_ASCII_writing();
429
        test_PKini_file_format_ASCII_reading();
568
        test_PKini_file_format_ASCII_reading();
569
        test_PKpreprocessed_entry_parser();
570
        test_PKpreprocessed_entry_analyzer();
430
        test_PKini_file_holder();
571
        test_PKini_file_holder();
431
        return PKunit::PKtest_manager::is_current_test_succesfull();
572
        return PKunit::PKtest_manager::is_current_test_succesfull();
432
    }
573
    }