/*
 * Copyright 2010-2011 Research In Motion Limited.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

var srcPath = __dirname + '/../../../lib/';

describe("Config", function () {
    var config = require(srcPath + 'config.js');

    it("verify user value is correctly mixed", function () {
        expect(config.copyright).toEqual("@Rebecca");
    });

    it("verify default value is correctly mixed", function () {
        expect(config.widgetExtensions).toEqual(null);
    });

});
