describe("lends", function() {
    describe("when a documented member is inside an object literal associate with a @lends tag", function() {
        describe("standard case", function() {
            var docSet = jasmine.getDocSetFromFile('test/fixtures/lends.js'),
                init = docSet.getByLongname('Person#initialize'),
                name = docSet.getByLongname('Person#name');

            it("The member should be documented as a member of the lendee", function() {
                expect(init.length, 1);
            });

            it("The this member should be documented as a member of the lendee", function() {
                expect(name.length, 1);
            });
        });

        describe("case containg constructor", function() {
            var docSet = jasmine.getDocSetFromFile('test/fixtures/lends2.js'),
                person = docSet.getByLongname('Person').filter(function($) {
                    return ! $.undocumented;
                })[0],
                name = docSet.getByLongname('Person#name');

            it("A tag with a @constructs tag is documented as a constructor.", function() {
                expect(person.description).toEqual('Construct a Person.');
            });

            it("The member should be documented as a member of the lendee", function() {
                expect(person.length, 1);
            });

            it("The this member should be documented as a member of the lendee", function() {
                expect(name.length, 1);
            });
        });

        describe("case that uses @lends in a multiline doclet", function() {
            var docSet = jasmine.getDocSetFromFile('test/fixtures/lends3.js'),
                init = docSet.getByLongname('Person#initialize'),
                name = docSet.getByLongname('Person#name');

            it("The member should be documented as a member of the lendee", function() {
                expect(init.length, 1);
            });

            it("The this member should be documented as a member of the lendee", function() {
                expect(name.length, 1);
            });
        });

    });

    describe("when a documented member is inside an objlit associated with a @lends tag that has no value.", function() {
        var docSet = jasmine.getDocSetFromFile('test/fixtures/lendsglobal.js'),
            testf = docSet.getByLongname('test')[0],
            test1 = docSet.getByLongname('test1')[0],
            test12 = docSet.getByLongname('test1.test2')[0];

        it("The members of the objlit are not members of any symbol", function() {
            expect(typeof testf.memberof).toEqual('undefined');
        });

        it("The members of the objlit are documented as global.", function() {
            expect(testf.longname).toEqual('test');
        });

        it("The nested members of the objlit are members of a global symbol", function() {
            expect(test12.memberof).toEqual('test1');
        });
    });
});