Braden, you're right, good catch. Discussing locally how we could support "prepare --mode=..." in the most generalized form, we remembered an old suggestion to just support <mode> tags.
The benefits seem to be: - No need to add custom tag-prefix/attributes for the combinations of js-module mode=, asset mode=, etc etc - More visually apparent when reading a plugin.xml file, akin to <platforms> tag The drawbacks seem to be: - Not all descendant tags are easy to support for a given mode (ie, <dependency>) Summarizing the options currently discussed in this thread: - new <js-test-module> tag. Not general enough solution to support tests bundling <assets>, so -1 from me for this reason. - mode="..." attribute for a set of whitelisted tags (<js-module>, <asset>, ...) - <mode name="..."> tag for a set of whitelisted descendant tags (<js-module>, <asset>, ...) The last two options are really functionally equivalent, but given that we opted for <platform> tag instead of attribute, I'm also favoring a <mode> tag. -Michal On Tue, Oct 15, 2013 at 11:43 AM, Braden Shepherdson <bra...@chromium.org>wrote: > It's not true that adding these tests only creates larger binaries. They > will be fetched and parsed by the plugin loader code at app startup time. > It goes through the list of all plugins in cordova_plugins.js and loads > them all. That parses them, and runs the outermost layer, which is the > wrapping function function(require, module, exports) { ... }. So there is > still runtime memory and CPU impact. > > I support <js-test-module> tags or <js-module ... test> or whatever. > Similarly, prepare for tests. I realize we want to avoid tooling support, > but I think tooling support is a lesser evil than production performance > impact. > > Overall approach makes me happy. > > Braden > > > On Fri, Oct 11, 2013 at 9:43 PM, Michal Mocny <mmo...@chromium.org> wrote: > >> On Fri, Oct 11, 2013 at 9:08 PM, Andrew Grieve <agri...@chromium.org> >> wrote: >> >> > The eval of the jasmine interface deserves mention. Is the motivation >> > there that tests can choose to use another testing framework? That's why >> > you don't just make jasmine functions globals? >> > >> >> I was hoping the plugins would need to depend on anything but CDVTest, and >> not expect any globals. I guess, though, that CDVTest still expects the >> app to provide to a test framework and some other stuff, so in the end its >> no different. I was hedging on being able to update CDVTest in the future >> for whatever we need, and all 3rdparty plugins would not need updating. >> eval() could be used to do all sorts of clever things if we needed.. >> >> >> > >> > One nit pick just from reading your email is that this will cause the >> test >> > js-modules to be injected into apps that use the plugins. I think >> probably >> > we will want to update the tools to recognize a <js-test-module>. We >> > *could* work around it by adding the tests to new plugins that depend on >> > the thing they are testing, but I think changing the tools would be >> nicer. >> > >> >> I also mentioned splitting tests into second plugin but thats overkill >> except in extreme circumstances. Note that the tests aren't actually >> loaded unless you require them, so its just a matter of larger binaries >> which could be filtered out manually. >> >> My person preference would be to support conditional build types, which >> have come up before. ie, cordova prepare debug, cordova prepare release, >> cordova prepare test -- and plugin.xml could specify a different set of >> js-module for either. >> >> A specific <js-test-module> would be fine, but isnt "0 new tooling". >> >> Also, I forgot to mention, but we do need to add support for getting the >> full list of plugins installed, which should be trivial to add to >> modulemapper (maybe there is already a way to reach in, but I don't think >> we have a documented api for it). >> >> >> > Another nit is that it would be nice if the CordovaTests app didn't >> depend >> > on any plugins. e.g., don't have it depend on device plugin. >> > >> >> CordovaTests doesn't explicitly depend on device plugin, except that at >> the >> moment I have it printing the same info that MobileSpec does at startup. >> This could be wrapped in a try{}catch in case the require fails, but its >> good info to have in the common case. >> >> >> > >> > Overall, really like the approach! >> > >> >> Thanks! >> >> >> > >> > >> > On Fri, Oct 11, 2013 at 5:17 PM, Michal Mocny <mmo...@chromium.org> >> wrote: >> > >> >> TLDR; I've implemented a plugin testing strategy that requires 0 new >> >> tooling features, can support non-core plugins, and hopefully even >> support >> >> a variety of methods for running/reporting the test results. Super >> alpha >> >> preview, but take a look if you like the direction! >> >> >> >> >> >> NEW: CDVTest Plugin: https://github.com/mmocny/CDVTest >> >> >> >> NEW: CordovaTest App: https://github.com/mmocny/CordovaTests >> >> >> >> UPDATED: Converted three existing plugins to this "new style". Code >> is on >> >> feature branches of respective repos (cdvtest branch): >> >> org.apache.cordova.device >> >> org.apache.cordova.device-motion >> >> org.chromium.storage >> >> (must clone locally, switch to branch, and plugin add from local path) >> >> >> >> >> >> Now, any plugin that wants to join in on the fun needs to provide a >> >> <js-module >> >> src="..." name="test" /> and use this template: >> >> >> >> exports.init = function() { >> >> >> >> >> eval(require('org.apache.cordova.test.test').injectJasmineInterface(this, >> >> 'this')); >> >> >> >> // TESTS GO HERE >> >> describe(..., function() { >> >> it(...); >> >> }); >> >> }; >> >> (The eval is optional but super useful; it will inject the jasmine >> >> interface into your scope, so you don't have to type jasmine.describe, >> >> jasmine.it, etc. Not sure of any cleaner way to do this.) >> >> >> >> >> >> STEPS: >> >> 1. create a new cordova project >> >> 2. import the CordovaTest app into your www >> >> 3. add any or all of the above plugins >> >> 4. give it a run, and try out the auto tests (all pass on ipad, some >> still >> >> fail on android) >> >> >> >> Lots of work left to do, but hopefully good enough to whet your >> appetite. >> >> >> >> One thing to note, I've attempted to make CDVTest and plugin tests >> unaware >> >> of the specific jasmine version the app is hosting (so that it can be >> >> swapped without changing all plugins), but it must support the new >> style >> >> interface for async tests (ie, accept a done callback). This is the >> style >> >> that node-jasmine uses, mocha uses, and jasmine-2.0 is going to use >> (I'm >> >> using jasmine 2.0 rc3). This means that core plugin tests require some >> >> code transformations, but the net effect is cleaner tests and more >> common >> >> style with our node tools' tests. >> >> >> >> Manual tests are not implemented yet. >> >> >> >> -Michal >> >> >> >> On Fri, Oct 11, 2013 at 12:54 PM, Michal Mocny <mmo...@chromium.org> >> >> wrote: >> >> >> >> > I'm throwing something together right now, actually. I'll post my >> >> current >> >> > progress today so you can take a look. >> >> > >> >> > >> >> > On Fri, Oct 11, 2013 at 12:41 PM, Brian LeRoux <b...@brian.io> wrote: >> >> > >> >> >> Sorry keep meaning to respond. I like Michal's first step but >> growing >> >> to a >> >> >> full suite of tools. Are you currently tackling this Braden? I feel >> >> like >> >> >> it >> >> >> is related to the Medic stuff and maybe we should throw one of our >> >> guys on >> >> >> the problem fully. >> >> >> >> >> >> >> >> >> On Sep 27, 2013 5:10 PM, "Braden Shepherdson" <bra...@chromium.org> >> >> >> wrote: >> >> >> >> >> >> > Which one? >> >> >> > >> >> >> > >> >> >> > On Fri, Sep 27, 2013 at 10:09 AM, Brian LeRoux <b...@brian.io> >> wrote: >> >> >> > >> >> >> > > I really like your proposal as a starting point. Very simple but >> >> would >> >> >> > > allow for in-app testing as well as on the cmd line if we so >> wish. >> >> >> > > >> >> >> > > >> >> >> > > On Fri, Sep 27, 2013 at 3:28 PM, Michal Mocny < >> mmo...@chromium.org >> >> > >> >> >> > wrote: >> >> >> > > >> >> >> > > > I was looking over some old emails from this list on plugin >> >> testing, >> >> >> > and >> >> >> > > an >> >> >> > > > idea that was proposed way back was to ship plugin tests as a >> >> second >> >> >> > > > plugin. That way, you can chose to install tests, or not, and >> >> know >> >> >> > > > explicitly if they are being copied into your final project. >> >> >> > > > >> >> >> > > > An alternative would be to support build targets a la >> >> >> "release/debug" >> >> >> > and >> >> >> > > > have target-specific plugin.xml tags (assets, js-modules, >> >> >> > source-file..). >> >> >> > > > >> >> >> > > > -Michal >> >> >> > > > >> >> >> > > > >> >> >> > > > On Fri, Sep 27, 2013 at 4:52 AM, Brian LeRoux <b...@brian.io> >> >> wrote: >> >> >> > > > >> >> >> > > > > I think this is basically what we've been proposing for a >> while >> >> >> now. >> >> >> > > > > >> >> >> > > > > >> >> >> > > > > On Thu, Sep 26, 2013 at 8:29 PM, Michal Mocny < >> >> >> mmo...@chromium.org> >> >> >> > > > wrote: >> >> >> > > > > >> >> >> > > > > > I would suggest perhaps a simpler approach, which doesn't >> add >> >> >> > > anything >> >> >> > > > > new >> >> >> > > > > > to cordova-cli/plugman: >> >> >> > > > > > >> >> >> > > > > > - Each plugin ships with a "tests" js-module, and we >> >> document a >> >> >> > > > > convention >> >> >> > > > > > of where they should live, and what signature it should >> have >> >> >> (i.e., >> >> >> > > > > > cordova.require('plugin.name.Tests').forEach(...) ). >> >> >> > > > > > - Will need a common way to describe/report results >> (others >> >> >> have >> >> >> > > > > > mentioned TAP). >> >> >> > > > > > - Any app is free to run those plugin tests in any which >> way, >> >> >> but >> >> >> > we >> >> >> > > > > ship a >> >> >> > > > > > mobile-spec app which is one opinionated way to do so. >> >> >> > > > > > - It attempts to require the test module for each >> installed >> >> >> > plugin, >> >> >> > > > > runs >> >> >> > > > > > them, and aggregates results. >> >> >> > > > > > - It could report results to some shared server, allow >> >> >> toggling >> >> >> > of >> >> >> > > > > tests, >> >> >> > > > > > etc, but no plugin should know or care about those >> features. >> >> >> > > > > > >> >> >> > > > > > Using that as a generic base: >> >> >> > > > > > >> >> >> > > > > > - We ship a "CDVTests" (or whatever) plugin which has a >> >> bunch of >> >> >> > > > library >> >> >> > > > > > code for creating tests, and plugins can use it to >> register >> >> >> their >> >> >> > > > tests. >> >> >> > > > > > - This makes it easier to register manual tests in a >> common >> >> >> format >> >> >> > > for >> >> >> > > > > core >> >> >> > > > > > plugins, and prevents code duplication for core auto >> tests. >> >> >> > > > > > - External plugins can chose to use our testing library, >> or >> >> not. >> >> >> > > > > > >> >> >> > > > > > -Michal >> >> >> > > > > > >> >> >> > > > > > >> >> >> > > > > > On Thu, Sep 26, 2013 at 10:34 AM, Braden Shepherdson < >> >> >> > > > > bra...@chromium.org >> >> >> > > > > > >wrote: >> >> >> > > > > > >> >> >> > > > > > > Here's an off-the-top-of-my-head sketch of how we might >> do >> >> >> > Voltron >> >> >> > > > > tests: >> >> >> > > > > > > >> >> >> > > > > > > - Add a tag to plugin.xml that names each test file: >> >> >> > > > > > > <test type="automatic" src="spec/foo.js" name="Foo >> >> >> Automated" >> >> >> > > /> >> >> >> > > > > > > <test type="manual" src="spec/bar.js" name="Foo >> >> Manual" /> >> >> >> > > > > > > - Add a new command, cordova test (maybe prepare-test), >> >> that: >> >> >> > > > > > > - Ignores the top-level www. >> >> >> > > > > > > - Instead copies in a basic testing index.html >> similar >> >> to >> >> >> the >> >> >> > > > > current >> >> >> > > > > > > mobile-spec's >> >> >> > > > > > > - That index reads a file akin to cordova_plugins.js >> >> >> > > > > > (cordova_tests.js, >> >> >> > > > > > > maybe?) generated by the CLI, containing the info from >> the >> >> >> <test> >> >> >> > > > tags. >> >> >> > > > > > > - It has navigation similar to the current >> mobile-spec, >> >> >> with >> >> >> > > > > buttons >> >> >> > > > > > > for the automatic and manual sections. Auto has "All" >> and >> >> then >> >> >> > each >> >> >> > > > > > module, >> >> >> > > > > > > manual just has the list of modules. >> >> >> > > > > > > >> >> >> > > > > > > Thoughts? >> >> >> > > > > > > >> >> >> > > > > > > Braden >> >> >> > > > > > > >> >> >> > > > > > > >> >> >> > > > > > > On Thu, Sep 26, 2013 at 6:33 AM, Carlos Santana < >> >> >> > > > csantan...@gmail.com >> >> >> > > > > > > >wrote: >> >> >> > > > > > > >> >> >> > > > > > > > I like the idea can we call mobilespec now >> >> cordova-voltron >> >> >> and >> >> >> > be >> >> >> > > > DRY >> >> >> > > > > > and >> >> >> > > > > > > > use the tests form the plugins. >> >> >> > > > > > > > >> >> >> > > > > > > > Voltron by itself creates an App that tests only core, >> >> but >> >> >> as >> >> >> > you >> >> >> > > > > > > > use plugman to add plugins to voltron it has more test >> >> >> cases. >> >> >> > > > > > > > >> >> >> > > > > > > > It would not be a bad idea to enhance plugin.xml in >> the >> >> >> future >> >> >> > to >> >> >> > > > > > include >> >> >> > > > > > > > information about testing (i.e. Directory containing >> >> tests >> >> >> > files, >> >> >> > > > > test >> >> >> > > > > > > > command, etc..) >> >> >> > > > > > > > >> >> >> > > > > > > > --Carlos >> >> >> > > > > > > > >> >> >> > > > > > > > On Thursday, September 26, 2013, Anis KADRI wrote: >> >> >> > > > > > > > >> >> >> > > > > > > > > What's the challenge of having us use the tests that >> >> come >> >> >> > with >> >> >> > > > the >> >> >> > > > > > > > > individual plugins ? >> >> >> > > > > > > > > >> >> >> > > > > > > > > On Thu, Sep 26, 2013 at 8:13 AM, David Kemp < >> >> >> > drk...@google.com >> >> >> > > > > > > > <javascript:;>> >> >> >> > > > > > > > > wrote: >> >> >> > > > > > > > > > Currently, the automated test system that we have >> >> >> running >> >> >> > > > > (derived >> >> >> > > > > > > from >> >> >> > > > > > > > > > Medic) uses only the mobilespec tests. It does not >> >> yet >> >> >> use >> >> >> > > > tests >> >> >> > > > > > > > > collected >> >> >> > > > > > > > > > from the plugins. Its been talked about, but not >> gone >> >> >> > > anywhere. >> >> >> > > > > > > > > > >> >> >> > > > > > > > > > David Kemp >> >> >> > > > > > > > > > >> >> >> > > > > > > > > > >> >> >> > > > > > > > > > On Wed, Sep 25, 2013 at 7:58 PM, Jesse < >> >> >> > > > purplecabb...@gmail.com >> >> >> > > > > > > > <javascript:;>> >> >> >> > > > > > > > > wrote: >> >> >> > > > > > > > > > >> >> >> > > > > > > > > >> Yeah, I have pushed some changes to mobile-spec, >> and >> >> >> when >> >> >> > I >> >> >> > > > did >> >> >> > > > > I >> >> >> > > > > > > also >> >> >> > > > > > > > > >> copied the tests into the plugin involved. >> >> >> > > > > > > > > >> Until we get the magic test runner happening, I >> >> think >> >> >> we >> >> >> > > just >> >> >> > > > > keep >> >> >> > > > > > > > > >> duplicating. >> >> >> > > > > > > > > >> >> >> >> > > > > > > > > >> @purplecabbage >> >> >> > > > > > > > > >> risingj.com >> >> >> > > > > > > > > >> >> >> >> > > > > > > > > >> >> >> >> > > > > > > > > >> On Wed, Sep 25, 2013 at 4:38 PM, Steven Gill < >> >> >> > > > > > > stevengil...@gmail.com >> >> >> > > > > > > > <javascript:;> >> >> >> > > > > > > > > > >> >> >> > > > > > > > > >> wrote: >> >> >> > > > > > > > > >> >> >> >> > > > > > > > > >> > We copied over tests into plugins when we first >> >> broke >> >> >> > them >> >> >> > > > > out, >> >> >> > > > > > > but >> >> >> > > > > > > > I >> >> >> > > > > > > > > >> don't >> >> >> > > > > > > > > >> > believe they have been updated. >> >> >> > > > > > > > > >> > >> >> >> > > > > > > > > >> > I would say for now to just add the tests to >> >> mobile >> >> >> > spec, >> >> >> > > > and >> >> >> > > > > > > > > possibly in >> >> >> > > > > > > > > >> > the future we go all voltron to build mobile >> spec >> >> and >> >> >> > keep >> >> >> > > > > tests >> >> >> > > > > > > > with >> >> >> > > > > > > > > >> their >> >> >> > > > > > > > > >> > corresponding plugins. >> >> >> > > > > > > > > >> > >> >> >> > > > > > > > > >> > >> >> >> > > > > > > > > >> > On Wed, Sep 25, 2013 at 4:22 PM, Joe Bowser < >> >> >> > > > > bows...@gmail.com >> >> >> > > > > > > > <javascript:;>> >> >> >> > > > > > > > > wrote: >> >> >> > > > > > > > > >> > >> >> >> > > > > > > > > >> > > Hey >> >> >> > > > > > > > > >> > > >> >> >> > > > > > > > > >> > > Right now, I'm working on a weird file issue >> >> that >> >> >> > > requires >> >> >> > > > > me >> >> >> > > > > > to >> >> >> > > > > > > > > >> > > update mobile-spec, but I'm wondering where >> the >> >> >> tests >> >> >> > > > should >> >> >> > > > > > > live. >> >> >> > > > > > > > > >> > > Should it all keep living in mobile-spec, or >> is >> >> it >> >> >> > with >> >> >> > > > the >> >> >> > > > > > > > plugins. >> >> >> > > > > > > > > >> > > And if it's with the plugins, will there be >> >> >> scripts to >> >> >> > > > > > assemble >> >> >> > > > > > > > > >> > > mobile-spec all Voltron style? >> >> >> > > > > > > > > >> > > >> >> >> > > > > > > > > >> > > This came up earlier, but I haven't found any >> >> fix >> >> >> that >> >> >> > > > > needed >> >> >> > > > > > a >> >> >> > > > > > > > > >> > > mobile-spec test. (Many that need native >> >> testing, >> >> >> > like >> >> >> > > > > > > recursive >> >> >> > > > > > > > > file >> >> >> > > > > > > > > >> > > copy, etc). Any thoughts? >> >> >> > > > > > > > > >> > > >> >> >> > > > > > > > > >> > > Joe >> >> >> > > > > > > > > >> > > >> >> >> > > > > > > > > >> > >> >> >> > > > > > > > > >> >> >> >> > > > > > > > > >> >> >> > > > > > > > >> >> >> > > > > > > > >> >> >> > > > > > > > -- >> >> >> > > > > > > > Carlos Santana >> >> >> > > > > > > > <csantan...@gmail.com> >> >> >> > > > > > > > >> >> >> > > > > > > >> >> >> > > > > > >> >> >> > > > > >> >> >> > > > >> >> >> > > >> >> >> > >> >> >> >> >> > >> >> > >> >> >> > >> > >> > >