Hi all, very interesting thread!
I created jsDAV, so I might be able to shed some light here... ;-)
Primarily, jsDAV started as a port of the excellent SabreDav (
http://code.google.com/p/sabredav/) to NodeJS. I started working on this in my spare time, because I figured that Node's async I/O is just a perfect fit for potentially high-volume filesystem access over HTTP and deserved an - at least - decent implementation of the spec.
I used Litmus (
http://www.webdav.org/neon/litmus/) primarily to test the implementation during development and for the integration testing I used Mac OSX Finder and now Cloud9 as well. This combination I found most robust. That's also why you don't see any unit tests (yet!), because Litmus is in fact a standalone suite of unit tests.
The cool thing about jsDAV imho is the fact that it supports multiple backends (the latests commits on master support sftp, for example, but could also be Mysql, redis, whatever!) and plugins that are relatively easy to write (like codesearch, filesearch, auth, mount, etc) and provide the possibility to extend jsDAV's functionality with, for example, more WebDAV RFC's.
When we were to choose a filesystem connector to load and save files over HTTP for the Cloud9 IDE, WebDAV seemed the most obvious choice, which meant I could spend more time on making the library more robust and stable. We've been using it in production for months now and found one minor issue, so no stability issues whatsoever (fingers crossed!) and wonderful performance.
A big missing feature that I've been planning to work on for months is PROPPATCH request support, CalDAV and improved documentation. The code is (almost) fully documented, but I haven't gotten around to generate a nice set of Github pages for it yet. CalDAV is just a lot of work. The RFC is smaller than WebDAV (incl. extensions) and the SabreDAV implementation as well.
@Mikeal "You basically just implement what Mac OS X Finder expects and ignore all the LOCK requests. It's not that hard."
Dare I say - without an intention of offending you - that that's just a bit too naive a statement? You can perfectly handle LOCK request for the finder, but it will not even send them if you simply don't broadcast locking support in response to an OPTIONS request (e.g. res.headers["DAV"] = "1,3,extended-mkcol";). I agree that implementing locking is not trivial at all, but I gave it a try anyway. Beware, though, that the locks jsDAV plugin hasn't been tested yet and is not used/ stress-tested in production.
Important note is that the 0.4+ versions of NodeJS can NOT handle HTTP requests from Litmus (the WebDAV testing tool), which makes it impossible for me to test jsDAV properly against these versions of Node. This is a real shame, also to the NodeJS developers themselves, because it's such an easy tool to include in an automated build system. I hope that this issue will be resolved in the near future.
I hope I answered some - if not all - of your questions!
Regards,
Mike de Boer - Ajax.org / Cloud9