示例#1
0
 "is instantiable": function(done) {
     var name = testutil.getUniqueName();
     var context = AppFx.Components.create("appfx-searchcontext", name, {});
     assert.isNotNull(context);
     assert.strictEqual(context.get("name"), name);
     
     done();
 },
示例#2
0
 var createContextAndSubcontext = function(done) {
     var contextName = testutil.getUniqueName();
     var subcontext1Name = testutil.getUniqueName();
     var subcontext2Name = testutil.getUniqueName();
     
     var context = AppFx.Components.create(
         "appfx-groupcontext", contextName, {
             contexts: [subcontext1Name, subcontext2Name]
         });
     var subcontext1 = AppFx.Components.create(
         "appfx-searchcontext", subcontext1Name,
         { autostart: false });
     var subcontext2 = AppFx.Components.create(
         "appfx-savedsearchcontext", subcontext2Name,
         { autostart: false });
     
     // Start only the group context.
     context.start();
     
     done(context, subcontext1);
 };
示例#3
0
 var runcacheTest = function(
         cacheOfContext2,
         fakeCurrentTimeForContext2, // -1 to use real time
         doesExpectJobToBeReused,
         done) {
     
     var sharedName = testutil.getUniqueName();
     var sharedSearch = TEST_QUERY;
     
     var context1 = new SearchContext({
         name: sharedName,
         autostart: false
     });
     context1.set('search', sharedSearch);
     
     context1.startSearch();
     context1.on("search:start", function(job1) {
         // (Create directly instead of using
         //  AppFx.Components.create to allow multiple
         //  contexts with same name to be created.)
         var context2 = new SearchContext({
             name: sharedName,
             cache: cacheOfContext2,
             autostart: false
         });
         context2.set('search', sharedSearch);
         
         var OldDate = Date;
         if (fakeCurrentTimeForContext2 != -1) {
             Date = function() {
                 return new OldDate(fakeCurrentTimeForContext2);
             };
         }
         try {
             context2.startSearch();
             context2.on("search:start", function(job2) {
                 if (doesExpectJobToBeReused) {
                     assert.equal(job2.sid, job1.sid,
                         "Expected context2 to reuse job of context1.");
                 }
                 else {
                     assert.notEqual(job2.sid, job1.sid,
                         "Expected context2 to NOT reuse job of context1.");
                 }
                 
                 done();
             });
         }
         finally {
             Date = OldDate;
         }
     });
 };
示例#4
0
 "does not forward events from old subcontext or its models to self": function(done) {
     var contextName = testutil.getUniqueName();
     var subcontextName = testutil.getUniqueName();
     
     var context = AppFx.Components.create(
         "appfx-groupcontext", contextName, {
             contexts: [subcontextName]
         });
     var oldSubcontext = AppFx.Components.create(
         "appfx-searchcontext", subcontextName,
         { autostart: false });
     
     context.start();
     
     AppFx.Components.revokeInstance(subcontextName);
     var newSubcontext = AppFx.Components.create(
         "appfx-searchcontext", subcontextName,
         { autostart: false });
     
     oldSubcontext.on("ping", function() {
         throw "Old subcontext should not be receiving events after revocation.";
     });
     oldSubcontext.search.on("change:ping", function(model, value, options) {
         throw "Old subcontext's job model should not be receiving events after revocation.";
     });
     oldSubcontext.query.on("change:ping", function(model, value, options) {
         throw "Old subcontext's query model should not be receiving events after revocation.";
     });
     
     context.trigger("ping", "hi");
     context.search.set("ping", "hi");
     context.query.set("ping", "hi");
     
     // Succeed by default.
     // This may be invalidated later by callbacks.
     done();
 }
示例#5
0
 "will start a new job when a model is changed": function(done) {
     // HACK: Can't just do a normal
     //       `context.startSearch = createMethodMock();`
     //       because a reference to `startSearch` is used in
     //       the SearchContext constructor.
     var EarlyMockedSearchContext = SearchContext.extend({
         startSearch: createMethodMock()
     });
     var context = new EarlyMockedSearchContext({
         name: testutil.getUniqueName()
     });
     
     context.set('search', TEST_QUERY);
     assert.equal(context.startSearch.callCount, 1);
     
     done();
 },
示例#6
0
define(function(require, exports, module) {
    var _ = require("underscore");
    var AppFx = require("appfx.main");
    var assert = require("testfx/chai").assert;
    var BaseContext = require("appfx/splunkui/basecontext");
    var BaseControl = require("appfx/splunkui/basecontrol");
    var testutil = require("testfx/testutil");
    
    var R = AppFx.Components;
    
    var MockControl = BaseControl.extend({
        salt: testutil.getUniqueName()
    });
    
    var MockContext = BaseContext.extend({
        salt: testutil.getUniqueName()
    });
    
    var tests = {
        before: function(done) {
            done();
        },
        
        beforeEach: function(done) {
            done();
        },
        
        after: function(done) {
            done();
        },
        
        afterEach: function(done) {
            done();
        },
        
        "Registry Tests": {
            /*
             * Registry API
             * 
             * Non-Private Methods:
             *  + registerType(htmlClassName, Component)
             *      > Register a new type of component.
             *  + create(htmlClassName, htmlIdAndComponentName, options) : Component
             *      > Instantiates a component.
             *  + getInstance(htmlIdAndComponentName) : Component
             *      > Locates a component instance.
             *  ~ revokeInstance(htmlIdAndComponentName)
             *      > Unregisters a component instance.
             *  ~ bind, has, off
             *      > (Backbone model methods)
             */
            "Registry": {
                // Tests: [registerType]
                "should advertise component type after registration": function(done) {
                    _.each([MockControl, MockContext], function(MockComponent) {
                        R.registerType('appfx-mock', MockComponent);
                        assert.isTrue(R.hasType('appfx-mock'));
                        assert.strictEqual(MockComponent, R.getType('appfx-mock'));
                        assert.isTrue(_.indexOf(R.getTypes(), MockComponent) != -1,
                            "getTypes() lacks control after registerType()");
                        assert.isTrue(_.indexOf(R.getTypeNames(), 'appfx-mock') != -1,
                            "getTypeNames() lacks control after registerType()");
                    
                        R.revokeType('appfx-mock');
                        assert.isFalse(R.hasType('appfx-mock'));
                        assert.isTrue(_.indexOf(R.getTypes(), MockComponent) == -1,
                            "getTypes() has control after revokeType()");
                        assert.isTrue(_.indexOf(R.getTypeNames(), 'appfx-mock') == -1,
                            "getTypeNames() has control after revokeType()");
                    });
                    
                    done();
                },
                
                // Tests: [create, getInstance, revokeInstance]
                "should advertise component instance after registration": function(done) {
                    _.each([MockControl, MockContext], function(MockComponent) {
                        R.registerType('appfx-mock', MockComponent);
                        
                        assert.isFalse(R.has('mock1'));
                        var mock1 = R.create('appfx-mock', 'mock1', {
                            // Typical options for a control. But not required.
                            /*
                            contextid: 'foocontext',
                            el: $('<div id="mock1"></div>')
                            */
                        });
                        assert.ok(mock1);
                        assert.ok(R.getInstance('mock1'));
                        
                        R.revokeInstance('mock1');
                        assert.isFalse(R.has('mock1'));
                        
                        R.revokeType('appfx-mock');
                    });
                    
                    done();
                },
                
                // Tests: [bind, has, off]
                "looks like a Backbone.Model": function(done) {
                    assert.ok(R.bind);
                    assert.ok(R.has);
                    assert.ok(R.off);
                    
                    done();
                },
                
                // Tests: [bind, has]
                "should fire events when component registered and unregistered": function(done) {
                    _.each([MockControl, MockContext], function(MockComponent) {
                        R.registerType('appfx-mock', MockComponent);
                    
                        var changeSetEventFired = false;
                        var changeClearEventFired = false;
                        R.bind("change:mock", function(sourceRegistry, sourceComponent) {
                            assert.strictEqual(sourceRegistry, R);
                            if (sourceComponent) {
                                changeSetEventFired = true;
                            } else {
                                changeClearEventFired = true;
                            }
                        });
                    
                        assert.isFalse(R.has('mock'));
                        assert.isFalse(changeSetEventFired);
                        var mock1 = R.create('appfx-mock', 'mock', {});
                        assert.isTrue(R.has('mock'));
                        assert.isTrue(changeSetEventFired);
                        
                        // Ensure attempt to rebind the name fails
                        assert.throws(function() {
                            R.create('appfx-mock', 'mock', {});
                        }, /Already have instance with name/);
                        
                        assert.isFalse(changeClearEventFired);
                        R.revokeInstance('mock');
                        assert.isTrue(changeClearEventFired);
                        
                        R.revokeType('appfx-mock');
                    });
                    
                    done();
                }
            }
        }
    };
    
    return tests;
});
示例#7
0
 var createSearchContext = function(options_opt) {
     return AppFx.Components.create(
         "appfx-searchcontext",
         testutil.getUniqueName(),
         options_opt || {});
 };