diff --git a/web/gui/src/main/webapp/tests/app/fw/widget/table-spec.js b/web/gui/src/main/webapp/tests/app/fw/widget/table-spec.js
index 12d0390..688897c 100644
--- a/web/gui/src/main/webapp/tests/app/fw/widget/table-spec.js
+++ b/web/gui/src/main/webapp/tests/app/fw/widget/table-spec.js
@@ -18,7 +18,54 @@
  ONOS GUI -- Widget -- Table Service - Unit Tests
  */
 describe('factory: fw/widget/table.js', function() {
-    var ts, $log;
+    var ts, $log, d3Elem;
+
+    var config = {
+        colIds: ['id', 'mfr', 'hw', 'sw', 'serial', 'annotations.protocol'],
+        colText: ['URI', 'Vendor', 'Hardware Version', 'Software Version',
+            'Serial Number', 'Protocol']
+        },
+        fakeData = {
+            "devices": [{
+                "id": "of:0000000000000001",
+                "available": true,
+                "_iconid_available": "deviceOnline",
+                "role": "MASTER",
+                "mfr": "Nicira, Inc.",
+                "hw": "Open vSwitch",
+                "sw": "2.0.1",
+                "serial": "None",
+                "annotations": {
+                    "protocol": "OF_10"
+                }
+            },
+                {
+                    "id": "of:0000000000000004",
+                    "available": false,
+                    "_iconid_available": "deviceOffline",
+                    "role": "MASTER",
+                    "mfr": "Nicira, Inc.",
+                    "hw": "Open vSwitch",
+                    "sw": "2.0.1",
+                    "serial": "None",
+                    "annotations": {
+                        "protocol": "OF_10"
+                    }
+                },
+                {
+                    "id": "of:0000000000000092",
+                    "available": false,
+                    "_iconid_available": "deviceOffline",
+                    "role": "MASTER",
+                    "mfr": "Nicira, Inc.",
+                    "hw": "Open vSwitch",
+                    "sw": "2.0.1",
+                    "serial": "None",
+                    "annotations": {
+                        "protocol": "OF_10"
+                    }
+                }]
+        };
 
     beforeEach(module('onosWidget'));
 
@@ -30,4 +77,58 @@
     it('should define TableService', function () {
         expect(ts).toBeDefined();
     });
-});
\ No newline at end of file
+
+    function verifyTableTags(div) {
+        var table = div.select('table'),
+            tableHeaders;
+        expect(table).toBeTruthy();
+        expect(table.attr('fixed-header')).toBeTruthy();
+        expect(table.select('thead')).toBeTruthy();
+        expect(table.select('tbody')).toBeTruthy();
+
+        tableHeaders = table.select('thead').selectAll('th');
+        tableHeaders.each(function(thElement, i) {
+            thElement = d3.select(this);
+            expect(thElement).toBeTruthy();
+            expect(thElement.html()).toBe(config.colText[i]);
+        });
+    }
+
+    function verifyData(div) {
+        var tbody = div.select('tbody'),
+            tableBoxes = tbody.selectAll('td');
+        expect(tbody).toBeTruthy();
+        expect(tbody.select('tr')).toBeTruthy();
+
+        tableBoxes.each(function(tdElement, i){
+            tdElement = d3.select(this);
+            if(i === 0) {
+                expect(tdElement.html()).toBe('of:0000000000000001');
+            }
+            if(i === 1) {
+                expect(tdElement.html()).toBe('Nicira, Inc.');
+            }
+            if(i === 2) {
+                expect(tdElement.html()).toBe('Open vSwitch');
+            }
+            expect(tdElement).toBeTruthy();
+        });
+    }
+
+    it('should create table tags', function () {
+        ts.renderTable(d3Elem, config);
+        verifyTableTags(d3Elem);
+    });
+
+    it('should load data into table', function () {
+        var colIds = ts.renderTable(d3Elem, config);
+        ts.loadTableData(fakeData, d3Elem, colIds);
+        verifyData(d3Elem);
+    });
+
+    it('should render table and load data', function () {
+        ts.renderAndLoadTable(d3Elem, config, fakeData);
+        verifyData(d3Elem);
+    });
+
+});
