Skip to content

Commit

Permalink
Merge pull request #361 from peuter/feature/tests
Browse files Browse the repository at this point in the history
more unit tests
  • Loading branch information
ChristianMayer committed Jul 10, 2016
2 parents cd39521 + db4a8e5 commit 0b79f33
Show file tree
Hide file tree
Showing 11 changed files with 225 additions and 45 deletions.
12 changes: 6 additions & 6 deletions src/structure/pure/Audio.js
Expand Up @@ -41,8 +41,8 @@ define( ['_common'], function( design ) {
'id' : $e.attr('id'),
'width' : $e.attr('width'),
'height' : $e.attr('height'),
'autoplay': $e.attr('autoplay'),
'loop' : $e.attr('loop'),
'autoplay': $e.attr('autoplay') === "autoplay" || $e.attr('autoplay') === "true",
'loop' : $e.attr('loop') === "loop" || $e.attr('loop') === "true",
'threshold_value' : $e.attr('threshold_value' ) || 1
} );

Expand All @@ -51,8 +51,8 @@ define( ['_common'], function( design ) {
if( data.width ) style += 'width:' + data.width + ';';
if( data.height ) style += 'height:' + data.height + ';';
if( style != '' ) style = 'style="' + style + '"';
var autoplay = (data.autoplay == 'true') ? ' autoplay ' : '';
var loop = (data.loop == 'true') ? ' loop ' : '';
var autoplay = (data.autoplay) ? ' autoplay ' : '';
var loop = (data.loop) ? ' loop ' : '';
var actor = '<div class="actor"><audio id="' + $e.attr('id') + '" ' + autoplay + loop + style + ' controls> <source src="' +$e.attr('src') + '" > </audio> </div>';
return ret_val + actor + '</div>';
},
Expand All @@ -63,11 +63,11 @@ define( ['_common'], function( design ) {
var value = basicdesign.defaultUpdate( e, d, element, true, element.parent().attr('id') );
var data = templateEngine.widgetDataGetByElement( element );
var on = templateEngine.map( data[ 'threshold_value' ], data['mapping'] );
if (value >= on){
if (value >= on) {
var audioWidget = document.getElementById(data['id']);
if (audioWidget.paused == true)
audioWidget.play();
};
}
}
});

Expand Down
16 changes: 11 additions & 5 deletions src/structure/pure/DesignToggle.js
Expand Up @@ -61,20 +61,26 @@ define( ['_common'], function( design ) {
var oldDesign = $('.value',$this).text();
var newDesign = designs[ (designs.indexOf(oldDesign) + 1) % designs.length ];

var URL = window.location.href;
var URL = this.getLocation();
var regexp = new RegExp("design="+oldDesign)
if (URL.search(regexp) != -1) { // has URL-parameter design
window.location.href=URL.replace(regexp, "design="+newDesign);
this.setLocation(URL.replace(regexp, "design="+newDesign));
}
else {
if (URL.indexOf("?") != -1) { // has other parameters, append design
window.location.href=URL+"&design="+newDesign;
this.setLocation(URL+"&design="+newDesign);
}
else { // has now parameters
window.location.href=URL+"?design="+newDesign;
this.setLocation(URL+"?design="+newDesign);
}
}
}
},
getLocation : function() {
return window.location.href;
},
setLocation : function(loc) {
window.location.href = loc;
}
});

}); // end define
30 changes: 0 additions & 30 deletions src/transforms/TransformKnx.js
Expand Up @@ -475,34 +475,4 @@ define( ['TransformDefault'], function(Transform ) {
*/
'temp dummy' : {link:'1.001'}
} );

//////
// To be deleted later: a test function to check if the coding is consistent
function TEST( DPT, Bytes )
{
var maxErr = 5;
DPT = 'DPT:' + DPT;
for( i = 0; i < Math.pow(2,8*Bytes); i++ )
{
var v = i.toString( 16 );
v = new Array(2*Bytes - v.length + 1).join('0') + v;
var test = Transform[DPT].encode(
Transform[DPT].decode(v)
);
//console.log(i,v,test);
if( v != test )
{
var v2 = Transform[DPT].decode(v);
var test2 = Transform[DPT].decode(
Transform[DPT].encode(v2)
);
if( v2 != test2 )
{
console.log( i, v, test, Transform[DPT].decode(v), v2, test2, maxErr );
if( (--maxErr) < 0 ) return maxErr;
}
}
}
}

}); // end define
2 changes: 1 addition & 1 deletion src/transforms/TransformOpenHab.js
Expand Up @@ -161,7 +161,7 @@ define( ['TransformDefault'], function(Transform ) {
decode : function(hsbString) {
// decode HSV/HSB to RGB
var hsb = hsbString.split(",");
var h = hsb[0], s = hsb[1], v = hsb[2];
var h = parseFloat(hsb[0]), s = parseFloat(hsb[1]), v = parseFloat(hsb[2]);
var r, g, b, i, f, p, q, t;

// h = h / 360;
Expand Down
16 changes: 16 additions & 0 deletions test/karma/helper-spec.js
Expand Up @@ -40,6 +40,22 @@ define([], function() {
return result;
}
};
},

toHaveAttribute: function() {
return {
compare: function(actual, expected) {
var result = {};
result.pass = actual.hasAttribute(expected);
if (result.pass) {
result.message = "Expected " + actual.tagName + " not to have attribute "+expected;
}
else{
result.message = "Expected " + actual.tagName + " to have attribute "+expected+", but it does not";
}
return result;
}
};
}
};

Expand Down
55 changes: 54 additions & 1 deletion test/karma/structure/pure/Audio-spec.js
Expand Up @@ -15,15 +15,68 @@ define( ['TemplateEngine', '_common', 'widget_audio'], function(engine, design)
var creator = design.basicdesign.getCreator("audio");

var xml = document.createElement('template');
xml.innerHTML = '<audio><label>Test</label></audio>';
xml.innerHTML = '<audio id="test"><label>Test</label></audio>';
xml = xml.firstChild;
var widget = $(creator.create(xml, 'id_0', null, 'audio'));

expect(widget).toHaveClass('audio');
expect(widget.find("div.label").text()).toBe('Test');

var audio = widget.find("audio").get(0);

expect(audio).not.toHaveAttribute("autoplay");
expect(audio).not.toHaveAttribute("loop");
expect(audio).not.toHaveAttribute("style");
expect(audio).toHaveAttribute("controls");
var data = templateEngine.widgetDataGet('id_0');
expect(data.path).toBe("id_0");


xml.innerHTML = '<audio id="test" width="50%" height="50%" autoplay="true" loop="true"><label>Test</label></audio>';
xml = xml.firstChild;
var widget = $(creator.create(xml, 'id_0', null, 'audio'));

expect(widget).toHaveClass('audio');
expect(widget.find("div.label").text()).toBe('Test');

var audio = widget.find("audio").get(0);
expect(audio).toHaveAttribute("autoplay");
expect(audio).toHaveAttribute("loop");
expect(audio).toHaveAttribute("controls");
expect($(audio).attr('style')).toBe('width:50%;height:50%;');
expect($(audio).attr('id')).toBe('test');

});

it("should update a audio item", function() {
var creator = design.basicdesign.getCreator("audio");

var xml = document.createElement('template');
xml.innerHTML = '<audio id="test"><address transform="DPT:1.001" mode="readwrite">12/7/37</address></audio>';
xml = xml.firstChild;
var audioString = creator.create(xml, 'id_0', null, 'audio');
var container =document.createElement('div');
container.setAttribute("class","widget_container");
container.setAttribute("id", 'id_0');
container.innerHTML = audioString;
document.body.appendChild(container);

var actor = document.getElementById('test');
actor.paused = true;
actor.play = jasmine.createSpy('playspy');

creator.update.call(container.children[0],'12/7/37', 0);
expect(actor.play).not.toHaveBeenCalled();

creator.update.call(container.children[0],'12/7/37', 1);
expect(actor.play).toHaveBeenCalled();
actor.play.calls.reset();

actor.paused = false;
creator.update.call(container.children[0],'12/7/37', 1);
expect(actor.play).not.toHaveBeenCalled();

document.body.removeChild(container);
});
});
});
40 changes: 39 additions & 1 deletion test/karma/structure/pure/Designtoggle-spec.js
Expand Up @@ -9,7 +9,6 @@ define( ['TemplateEngine', '_common', 'widget_designtoggle'], function(engine, d
var templateEngine = engine.getInstance();

it("should test the designtoggle creator", function() {

var creator = design.basicdesign.getCreator("designtoggle");

var xml = document.createElement('template');
Expand All @@ -23,5 +22,44 @@ define( ['TemplateEngine', '_common', 'widget_designtoggle'], function(engine, d
var data = templateEngine.widgetDataGet('id_0');
expect(data.path).toBe("id_0");
});

it('should trigger the switch action', function() {

spyOn($,'getJSON').and.callFake(function(path, callback) {
callback(['metal','pure']);
});
var loc = window.location.href;
var creator = design.basicdesign.getCreator("designtoggle");
spyOn(creator, 'setLocation');

var xml = document.createElement('template');
xml.innerHTML = '<designtoggle><label>Test</label></designtoggle>';
xml = xml.firstChild;
var widgetString = creator.create(xml, 'id_0', null, 'designtoggle');
var container =document.createElement('div');
container.setAttribute("class","widget_container");
container.setAttribute("id", 'id_0');
container.innerHTML = widgetString;
document.body.appendChild(container);
var actor = container.children[0].querySelectorAll('.actor')[0];
expect(actor).not.toBe(null);

//canceled call
creator.action('id_0', actor, true);
expect(creator.setLocation).not.toHaveBeenCalled();

creator.action('id_0', actor, false);
expect(creator.setLocation).toHaveBeenCalledWith(loc+"?design=metal");

spyOn(creator,'getLocation').and.returnValue(loc+"?design=pure");
creator.action('id_0', actor, false);
expect(creator.setLocation).toHaveBeenCalledWith(loc+"?design=metal");

creator.getLocation.and.returnValue(loc+"?other=parameter");
creator.action('id_0', actor, false);
expect(creator.setLocation).toHaveBeenCalledWith(loc+"?other=parameter&design=metal");

document.body.removeChild(container);
});
});
});
39 changes: 39 additions & 0 deletions test/karma/structure/pure/Group-spec.js
Expand Up @@ -18,11 +18,50 @@ define( ['TemplateEngine', '_common', 'widget_group'], function(engine, design)
var widget = $(creator.create(xml, 'id_0', null, 'group'));

expect(widget).toHaveClass('group');
expect(widget).toHaveClass('widget');

var data = templateEngine.widgetDataGet('id_0');
expect(data.colspan).toBe(6);
expect(data.colspanM).toBe(6);
expect(data.colspanS).toBe(12);

xml.innerHTML = '<group nowidget="true" class="test" flavour="potassium" align="right" name="Test" target="target"><text/></group>';
xml = xml.firstChild;
var widget = $(creator.create(xml, 'id_0', null, 'group'));

expect(widget).toHaveClass('group');
expect(widget).toHaveClass('custom_test');
expect(widget).toHaveClass('flavour_potassium');
expect(widget).toHaveClass('clickable');
expect(widget).not.toHaveClass('widget');

expect($(widget.find('h2').get(0)).text()).toBe("Test")
});

it('should trigger the group action', function() {

spyOn(templateEngine, 'scrollToPage');
var creator = design.basicdesign.getCreator("group");

var xml = document.createElement('template');
xml.innerHTML = '<group target="target"></group>';
xml = xml.firstChild;
var widgetString = creator.create(xml, 'id_0', null, 'group');
var container =document.createElement('div');
container.setAttribute("class","widget_container");
container.setAttribute("id", 'id_0');
container.innerHTML = widgetString;
document.body.appendChild(container);
var actor = container.children[0].querySelectorAll('.actor')[0];
expect(actor).not.toBe(null);

//canceled call
creator.action('id_0', actor, true);
expect(templateEngine.scrollToPage).not.toHaveBeenCalled();

creator.action('id_0', actor, false);
expect(templateEngine.scrollToPage).toHaveBeenCalledWith("target");
document.body.removeChild(container);
});
});
});
26 changes: 26 additions & 0 deletions test/karma/transform/Default-spec.js
@@ -0,0 +1,26 @@
/**
* Test the default transforms
*
* @author Tobias Bräutigam
* @since 2016
*/
define(['TransformDefault'], function(Transform) {

describe('checking default transforms', function() {

it('should transform int values', function() {
expect(Transform.Transform['int'].encode(0)).toEqual('0');
expect(Transform.Transform['int'].decode("0")).toEqual(0);
});

it('should transform float values', function() {
expect(Transform.Transform['float'].encode(0.5)).toEqual('0.5');
expect(Transform.Transform['float'].decode("0.5")).toEqual(0.5);
});

it('should transform raw values', function() {
expect(Transform.Transform['raw'].encode(0.5)).toEqual(0.5);
expect(Transform.Transform['raw'].decode("0.5")).toEqual("0.5");
});
});
});
19 changes: 19 additions & 0 deletions test/karma/transform/OpenHab-spec.js
Expand Up @@ -31,8 +31,12 @@ define(['TransformDefault', 'TransformOpenHab'], function(Transform) {
it('should transform rollershutter values', function() {
expect(Transform.Transform['OH:rollershutter'].encode(0)).toEqual('UP');
expect(Transform.Transform['OH:rollershutter'].encode(1)).toEqual('DOWN');
expect(Transform.Transform['OH:rollershutter'].encode('UP')).toEqual('UP');
expect(Transform.Transform['OH:rollershutter'].decode('DOWN')).toEqual(1);
expect(Transform.Transform['OH:rollershutter'].decode('UP')).toEqual(0);
expect(Transform.Transform['OH:rollershutter'].decode(0)).toEqual(0);
expect(Transform.Transform['OH:rollershutter'].decode('Uninitialized')).toEqual(0);
expect(Transform.Transform['OH:rollershutter'].decode('NaN')).toEqual(0);
});

it('should transform dimmer values', function() {
Expand Down Expand Up @@ -62,6 +66,7 @@ define(['TransformDefault', 'TransformOpenHab'], function(Transform) {
var dateString = "2016-12-24T16:13:52Z";
var date = new Date(dateString);
expect(Transform.Transform['OH:datetime'].encode(date)).toEqual(date.toLocaleDateString());
expect(Transform.Transform['OH:datetime'].encode(dateString)).toEqual(dateString);
expect(Transform.Transform['OH:datetime'].decode(dateString)).toEqual(date);

expect(Transform.Transform['OH:datetime'].decode('NaN')).toEqual("-");
Expand All @@ -71,6 +76,7 @@ define(['TransformDefault', 'TransformOpenHab'], function(Transform) {
it('should transform time values', function() {
var date = new Date("2016-12-24T16:13:52Z");
expect(Transform.Transform['OH:time'].encode(date)).toEqual(date.toLocaleTimeString());
expect(Transform.Transform['OH:time'].encode(date.toLocaleTimeString())).toEqual(date.toLocaleTimeString());
date = new Date();
date.setHours(12);
date.setMinutes(53);
Expand All @@ -84,8 +90,21 @@ define(['TransformDefault', 'TransformOpenHab'], function(Transform) {
it('should transform color values', function() {
// encode RGB -> HSV
expect(Transform.Transform['OH:color'].encode([59, 60, 64])).toEqual([228, 7.8, 25.1]);
expect(Transform.Transform['OH:color'].encode([48, 54, 41])).toEqual([87.7, 24.1, 21.2]);
expect(Transform.Transform['OH:color'].encode([110, 101, 87])).toEqual([36.5, 20.9, 43.1]);
expect(Transform.Transform['OH:color'].encode([110, 87, 101])).toEqual([323.5, 20.9, 43.1]);
expect(Transform.Transform['OH:color'].encode([0, 0, 0])).toEqual([0, 0, 0]);
// decode HSV -> RGB
expect(Transform.Transform['OH:color'].decode("228, 7.8, 25.1")).toEqual([59, 60, 64]);
expect(Transform.Transform['OH:color'].decode("87.7, 24.1, 21.2")).toEqual([48, 54, 41]);
// Note: there are differences due to rounding
expect(Transform.Transform['OH:color'].decode("36.5, 20.9, 43.1")).toEqual([109, 100, 86]);
expect(Transform.Transform['OH:color'].decode("36.5, 20.9, 0")).toEqual([0, 0, 0]);
expect(Transform.Transform['OH:color'].decode("120, 60, 10")).toEqual([10, 25, 10]);
expect(Transform.Transform['OH:color'].decode("200, 60, 10")).toEqual([10, 20, 25]);
expect(Transform.Transform['OH:color'].decode("260, 60, 10")).toEqual([15, 10, 25]);
expect(Transform.Transform['OH:color'].decode("320, 60, 10")).toEqual([25, 10, 20]);
expect(Transform.Transform['OH:color'].decode("0,0,0")).toEqual([0, 0, 0]);
});
});
});

0 comments on commit 0b79f33

Please sign in to comment.