tests/api_transdb.cc

Go to the documentation of this file.
00001 
00004 /* Copyright (C) 2006 Olly Betts
00005  *
00006  * This program is free software; you can redistribute it and/or modify
00007  * it under the terms of the GNU General Public License as published by
00008  * the Free Software Foundation; either version 2 of the License, or
00009  * (at your option) any later version.
00010  *
00011  * This program is distributed in the hope that it will be useful,
00012  * but WITHOUT ANY WARRANTY; without even the implied warranty of
00013  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00014  * GNU General Public License for more details.
00015  *
00016  * You should have received a copy of the GNU General Public License
00017  * along with this program; if not, write to the Free Software
00018  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
00019  */
00020 
00021 #include <config.h>
00022 
00023 #include "api_transdb.h"
00024 
00025 #include <xapian.h>
00026 
00027 #include "apitest.h"
00028 #include "testutils.h"
00029 
00030 using namespace std;
00031 
00033 DEFINE_TESTCASE(badtransaction1, transactions) {
00034     Xapian::WritableDatabase db(get_writable_database("apitest_simpledata"));
00035 
00036     TEST_EXCEPTION(Xapian::InvalidOperationError, db.commit_transaction());
00037     TEST_EXCEPTION(Xapian::InvalidOperationError, db.cancel_transaction());
00038 
00039     db.begin_transaction();
00040     TEST_EXCEPTION(Xapian::InvalidOperationError, db.begin_transaction());
00041     db.commit_transaction();
00042 
00043     TEST_EXCEPTION(Xapian::InvalidOperationError, db.commit_transaction());
00044     TEST_EXCEPTION(Xapian::InvalidOperationError, db.cancel_transaction());
00045 
00046     db.begin_transaction();
00047     TEST_EXCEPTION(Xapian::InvalidOperationError, db.begin_transaction());
00048     db.cancel_transaction();
00049 
00050     TEST_EXCEPTION(Xapian::InvalidOperationError, db.commit_transaction());
00051     TEST_EXCEPTION(Xapian::InvalidOperationError, db.cancel_transaction());
00052 
00053     db.begin_transaction();
00054     db.commit_transaction();
00055 
00056     db.begin_transaction();
00057     db.cancel_transaction();
00058 
00059     return true;
00060 }
00061 
00063 DEFINE_TESTCASE(committransaction1, transactions) {
00064     Xapian::WritableDatabase db(get_writable_database("apitest_simpledata"));
00065 
00066     Xapian::doccount docs = db.get_doccount();
00067     db.begin_transaction();
00068     Xapian::Document doc;
00069     doc.set_data("testing");
00070     doc.add_term("befuddlement");
00071     db.add_document(doc);
00072     TEST_EXCEPTION(Xapian::InvalidOperationError, db.begin_transaction());
00073     TEST_EQUAL(db.get_doccount(), docs + 1);
00074     TEST_EQUAL(db.get_termfreq("befuddlement"), 1);
00075     db.commit_transaction();
00076     TEST_EQUAL(db.get_doccount(), docs + 1);
00077     TEST_EQUAL(db.get_termfreq("befuddlement"), 1);
00078 
00079     return true;
00080 }
00081 
00083 DEFINE_TESTCASE(canceltransaction1, transactions) {
00084     Xapian::WritableDatabase db(get_writable_database("apitest_simpledata"));
00085 
00086     Xapian::doccount docs = db.get_doccount();
00087     db.begin_transaction();
00088     Xapian::Document doc;
00089     doc.set_data("testing");
00090     doc.add_term("befuddlement");
00091     db.add_document(doc);
00092     TEST_EXCEPTION(Xapian::InvalidOperationError, db.begin_transaction());
00093     TEST_EQUAL(db.get_doccount(), docs + 1);
00094     TEST_EQUAL(db.get_termfreq("befuddlement"), 1);
00095     db.cancel_transaction();
00096     TEST_EQUAL(db.get_doccount(), docs);
00097     TEST_EQUAL(db.get_termfreq("befuddlement"), 0);
00098 
00099     return true;
00100 }
00101 
00103 //  transaction.
00104 DEFINE_TESTCASE(canceltransaction2, transactions) {
00105     Xapian::WritableDatabase db(get_writable_database("apitest_simpledata"));
00106 
00107     Xapian::doccount docs = db.get_doccount();
00108     Xapian::Document doc0;
00109     doc0.set_data("pending");
00110     doc0.add_term("pending_update");
00111     Xapian::docid docid = db.add_document(doc0);
00112 
00113     db.begin_transaction();
00114     TEST_EQUAL(db.get_doccount(), docs + 1);
00115     Xapian::Document doc;
00116     doc.set_data("testing");
00117     doc.add_term("befuddlement");
00118     db.add_document(doc);
00119     TEST_EQUAL(db.get_doccount(), docs + 2);
00120     db.cancel_transaction();
00121 
00122     TEST_EQUAL(db.get_doccount(), docs + 1);
00123     TEST(db.term_exists("pending_update"));
00124     Xapian::Document doc_out = db.get_document(docid);
00125     TEST_EQUAL(doc_out.get_data(), "pending");
00126 
00127     return true;
00128 }

Documentation for Xapian (version 1.0.20).
Generated on 28 Apr 2010 by Doxygen 1.5.2.