RPM Package Manager, CVS Repository http://rpm5.org/cvs/ ____________________________________________________________________________
Server: rpm5.org Name: Jeff Johnson Root: /v/rpm/cvs Email: [email protected] Module: rpm Date: 11-Dec-2009 03:57:17 Branch: HEAD Handle: 2009121102571700 Modified files: rpm/js/tscripts Mi.js Log: - js: add unit tests for most of rpmmi access, including patterns. Summary: Revision Changes Path 1.9 +83 -9 rpm/js/tscripts/Mi.js ____________________________________________________________________________ patch -p0 <<'@@ .' Index: rpm/js/tscripts/Mi.js ============================================================================ $ cvs diff -u -r1.8 -r1.9 Mi.js --- rpm/js/tscripts/Mi.js 7 Jul 2009 23:22:23 -0000 1.8 +++ rpm/js/tscripts/Mi.js 11 Dec 2009 02:57:17 -0000 1.9 @@ -1,25 +1,99 @@ if (loglvl) print("--> Mi.js"); +var RPMDBI_PACKAGES = 0; +var RPMDBI_LABEL = 2; var RPMTAG_NAME = 1000; +var RPMTAG_VERSION = 1001; +var RPMTAG_RELEASE = 1002; +var RPMTAG_ARCH = 1022; +var RPMTAG_NVRA = 1196; + var N = "popt"; +var V = ""; +var R = ""; +var A = ""; +var NVRA = N; +var hdrNum = 0; + +var ts = new Ts(); -// var mi = ts.mi(RPMTAG_NAME, N); -var mi = new Mi(ts, RPMTAG_NAME, N); +var mi = new Mi(ts); ack("typeof mi;", "object"); ack("mi instanceof Mi;", true); ack("mi.debug = 1;", 1); ack("mi.debug = 0;", 0); +delete mi; + +// --- Iterate over packages, counting, grab hdrNum and NVRA on the fly. +var mi = new Mi(ts); +var bingo = 0; +var npkgs = 0; +for (var [dbkey,h] in Iterator(mi)) { +// nack("h.instance", 0); +// ack("h.instance", mi.instance); + ack("mi.instance != 0", true); + ack("mi.instance < 0x0000ffff", true); + if (h[RPMTAG_NAME] == N) { + hdrNum = mi.instance; + V = h[RPMTAG_VERSION]; + R = h[RPMTAG_RELEASE]; + A = h[RPMTAG_ARCH]; + NVRA = h[RPMTAG_NVRA]; + } + npkgs++; + delete h; + bingo = 1; +} +ack("bingo", 1); +nack("npkgs", 0); +ack("hdrNum != 0", true); +ack("hdrNum < 0x0000ffff", true); +nack("NVRA", N); +delete mi; + +function doITER(ts, tag, key) { + this.mi = new Mi(ts, tag, key); + this.bingo = 0; + this.dbkey = null; + this.h = null; + for ([this.dbkey,this.h] in Iterator(this.mi)) { + ack("this.h[RPMTAG_NAME]", N); + ack("this.h[RPMTAG_NVRA]", NVRA); + ack("this.mi.instance", hdrNum); + delete this.h; + this.bingo = 1; + } + delete this.mi; + ack("this.bingo", 1); + return true; +} + +// --- Retrieve by N and NVRA string key(s). +doITER(ts, RPMTAG_NAME, N); +doITER(ts, RPMTAG_NVRA, NVRA); + +// --- Retrieve by N, N-V, N-V-R, and N-V-R.A strings. +doITER(ts, RPMDBI_LABEL, N); +doITER(ts, RPMDBI_LABEL, N+"-"+V); +doITER(ts, RPMDBI_LABEL, N+"-"+V+"-"+R); +doITER(ts, RPMDBI_LABEL, N+"-"+V+"-"+R+"."+A); -ack("mi.length", 1); -ack("mi.count", 1); -ack("mi.instance", 0); // zero before iterating -ack("mi.pattern(RPMTAG_NAME, N)", true); +// --- Retrieve by N pattern. +doITER(ts, RPMDBI_LABEL, "\^"+N+"-[0-9].*$"); +doITER(ts, RPMDBI_LABEL, "\^"+N+"-[0-9].*"+"\."+A+"$"); -for (var [key,h] in Iterator(mi)) { - nack("mi.instance", 0); // non-zero when iterating +// --- Retrieve by N with a mire pattern selector. +var mi = new Mi(ts, RPMTAG_NAME, N) +bingo = 0; +// XXX FIXME: rpmmi iterator w patterns is busted +// ack("mi.pattern(RPMTAG_VERSION, V)", true); +for (var [dbkey,h] in Iterator(mi)) { ack("h.name", N); + bingo = 1; } +ack("bingo", 1); +delete mi; -delete mi; // GCZeal? +delete ts; if (loglvl) print("<-- Mi.js"); @@ . ______________________________________________________________________ RPM Package Manager http://rpm5.org CVS Sources Repository [email protected]
