00001
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
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
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 }