summaryrefslogtreecommitdiffstats
path: root/vaadin-grid/test/grid-editing-columns.html
diff options
context:
space:
mode:
Diffstat (limited to 'vaadin-grid/test/grid-editing-columns.html')
-rw-r--r--vaadin-grid/test/grid-editing-columns.html412
1 files changed, 412 insertions, 0 deletions
diff --git a/vaadin-grid/test/grid-editing-columns.html b/vaadin-grid/test/grid-editing-columns.html
new file mode 100644
index 0000000..105aa3e
--- /dev/null
+++ b/vaadin-grid/test/grid-editing-columns.html
@@ -0,0 +1,412 @@
+<!DOCTYPE html>
+<html>
+
+<head lang="en">
+ <meta charset="UTF-8">
+ <title></title>
+ <script src="../../webcomponentsjs/webcomponents-lite.min.js"></script>
+ <script src="../../web-component-tester/browser.js"></script>
+
+ <script src="common.js"></script>
+
+ <link rel="import" href="../vaadin-grid.html">
+</head>
+
+<body>
+
+<div id="gridwrapper"></div>
+
+<script>
+ describe.feature('editing columns', function() {
+
+ function getFirstCell() {
+ return qLocal('.v-grid-body .v-grid-cell');
+ }
+
+ beforeEach(function() {
+ return grid.then(function() {
+
+ grid.selection.mode = 'single';
+ grid.frozenColumns = 0;
+ grid.columns = [{name: 'Name', headerContent: 'Name'}, {name: 'Value', headerContent: 'Value'}];
+ grid.data.source = [['Grid', '10000'], ['VaadinX', '1000']];
+
+ return grid;
+ });
+ });
+
+ it('add new column', function() {
+ grid.addColumn({
+ name: "foo",
+ headerContent: "<b>Foo</b>",
+ sortable: true,
+ minWidth: 100,
+ maxWidth: 200,
+ width: 150,
+ flex: 1,
+ });
+
+ var c = grid.columns[grid.columns.length - 1];
+ assert.equal(c.name, "foo");
+ assert.equal(c.headerContent, "<b>Foo</b>");
+ assert.equal(c.sortable, true);
+ assert.notOk(c.editable);
+ assert.equal(c.minWidth, 100);
+ assert.equal(c.maxWidth, 200);
+ assert.equal(c.width, 150);
+ assert.equal(c.flex, 1);
+ });
+
+ it('add new column before', function(done) {
+
+ expect(grid.addColumn.bind(grid, {
+ name: "foo"
+ }, -1)).to.throw("Column not found.");
+
+ expect(grid.addColumn.bind(grid, {
+ name: "foo"
+ }, 100)).to.throw("Column not found.");
+
+ grid.addColumn({
+ name: "foo",
+ headerContent: "foo"
+ }, 0);
+ grid.addColumn({
+ name: "bar",
+ headerContent: "testHtml"
+ }, "foo");
+
+ waitUntil(function() {
+ return gridContainsText(grid, "testHtml");
+ }, function() {
+ var headers = qaLocal(".v-grid-header .v-grid-row th");
+ assert.equal(headers[0].innerHTML, "testHtml");
+ assert.equal(headers[1].innerHTML, "foo");
+
+ expect(grid.addColumn.bind(grid, {
+ name: "baz"
+ }, "foobar")).to.throw("Column not found.");
+ done();
+ }, done);
+
+ });
+
+ it('edit new column', function(done) {
+ var c = {
+ name: "foo",
+ headerContent: "testHtml"
+ };
+ grid.addColumn(c);
+
+ waitUntil(function() {
+ return gridContainsText(grid, "testHtml");
+ }, function() {
+
+ var headers = qaLocal(".v-grid-header .v-grid-row th");
+ assert.equal(headers[grid.columns.length - 1].innerHTML, "testHtml");
+
+ c.headerContent = "testHtml2";
+
+ waitUntil(function() {
+ return gridContainsText(grid, "testHtml2");
+ }, function() {
+ assert.equal(headers[grid.columns.length - 1].innerHTML, "testHtml2");
+ done();
+ }, done);
+
+ }, done);
+
+ });
+
+ it('edit existing column', function(done) {
+ grid.columns[0].headerContent = "testHtml";
+ waitUntil(function() {
+ return gridContainsText(grid, "testHtml");
+ }, function() {
+ var headers = qaLocal(".v-grid-header .v-grid-row th");
+ assert.equal(headers[0].innerHTML, "testHtml");
+ done();
+ });
+ });
+
+ it('generated value', function(done) {
+ grid.addColumn({
+ valueGenerator: function(dataItem) {
+ return "foo " + dataItem[0];
+ }
+ });
+
+ waitUntil(function() {
+ return gridContainsText(grid, "foo Grid");
+ }, done, done);
+ });
+
+ it('setting valueGenerator shouldnt fire select', function() {
+ var selectListener = sinon.spy();
+ grid.addEventListener('select', selectListener);
+
+ grid.selection.mode = "multi";
+ grid.columns[0].valueGenerator = function() { return 1; };
+ expect(selectListener.notCalled).to.be.true;
+ });
+
+ it('should not update the generated value', function(done) {
+ grid.columns[0].valueGenerator = function(dataItem) {
+ return Math.random();
+ };
+
+ grid.then(function() {
+ var generatedValue = getFirstCell().innerText;
+ grid.selection.select(0);
+ expect(generatedValue).to.eql(getFirstCell().innerText);
+ done();
+ });
+
+ });
+
+ it('renderer property', function(done) {
+ grid.columns[0].renderer = function(cell) {
+ cell.element.innerHTML = "<b>" + cell.data + "</b>";
+ };
+
+ waitUntil(function() {
+ return gridContainsText(grid, "<b>Grid</b>");
+ }, done, done);
+ });
+
+ it('renderer: cell values on change', function(done) {
+ var mydata = [
+ ["John", "TestFoo"],
+ ["Jane", "TestBar"],
+ ];
+
+ grid.data.source = mydata;
+
+ grid.columns[1].renderer = function(cell) {
+ cell.element.innerHTML = cell.data;
+ cell.element.cell = cell;
+ };
+
+ waitUntil(function() {
+ return gridContainsText(grid, "TestFoo");
+ }, function() {
+ var cell = grid.querySelectorAll(".v-grid-body .v-grid-cell")[3].cell;
+ assert.equal(cell.row.index, 1);
+ assert.equal(cell.index, 1);
+
+ mydata.splice(0, 1);
+ mydata[0].splice(0, 1);
+ grid.data.clearCache();
+
+ grid.columns.splice(0, 1);
+ waitUntil(function() {
+ return !gridContainsText(grid, "TestFoo");
+ }, function() {
+ assert.equal(cell.row.index, 0);
+ assert.equal(cell.index, 0);
+ done();
+ }, done);
+ }, done);
+
+ });
+
+ it('initial property values', function() {
+ assert.equal(grid.columns[0].headerContent, "Name");
+ });
+
+ describe('modifying columns array directly', function() {
+ it('should replace header content', function() {
+ expect(grid.querySelector('th').textContent).to.equal('Name');
+
+ grid.columns[0].headerContent = 'Foo';
+
+ return grid.then(function() {
+ expect(grid.querySelector('th').textContent).to.equal('Foo');
+ });
+ });
+
+ // fails because of replacing columns doesn't render row contents,
+ // see https://trello.com/c/8e27Tv3q/58-v-grid-bugs
+ it.skip('should render row contents', function() {
+ expect(grid.querySelectorAll('td').textContent).to.equal('Grid');
+
+ grid.columns = [{headerContent: 'Foo'}];
+
+ return grid.then(function() {
+ expect(grid.querySelectorAll('td').textContent).to.equal('Grid');
+ });
+ });
+ });
+
+ it('modify columns array', function(done) {
+ var col = grid.columns[0];
+ grid.columns.splice(1, 1);
+
+ waitUntil(function() {
+ return !gridContainsText(grid, "Progress");
+ }, function() {
+ grid.columns.push({
+ headerContent: "testHtml"
+ });
+ waitUntil(function() {
+ return gridContainsText(grid, "testHtml");
+ }, done, done);
+ }, done);
+ });
+
+ it('remove column', function(done) {
+ grid.addColumn({
+ name: "test",
+ headerContent: "test"
+ });
+ grid.removeColumn(0);
+
+ waitUntil(function() {
+ return !gridContainsText(grid, "Name") && gridContainsText(grid, "test");
+ }, function() {
+ grid.removeColumn("test");
+ waitUntil(function() {
+ return !gridContainsText(grid, "test");
+ }, done, done);
+ }, done);
+ });
+
+ it('add new column to an empty grid', function(done) {
+ grid.columns = [];
+
+ grid.columns.push({
+ name: "foo",
+ headerContent: "fooheader"
+ });
+
+ grid.then(function() {
+ expect(gridContainsText(grid, 'fooheader')).to.be.true;
+ done();
+ });
+ });
+
+ it('frozen column', function(done) {
+ grid.frozenColumns = 1;
+
+ waitUntil(function() {
+ return gridContainsText(grid, "v-grid-cell frozen");
+ }, function() {
+ var headers = qaLocal(".v-grid-header .v-grid-row th");
+ assert.isTrue(headers[0].classList.contains("frozen"));
+ done();
+ }, done);
+
+ });
+
+ it('frozen column declarative', function() {
+ grid.setAttribute("frozen-columns", "1");
+
+ return grid.then(function() {
+ expect(function(){grid.selection.mode = "multi";}).not.to.throw();
+ });
+ });
+
+ it('frozen column: unfreeze selection column', function() {
+ grid.selection.mode = "multi";
+ assert.ok(qLocal(".frozen"));
+
+ grid.frozenColumns = -1;
+ assert.notOk(qLocal(".frozen"));
+ });
+
+ it('should add a column to an empty grid with an index', function() {
+ grid.columns = [];
+ return grid.then(function() {
+ grid.addColumn({headerContent: "foo"}, 0);
+ return grid;
+ }).then(function() {
+ expect(qaLocal(".v-grid-header .v-grid-cell")).to.have.length(1);
+ return grid;
+ });
+ });
+
+ it('should reference header cell after adding a new column', function() {
+ grid.addColumn({name: "foo"});
+ grid.header.getCell(0, "foo").content = "foo";
+ expect(grid.columns[2].headerContent).to.eql("foo");
+ });
+
+ it('should support nested column names', function() {
+ grid.addColumn({
+ name: "foo.bar.baz",
+ });
+ grid.data.source = [{
+ foo: {
+ bar: {
+ baz: "testing"
+ }
+ }
+ }];
+ return grid.then(function() {
+ expect(gridContainsText(grid, "testing")).to.be.true;
+ });
+ });
+
+ it('should not return values from name path', function() {
+ grid.addColumn({
+ name: "foo.bar.baz",
+ });
+ grid.data.source = [{
+ foo: {
+ bar: "testing"
+ }
+ }];
+ return grid.then(function() {
+ expect(gridContainsText(grid, "testing")).to.be.false;
+ });
+ });
+
+ it('should allow undefined nested values', function() {
+ grid.addColumn({
+ name: "foo.bar.baz",
+ });
+ grid.data.source = [{
+ foo: {
+ bar: undefined
+ }
+ }];
+ return grid.then(function() {
+ expect(qaLocal(".v-grid-body .v-grid-cell")[2].innerHTML).to.be.empty;
+ });
+ });
+
+ it('should have the right default value if flex attribute exists', function() {
+ qLight("table col").setAttribute("flex", "");
+ return grid.then(function() {
+ expect(grid.columns[0].flex).to.eql(1);
+ expect(grid.columns[1].flex).to.eql(-1);
+ });
+ });
+
+ it('should size columns with width property', function() {
+ grid.columns[0].width = 100;
+ return grid.then(function(){
+ expect(qLocal(".v-grid-cell").offsetWidth).to.eql(100);
+ });
+ });
+
+ it('should size columns with minWidth property', function() {
+ grid.columns[0].width = 100;
+ grid.columns[0].minWidth = 150;
+ return grid.then(function(){
+ expect(qLocal(".v-grid-cell").offsetWidth).to.eql(150);
+ });
+ });
+
+ it('should size columns with maxWidth property', function() {
+ grid.columns[0].maxWidth = 100;
+ return grid.then(function(){
+ expect(qLocal(".v-grid-cell").offsetWidth).to.eql(100);
+ });
+ });
+
+ });
+</script>
+
+</body>
+</html>