Index: .gitignore
===================================================================
--- .gitignore	(revision 6d96bf9ba9448b17116976b3c9889560ca8a1e96)
+++ .gitignore	(revision 9c1e5628126672d18d0abf2cbd20d289e1266bef)
@@ -58,2 +58,3 @@
 /installers/build
 /installers/dist
+/src/sas/qtgui/Perspectives/Corfunc/UI/CorfuncPanel.py
Index: src/sas/qtgui/Perspectives/Corfunc/UnitTesting/CorfuncTest.py
===================================================================
--- src/sas/qtgui/Perspectives/Corfunc/UnitTesting/CorfuncTest.py	(revision 9c1e5628126672d18d0abf2cbd20d289e1266bef)
+++ src/sas/qtgui/Perspectives/Corfunc/UnitTesting/CorfuncTest.py	(revision 9c1e5628126672d18d0abf2cbd20d289e1266bef)
@@ -0,0 +1,102 @@
+import sys
+import unittest
+import webbrowser
+from time import sleep
+
+from PyQt4 import QtGui
+from PyQt4.QtTest import QTest
+from PyQt4 import QtCore
+
+import sas.qtgui.path_prepare
+from sas.qtgui.Perspectives.Corfunc.CorfuncPerspective import CorfuncWindow
+from sas.sascalc.dataloader.loader import Loader
+
+from sas.qtgui.MainWindow.DataManager import DataManager
+import sas.qtgui.Utilities.LocalConfig
+import sas.qtgui.Utilities.GuiUtils as GuiUtils
+
+if not QtGui.QApplication.instance():
+    app = QtGui.QApplication(sys.argv)
+
+
+class CorfuncTest(unittest.TestCase):
+    '''Test the Corfunc Interface'''
+    def setUp(self):
+        '''Create the CorfuncWindow'''
+        self.widget = CorfuncWindow(None)
+
+    def tearDown(self):
+        '''Destroy the CorfuncWindow'''
+        self.widget.close()
+        self.widget = None
+
+    def testDefaults(self):
+        '''Test the GUI in its default state'''
+        self.assertIsInstance(self.widget, QtGui.QWidget)
+        self.assertEqual(self.widget.windowTitle(), "Corfunc Perspective")
+        self.assertEqual(self.widget.model.columnCount(), 1)
+        self.assertEqual(self.widget.model.rowCount(), 15)
+
+class CorfuncDataTest(unittest.TestCase):
+    '''Test the actual Corfunc Usase'''
+    def setUp(self):
+        '''Create a CorfuncWindow and populate it with data'''
+        self.widget = CorfuncWindow(None)
+        path = "../test/corfunc/test/98929.txt"
+        f = Loader().load(path)
+        manager = DataManager()
+        new_data = manager.create_gui_data(f[0], path)
+        output = {new_data.id: new_data}
+        item = QtGui.QStandardItem(True)
+        object_item = QtGui.QStandardItem()
+        object_item.setData(QtCore.QVariant(new_data))
+        item.setChild(0, object_item)
+        self.widget.setData([item])
+
+    def tearDown(self):
+        '''Destroy the CorfuncWindow'''
+        self.widget.close()
+        self.widget = None
+
+    def testProcess(self):
+        """Test the full analysis path"""
+        self.assertEqual(float(self.widget.bg.text()), 0.0)
+
+        self.widget.qMin.setValue(0.01)
+        self.widget.qMax1.setValue(0.20)
+        self.widget.qMax2.setValue(0.22)
+        self.widget.transformCombo.setCurrentIndex(0)
+
+        self.widget.calculateBgBtn.click()
+        self.assertTrue(float(self.widget.bg.text()) > 0.2)
+
+        self.widget.extrapolateBtn.click()
+        self.assertTrue(float(self.widget.guinierA.text()) > 1)
+        self.assertTrue(float(self.widget.guinierB.text()) < -10000)
+        self.assertTrue(float(self.widget.porodK.text()) > 10)
+        self.assertTrue(float(self.widget.porodSigma.text()) > 10)
+
+        #################################################
+        # The testing framework does not seem to handle
+        # multi-threaded Qt.  Signals emitted from threads
+        # are not detected when run in the unittest, even
+        # though they ARE handled in the actual application.
+        #################################################
+        # sleep(1)
+        # self.widget.transformBtn.click()
+        # while float(self.widget.longPeriod.text()) == 0.0:
+        #     print("Waiting")
+        #     sleep(1)
+        # self.assertTrue(float(self.widget.longPeriod.text()) > 10)
+        # self.assertTrue(float(self.widget.polydisp.text()) > 0)
+        # self.assertTrue(float(self.widget.localCrystal.text()) > 0)
+        # self.assertTrue(float(self.widget.longPeriod.text()) >
+        #                 float(self.widget.avgHardBlock.text()) > 0)
+        # self.assertTrue(float(self.widget.longPeriod.text()) >
+        #                 float(self.widget.avgIntThick.text()) > 0)
+        # self.assertTrue(float(self.widget.longPeriod.text()) >
+        #                 float(self.widget.avgCoreThick.text()) > 0)
+
+
+if __name__ == "__main__":
+    unittest.main()
