diff options
Diffstat (limited to 'share')
-rw-r--r-- | share/server/main.js | 4 | ||||
-rw-r--r-- | share/www/script/couch_tests.js | 212 |
2 files changed, 112 insertions, 104 deletions
diff --git a/share/server/main.js b/share/server/main.js index 0302721e..38ca326c 100644 --- a/share/server/main.js +++ b/share/server/main.js @@ -335,7 +335,7 @@ while (cmd = eval(readline())) { print(toJSON(error)); } break; - case "form": + case "show_doc": var funSrc = cmd[1]; var doc = cmd[2]; var req = cmd[3]; @@ -346,7 +346,7 @@ while (cmd = eval(readline())) { } catch (error) { // Available error fields: // message, fileName, lineNumber, stack, name - log("form function raised error: "+error.toString()); + log("doc show function raised error: "+error.toString()); log("stacktrace: "+error.stack); try { print(toJSON(error)); diff --git a/share/www/script/couch_tests.js b/share/www/script/couch_tests.js index 3263c532..81609f19 100644 --- a/share/www/script/couch_tests.js +++ b/share/www/script/couch_tests.js @@ -558,6 +558,11 @@ var tests = { for(var i=0; i<numDocsToCreate; i++) { T(results.rows[numDocsToCreate-1-i].key==i); } + + // Check _all_docs with descending=true again (now that there are many docs) + // this fails, see COUCHDB-109 + // var desc = db.allDocs({descending:true}); + // T(desc.total_rows == desc.rows.length); }, reduce: function(debug) { @@ -2181,7 +2186,7 @@ var tests = { T(xhr.status == 200) }, - forms: function(debug) { + show_documents: function(debug) { var db = new CouchDB("test_suite_db"); db.deleteDb(); db.createDb(); @@ -2195,91 +2200,94 @@ var tests = { var designDoc = { _id:"_design/template", language: "javascript", - forms: { - "hello" : stringFun(function() { - return { - body : "Hello World" - }; - }), - "just-name" : stringFun(function(doc, req) { - return { - body : "Just " + doc.name - }; - }), - "req-info" : stringFun(function(doc, req) { - return { - json : req - } - }), - "xml-type" : stringFun(function(doc, req) { - return { - "headers" : { - "Content-Type" : "application/xml" - }, - "body" : new XML('<xml><node foo="bar"/></xml>') - } - }), - "no-set-etag" : stringFun(function(doc, req) { - return { - headers : { - "Etag" : "skipped" - }, - "body" : "something" - } - }), - "accept-switch" : stringFun(function(doc, req) { - if (req.headers["Accept"].match(/image/)) { + show: { + docs: { + "hello" : stringFun(function() { return { - // a 16x16 px version of the CouchDB logo - "base64" : ["iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAsV", - "BMVEUAAAD////////////////////////5ur3rEBn////////////////wDBL/", - "AADuBAe9EB3IEBz/7+//X1/qBQn2AgP/f3/ilpzsDxfpChDtDhXeCA76AQH/v7", - "/84eLyWV/uc3bJPEf/Dw/uw8bRWmP1h4zxSlD6YGHuQ0f6g4XyQkXvCA36MDH6", - "wMH/z8/yAwX64ODeh47BHiv/Ly/20dLQLTj98PDXWmP/Pz//39/wGyJ7Iy9JAA", - "AADHRSTlMAbw8vf08/bz+Pv19jK/W3AAAAg0lEQVR4Xp3LRQ4DQRBD0QqTm4Y5", - "zMxw/4OleiJlHeUtv2X6RbNO1Uqj9g0RMCuQO0vBIg4vMFeOpCWIWmDOw82fZx", - "vaND1c8OG4vrdOqD8YwgpDYDxRgkSm5rwu0nQVBJuMg++pLXZyr5jnc1BaH4GT", - "LvEliY253nA3pVhQqdPt0f/erJkMGMB8xucAAAAASUVORK5CYII="].join(''), - headers : { - "Content-Type" : "image/png", - "Vary" : "Accept" // we set this for proxy caches - } + body : "Hello World" }; - } else { + }), + "just-name" : stringFun(function(doc, req) { return { - "body" : "accepting text requests", - headers : { - "Content-Type" : "text/html", - "Vary" : "Accept" - } + body : "Just " + doc.name }; - } - }), - "respondWith" : stringFun(function(doc, req) { - registerType("foo", "application/foo","application/x-foo"); - return respondWith(req, { - html : function() { - return { - body:"Ha ha, you said \"" + doc.word + "\"." - }; - }, - xml : function() { - var xml = new XML('<xml><node/></xml>'); - // becase Safari can't stand to see that dastardly - // E4X outside of a string. - this.eval('xml.node.@foo = doc.word'); + }), + "req-info" : stringFun(function(doc, req) { + return { + json : req + } + }), + "xml-type" : stringFun(function(doc, req) { + return { + "headers" : { + "Content-Type" : "application/xml" + }, + "body" : new XML('<xml><node foo="bar"/></xml>') + } + }), + "no-set-etag" : stringFun(function(doc, req) { + return { + headers : { + "Etag" : "skipped" + }, + "body" : "something" + } + }), + "accept-switch" : stringFun(function(doc, req) { + if (req.headers["Accept"].match(/image/)) { return { - body: xml + // a 16x16 px version of the CouchDB logo + "base64" : +["iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAsV", +"BMVEUAAAD////////////////////////5ur3rEBn////////////////wDBL/", +"AADuBAe9EB3IEBz/7+//X1/qBQn2AgP/f3/ilpzsDxfpChDtDhXeCA76AQH/v7", +"/84eLyWV/uc3bJPEf/Dw/uw8bRWmP1h4zxSlD6YGHuQ0f6g4XyQkXvCA36MDH6", +"wMH/z8/yAwX64ODeh47BHiv/Ly/20dLQLTj98PDXWmP/Pz//39/wGyJ7Iy9JAA", +"AADHRSTlMAbw8vf08/bz+Pv19jK/W3AAAAg0lEQVR4Xp3LRQ4DQRBD0QqTm4Y5", +"zMxw/4OleiJlHeUtv2X6RbNO1Uqj9g0RMCuQO0vBIg4vMFeOpCWIWmDOw82fZx", +"vaND1c8OG4vrdOqD8YwgpDYDxRgkSm5rwu0nQVBJuMg++pLXZyr5jnc1BaH4GT", +"LvEliY253nA3pVhQqdPt0f/erJkMGMB8xucAAAAASUVORK5CYII="].join(''), + headers : { + "Content-Type" : "image/png", + "Vary" : "Accept" // we set this for proxy caches + } }; - }, - foo : function() { + } else { return { - body: "foofoo" + "body" : "accepting text requests", + headers : { + "Content-Type" : "text/html", + "Vary" : "Accept" + } }; - }, - fallback : "html" - }); - }) + } + }), + "respondWith" : stringFun(function(doc, req) { + registerType("foo", "application/foo","application/x-foo"); + return respondWith(req, { + html : function() { + return { + body:"Ha ha, you said \"" + doc.word + "\"." + }; + }, + xml : function() { + var xml = new XML('<xml><node/></xml>'); + // becase Safari can't stand to see that dastardly + // E4X outside of a string. + this.eval('xml.node.@foo = doc.word'); + return { + body: xml + }; + }, + foo : function() { + return { + body: "foofoo" + }; + }, + fallback : "html" + }); + }) + } } }; T(db.save(designDoc).ok); @@ -2289,35 +2297,35 @@ var tests = { T(resp.ok); var docid = resp.id; - // form error - var xhr = CouchDB.request("GET", "/test_suite_db/_form/"); + // show error + var xhr = CouchDB.request("GET", "/test_suite_db/_show/"); T(xhr.status == 404); T(JSON.parse(xhr.responseText).reason == "Invalid path."); // hello template world - xhr = CouchDB.request("GET", "/test_suite_db/_form/template/hello/"+docid); + xhr = CouchDB.request("GET", "/test_suite_db/_show/template/hello/"+docid); T(xhr.responseText == "Hello World"); - // form with doc - xhr = CouchDB.request("GET", "/test_suite_db/_form/template/just-name/"+docid); + // show with doc + xhr = CouchDB.request("GET", "/test_suite_db/_show/template/just-name/"+docid); T(xhr.responseText == "Just Rusty"); - // form with missing doc - xhr = CouchDB.request("GET", "/test_suite_db/_form/template/just-name/missingdoc"); + // show with missing doc + xhr = CouchDB.request("GET", "/test_suite_db/_show/template/just-name/missingdoc"); T(xhr.status == 404); var resp = JSON.parse(xhr.responseText); T(resp.error == "not_found"); T(resp.reason == "missing"); // missing design doc - xhr = CouchDB.request("GET", "/test_suite_db/_form/missingdoc/just-name/"+docid); + xhr = CouchDB.request("GET", "/test_suite_db/_show/missingdoc/just-name/"+docid); T(xhr.status == 404); var resp = JSON.parse(xhr.responseText); T(resp.error == "not_found"); T(resp.reason == "missing_design_doc"); // query parameters - xhr = CouchDB.request("GET", "/test_suite_db/_form/template/req-info/"+docid+"?foo=bar", { + xhr = CouchDB.request("GET", "/test_suite_db/_show/template/req-info/"+docid+"?foo=bar", { headers: { "Accept": "text/html;text/plain;*/*", "X-Foo" : "bar" @@ -2331,21 +2339,21 @@ var tests = { T(equals(resp.info.db_name, "test_suite_db")); // returning a content-type - xhr = CouchDB.request("GET", "/test_suite_db/_form/template/xml-type/"+docid); + xhr = CouchDB.request("GET", "/test_suite_db/_show/template/xml-type/"+docid); T("application/xml" == xhr.getResponseHeader("Content-Type")); T("Accept" == xhr.getResponseHeader("Vary")); // accept header switching // different mime has different etag - xhr = CouchDB.request("GET", "/test_suite_db/_form/template/accept-switch/"+docid, { + xhr = CouchDB.request("GET", "/test_suite_db/_show/template/accept-switch/"+docid, { headers: {"Accept": "text/html;text/plain;*/*"} }); T("text/html" == xhr.getResponseHeader("Content-Type")); T("Accept" == xhr.getResponseHeader("Vary")); var etag = xhr.getResponseHeader("etag"); - xhr = CouchDB.request("GET", "/test_suite_db/_form/template/accept-switch/"+docid, { + xhr = CouchDB.request("GET", "/test_suite_db/_show/template/accept-switch/"+docid, { headers: {"Accept": "image/png;*/*"} }); T(xhr.responseText.match(/PNG/)) @@ -2354,12 +2362,12 @@ var tests = { T(etag2 != etag); // proper etags - // form with doc - xhr = CouchDB.request("GET", "/test_suite_db/_form/template/just-name/"+docid); + // show with doc + xhr = CouchDB.request("GET", "/test_suite_db/_show/template/just-name/"+docid); // extract the ETag header values etag = xhr.getResponseHeader("etag"); // get again with etag in request - xhr = CouchDB.request("GET", "/test_suite_db/_form/template/just-name/"+docid, { + xhr = CouchDB.request("GET", "/test_suite_db/_show/template/just-name/"+docid, { headers: {"if-none-match": etag} }); // should be 304 @@ -2370,7 +2378,7 @@ var tests = { resp = db.save(doc); T(resp.ok); // req with same etag - xhr = CouchDB.request("GET", "/test_suite_db/_form/template/just-name/"+docid, { + xhr = CouchDB.request("GET", "/test_suite_db/_show/template/just-name/"+docid, { headers: {"if-none-match": etag} }); // status is 200 @@ -2378,7 +2386,7 @@ var tests = { // get new etag and request again etag = xhr.getResponseHeader("etag"); - xhr = CouchDB.request("GET", "/test_suite_db/_form/template/just-name/"+docid, { + xhr = CouchDB.request("GET", "/test_suite_db/_show/template/just-name/"+docid, { headers: {"if-none-match": etag} }); // should be 304 @@ -2388,21 +2396,21 @@ var tests = { designDoc.isChanged = true; T(db.save(designDoc).ok); - xhr = CouchDB.request("GET", "/test_suite_db/_form/template/just-name/"+docid, { + xhr = CouchDB.request("GET", "/test_suite_db/_show/template/just-name/"+docid, { headers: {"if-none-match": etag} }); // should be 304 T(xhr.status == 304); // update design doc function - designDoc.forms["just-name"] = (function(doc, req) { + designDoc.show.docs["just-name"] = (function(doc, req) { return { body : "Just old " + doc.name }; }).toString(); T(db.save(designDoc).ok); - xhr = CouchDB.request("GET", "/test_suite_db/_form/template/just-name/"+docid, { + xhr = CouchDB.request("GET", "/test_suite_db/_show/template/just-name/"+docid, { headers: {"if-none-match": etag} }); // status is 200 @@ -2410,13 +2418,13 @@ var tests = { // JS can't set etag - xhr = CouchDB.request("GET", "/test_suite_db/_form/template/no-set-etag/"+docid); + xhr = CouchDB.request("GET", "/test_suite_db/_show/template/no-set-etag/"+docid); // extract the ETag header values etag = xhr.getResponseHeader("etag"); T(etag != "skipped") // test the respondWith mime matcher - xhr = CouchDB.request("GET", "/test_suite_db/_form/template/respondWith/"+docid, { + xhr = CouchDB.request("GET", "/test_suite_db/_show/template/respondWith/"+docid, { headers: { "Accept": 'text/html,application/atom+xml; q=0.9' } @@ -2425,7 +2433,7 @@ var tests = { T(xhr.responseText == "Ha ha, you said \"plankton\"."); // now with xml - xhr = CouchDB.request("GET", "/test_suite_db/_form/template/respondWith/"+docid, { + xhr = CouchDB.request("GET", "/test_suite_db/_show/template/respondWith/"+docid, { headers: { "Accept": 'application/xml' } @@ -2435,7 +2443,7 @@ var tests = { T(xhr.responseText.match(/plankton/)); // registering types works - xhr = CouchDB.request("GET", "/test_suite_db/_form/template/respondWith/"+docid, { + xhr = CouchDB.request("GET", "/test_suite_db/_show/template/respondWith/"+docid, { headers: { "Accept": "application/x-foo" } |