From 7ed92ad113a306352366ec165791f4fb4b191b8a Mon Sep 17 00:00:00 2001
From: Kabir Shah
Date: Wed, 1 Mar 2017 16:21:16 -0800
Subject: [PATCH] add computed property tests, and scope prop local variable
correctly
---
dist/moon.js | 5 ++++-
dist/moon.min.js | 2 +-
src/observer/computed.js | 5 ++++-
test/js/test.js | 26 ++++++++++++++++++++++++++
4 files changed, 35 insertions(+), 3 deletions(-)
diff --git a/dist/moon.js b/dist/moon.js
index 49a7410e..8256dd9f 100644
--- a/dist/moon.js
+++ b/dist/moon.js
@@ -34,7 +34,7 @@
* @param {Object} computed
*/
var initComputed = function (instance, computed) {
- for (var prop in computed) {
+ var setComputedProperty = function (prop) {
var properties = {
get: function () {
return computed[prop].get.call(instance);
@@ -46,6 +46,9 @@
};
}
Object.defineProperty(instance.$data, prop, properties);
+ };
+ for (var propName in computed) {
+ setComputedProperty(propName);
}
};
diff --git a/dist/moon.min.js b/dist/moon.min.js
index 6c10e138..8b73e85e 100644
--- a/dist/moon.min.js
+++ b/dist/moon.min.js
@@ -5,4 +5,4 @@
* Free to use under the MIT license.
* https://kingpixil.github.io/license
*/
-!function(e,t){"object"==typeof module&&module.exports?module.exports=t():e.Moon=t()}(this,function(){"use strict";function e(e){this.instance=e}function t(t){this.$opts=t||{},this.$id=s++,this.$name=this.$opts.name||"root",this.$data=this.$opts.data||{},this.$render=this.$opts.render||L,this.$hooks=this.$opts.hooks||{},this.$methods=this.$opts.methods||{},this.$events={},this.$dom={},this.$observer=new e(this),this.$destroyed=!1,this.$initialRender=!0,this.$queued=!1,this.$opts.computed&&a(this,this.$opts.computed),this.init()}var n={},r={},o={},i={stop:"event.stopPropagation();",prevent:"event.preventDefault();",ctrl:"if(!event.ctrlKey) {return;};",shift:"if(!event.shiftKey) {return;};",alt:"if(!event.altKey) {return;};",enter:"if(event.keyCode !== 13) {return;};"},s=0,a=function(e,t){for(var n in t){var r={get:function(){return t[n].get.call(e)}};t[n].set&&(r.set=function(r){return t[n].set.call(e,r)}),Object.defineProperty(e.$data,n,r)}};e.prototype.notify=function(){p(this.instance)};var c=function(e){t.config.silent||console.log(e)},u=function(e){console.error("[Moon] ERR: "+e)},p=function(e){e.$queued||e.$destroyed||(e.$queued=!0,setTimeout(function(){e.build(),G(e,"updated"),e.$queued=!1},0))},l=function(e){for(var t={},n=e.attributes,r=n.length;r--;)t[n[r].name]=n[r].value;return e.__moon__props__=t,t},f=function(){return{shouldRender:!0,eventListeners:{}}},h=function(e){var t=/\n/g,n=/"/g,r=/\\/g;return e.replace(r,"\\\\").replace(n,'\\"').replace(t,"\\n")},v=function(e,t,n,r){var o;n.replace(/\[(\w+)\]/g,function(e,t){n=n.replace(e,"."+t)});var i=n.split(".");for(o=0;o",e.current);return r===-1?(e.tokens.push({type:"comment",value:t.slice(e.current)}),void(e.current=n)):(e.tokens.push({type:"comment",value:t.slice(e.current,r)}),void(e.current=r+3))},T=function(e){var t=e.input,n=(t.length,"/"===t.charAt(e.current+1));e.tokens.push({type:"tagStart",close:n}),e.current+=n?2:1;var r=j(e);D(e);var o="/"===t.charAt(e.current);e.tokens.push({type:"tagEnd",close:!1}),e.current+=o?2:1,o&&(e.tokens.push({type:"tagStart",close:!0}),e.tokens.push({type:"tag",value:r}),e.tokens.push({type:"attribute",value:{}}),e.tokens.push({type:"tagEnd",close:!1}))},j=function(e){for(var t=e.input,n=t.length,r=e.current;r"!==o&&" "!==o)break;r++}for(var i=r;i"===o||" "===o)break;i++}var s=t.slice(r,i);return e.tokens.push({type:"tag",value:s}),e.current=i,s},D=function(e){for(var t=e.input,n=t.length,r=e.current,o={},i="",s=/([^=\s]*)(=?)("[^"]*"|[^\s"]*)/gi;r"===a||"/"===a&&">"===c)break;i+=a,r++}i.replace(s,function(e,t,n,r){var i=r[0],s=r[r.length-1];("'"===i&&"'"===s||'"'===i&&'"'===s)&&(r=r.slice(1,-1)),r||(r=t),t&&r&&(o[t]=r)}),e.current=r,e.tokens.push({type:"attribute",value:o})},N=function(e){for(var t={type:"ROOT",children:[]},n={current:0,tokens:e};n.current1&&(s=c.shift(),a=c.join("(").slice(0,-1));var u="";r.shift();for(var p=0;p",e.current);return r===-1?(e.tokens.push({type:"comment",value:t.slice(e.current)}),void(e.current=n)):(e.tokens.push({type:"comment",value:t.slice(e.current,r)}),void(e.current=r+3))},T=function(e){var t=e.input,n=(t.length,"/"===t.charAt(e.current+1));e.tokens.push({type:"tagStart",close:n}),e.current+=n?2:1;var r=j(e);D(e);var o="/"===t.charAt(e.current);e.tokens.push({type:"tagEnd",close:!1}),e.current+=o?2:1,o&&(e.tokens.push({type:"tagStart",close:!0}),e.tokens.push({type:"tag",value:r}),e.tokens.push({type:"attribute",value:{}}),e.tokens.push({type:"tagEnd",close:!1}))},j=function(e){for(var t=e.input,n=t.length,r=e.current;r"!==o&&" "!==o)break;r++}for(var i=r;i"===o||" "===o)break;i++}var s=t.slice(r,i);return e.tokens.push({type:"tag",value:s}),e.current=i,s},D=function(e){for(var t=e.input,n=t.length,r=e.current,o={},i="",s=/([^=\s]*)(=?)("[^"]*"|[^\s"]*)/gi;r"===a||"/"===a&&">"===c)break;i+=a,r++}i.replace(s,function(e,t,n,r){var i=r[0],s=r[r.length-1];("'"===i&&"'"===s||'"'===i&&'"'===s)&&(r=r.slice(1,-1)),r||(r=t),t&&r&&(o[t]=r)}),e.current=r,e.tokens.push({type:"attribute",value:o})},N=function(e){for(var t={type:"ROOT",children:[]},n={current:0,tokens:e};n.current1&&(s=c.shift(),a=c.join("(").slice(0,-1));var u="";r.shift();for(var p=0;p{{msg}}
{{reversed}}
');
+ var computedApp = new Moon({
+ el: "#computed",
+ data: {
+ msg: "Message"
+ },
+ computed: {
+ reversed: {
+ get: function() {
+ return this.get('msg').split("").reverse().join("");
+ }
+ }
+ }
+ });
+ it('should compute at initial render', function() {
+ expect(computedAppEl.childNodes[1].textContent).to.equal("egasseM");
+ });
+ it('should update when the message updates', function() {
+ computedApp.set('msg', 'New');
+ Moon.nextTick(function() {
+ expect(computedAppEl.childNode[1].textContent).to.equal('weN');
+ });
+ });
+});
+
describe("Directive", function() {
describe('Custom Directive', function() {
createTestElement("customDirective", '');