(function(global) { describe("jquery.formToObject tests", function() { beforeEach(function() { JKTestUtils.loadFixtures('/spec/javascripts/fixtures/formToObject.htm'); }); describe("Top level", function() { describe("text input named foo, val bar", function() { it("should have variable named foo, val bar", function() { var o = $('#test1').formToObject(); expect(o.foo).toEqual("bar"); }); }); describe("text area named foo, contents bar", function() { it("should have variable named foo, val bar", function() { var o = $('#test1a').formToObject(); expect(o.foo).toEqual("bar"); }); }); describe("single checkbox named foo, val bar", function() { it("should have variable named foo, val bar", function() { var o = $('#test2').formToObject(); expect(o.foo).toEqual("bar"); }); }); describe("multi checkboxes named foo, vals 'a' and 'b'", function() { it("should have variable named foo, val ['a','b']", function() { var o = $('#test3').formToObject(); expect(o.foo).toEqual(['a','b']); }); }); describe("select named foo, selected op val 'a'", function() { it("should have variable named foo, val 'a'", function() { var o = $('#test4').formToObject(); expect(o.foo).toEqual('a'); }); }); describe("multiselect named foo, selected opts vals 'a', 'c'", function() { it("should have variable named foo, val ['a','c']", function() { var o = $('#test5').formToObject(); expect(o.foo).toEqual(['a','c']); }); }); describe("single radio named foo, val bar", function() { it("should have variable named foo, val bar", function() { var o = $('#test6').formToObject(); expect(o.foo).toEqual("bar"); }); }); }); describe("Second level", function() { describe("text input named foo.bar, val 'x'", function() { it("should have object foo with prop bar, value 'x'", function() { var o = $('#test7').formToObject(); expect(o.foo.bar).toEqual("x"); }); }); describe("multi checkboxes named foo.bar, vals 'a' and 'b'", function() { it("should have object named foo, prop bar, val ['a','b']", function() { var o = $('#test9').formToObject(); expect(o.foo.bar).toEqual(['a','b']); }); }); }); describe("Third level", function() { describe("text input named foo.bar.spam, val 'x'", function() { it("should have object foo with obj bar, with prop spam, value 'x'", function() { var o = $('#test8').formToObject(); expect(o.foo.bar.spam).toEqual("x"); }); }); }); describe("Mixed cases", function() { describe("flipping in and out of hierarchy", function() { it("should properly capture all properties", function() { var o = $('#test10').formToObject(); expect(o.foo.sponge).toEqual("99"); expect(o.foo.bar.potato).toEqual("mashed"); expect(o.apple).toEqual("sweet"); expect(o.foo.bar.strawberry).toEqual("ripe"); expect(o.foo.bar.kentucky.bluegrass.yards).toEqual("north"); }); }); }); describe("Bad cases", function() { describe("Overriding object with property", function() { it("should raise an error", function() { expect( function() { $('#error1').formToObject(); }).toThrow("Can't overwrite named structure"); }); }); }); describe("__OMIT__ special value", function() { describe("When value for key is __OMIT__", function() { it("should remove key from object", function() { var o = $('#OMIT').formToObject(); expect(o.foo.sponge).toEqual("99"); expect(o.foo.bar.potato).toEqual("mashed"); expect("apple" in o).toBeFalsy('apple not in o'); // would be foo.bar.kentucky.bluegrass.yard - all empty should be gone: expect("kentucky" in o.foo.bar).toBeFalsy('kentucky not in bar'); }); }); describe("When resulting formToObject is {}", function() { it("should return null instead of {}", function() { var o = $('#OMIT_ALL').formToObject(); expect(o).toBeNull(); }); }); }); }); })(window);