RQL Test Suite

https://github.com/kriszyp/rql

by schlomm

HTML

<link rel="stylesheet" href="http://ajax.googleapis.com/ajax/libs/dojo/1.8/dijit/themes/claro/claro.css">
<script src="https://cdn.rawgit.com/phusick/cdn/jsfiddle/amd-packages.js"></script>
<div
    id="container"
    data-dojo-type="dijit/layout/BorderContainer"
    data-dojo-props="gutters:false,liveSplitters:true"
>
    
    <div
        data-dojo-type="dijit/layout/ContentPane"
        data-dojo-props="region:'top'" 
        class="blue"
    >
        <span id="queryCombo"></span>
        <button id="queryButton" data-dojo-type="dijit/form/Button">Run Query</button>
    </div>
    
    <div
        data-dojo-type="dijit/layout/ContentPane"
        data-dojo-props="region:'top'"        
        style="background-color:lightyellow;border-top:1px solid yellow;"
    >
        <span>Displaying:&nbsp;</span>
        <span id="current-query"></span>
        <span id="error-icon" class="dijitIcon dijitInline dijitIconError" style="display:none;"></span>
    </div>
    
    <div
        data-dojo-type="dijit/layout/ContentPane"
        data-dojo-props="region:'center'"        
    >
        <div id="grid"></div>
    </div>
    
    <div
        data-dojo-type="dijit/layout/ContentPane"
        data-dojo-props="region:'bottom',splitter:true"  
        class="blue"
        style="text-align: right;"    
    >
        <button id="testButton" data-dojo-type="dijit/form/Button">Run DOH Unit Tests</button>
        <div
            data-dojo-type="dijit/Tooltip"
            data-dojo-props="connectId:'testButton',position:['above']">
            Open JavaScript Console to see results (F12)              
        </div>
        <a id="github" href="https://github.com/kriszyp/rql" target="_blank"></a>
        <div
            data-dojo-type="dijit/Tooltip"
            data-dojo-props="connectId:'github',position:['above']">
            Resource Query Languare (RQL) @github              
        </div>
    </div>
    
</div>

CSS

html, body {
    height: 100%;
}

body {
    font-family: sans-serif;
    font-size: 11px;
}

#grid {
    position: absolute;
    top: 0;
    bottom: 0;
    left: 0;
    right: 0;
    height: auto;
}

#container {
    height: 100%;
}

#current-query {
    font-family: monospace;
}

#github {
    display: block;
    width: 32px;
    height: 32px;
    background: transparent url(http://www.glowingminds.co.uk/wordpress/wp-content/uploads/2012/06/github.png) 0 0 no-repeat;
    position: absolute;
    left: 0;
    top: 0;
    margin-top: 6px;
    margin-left: 6px;
}

.blue {
    background-color: AliceBlue;
    border-top: 1px solid CornflowerBlue;
}

JavaScript

require([
    "doh/runner",
    "dojo/ready",
    "dojo/_base/declare",
    "dojo/_base/lang",
    "dojo/dom",
    "dojo/aspect",
    "dojo/store/Memory",
    "dgrid/OnDemandGrid",
    "rql/js-array",
    "data/dtuned",
    "dojo/keys",
    "dijit/registry",
    "dijit/form/ComboBox",
    "dijit/Tooltip",
    "dijit/layout/BorderContainer",
    "dijit/layout/ContentPane",
    "dijit/form/Button",
    "dojo/domReady!"        
], function(
    doh,
    ready,
    declare,
    lang,
    dom,
    aspect,
    Memory,
    Grid,
    rql,
    data,
    keys,
    registry,
    ComboBox,
    Tooltip
) {
        
    var simpleQueryEngineTest = {
        name: "Simple Query Engine Test",
        setUp: function() {
            this.store = new Memory({ data: lang.delegate(data)});
        },
        runTest: function() {
            var store = this.store;
            doh.assertTrue(store.isInstanceOf(Memory));  
            doh.assertEqual(12, store.query({ Year: 1995}).length);
            doh.assertEqual(26, store.query({ Artist: "Zero 7"}).length);
            doh.assertEqual(12, store.query({ Artist: "Zero 7", Album: "The Garden"}).length);
            doh.assertEqual(12, store.query(function(item, index, items) {
                return (item.Artist == "Zero 7" && item.Album == "The Garden");
                }).length
            );
        }
    }
        
    var rqlQueryEngineTest = {
        name: "RQL Query Test",
        setUp: function() {
            this.store = new Memory({ data: lang.delegate(data)});
            this.store.queryEngine = rql.query;
        },
        runTest: function() {
            var store = this.store;
            
            doh.assertEqual(12, store.query("Year>2007").length);     
            doh.assertEqual(12, store.query("Year>1990&Year<1997").length);
            doh.assertEqual( 1, store.query("Year=string:1990").length);
            doh.assertEqual(13, store.query("(Year=string:1995|Year=string:1990)").length);
           ...