First version of PythonCharts.
The reason why it is so simple is that I wanted to get something into the project that people can use to compare different test runs easily. More functionality will come later.

tools/python_charts/src/gviz_api.py is a copy of the Google visualization Python API available from http://google-visualization-python.googlecode.com/svn/trunk/

Review URL: http://webrtc-codereview.appspot.com/257003

git-svn-id: http://webrtc.googlecode.com/svn/trunk@893 4adac7df-926f-26a2-2b94-8c16560cd09d
diff --git a/tools/python_charts/webrtc/data_helper_test.py b/tools/python_charts/webrtc/data_helper_test.py
new file mode 100644
index 0000000..9aa020e
--- /dev/null
+++ b/tools/python_charts/webrtc/data_helper_test.py
@@ -0,0 +1,92 @@
+#!/usr/bin/env python
+#  Copyright (c) 2011 The WebRTC project authors. All Rights Reserved.
+#
+#  Use of this source code is governed by a BSD-style license
+#  that can be found in the LICENSE file in the root of the source
+#  tree. An additional intellectual property rights grant can be found
+#  in the file PATENTS.  All contributing project authors may
+#  be found in the AUTHORS file in the root of the source tree.
+
+__author__ = 'kjellander@webrtc.org (Henrik Kjellander)'
+
+import unittest
+import webrtc.data_helper
+
+class Test(unittest.TestCase):
+
+  def setUp(self):
+    # Simulate frame data from two different test runs, with 2 frames each.
+    self.frame_data_0 = [{'frame_number': 0, 'ssim': 0.5, 'psnr': 30.5}, 
+                         {'frame_number': 1, 'ssim': 0.55, 'psnr': 30.55}]
+    self.frame_data_1 = [{'frame_number': 0, 'ssim': 0.6, 'psnr': 30.6},
+                         {'frame_number': 0, 'ssim': 0.66, 'psnr': 30.66}]
+    self.all_data = [ self.frame_data_0, self.frame_data_1 ]
+    
+    # Test with frame_number column in a non-first position sice we need to 
+    # support reordering that to be able to use the gviz_api as we want.
+    self.type_description = {
+                             'ssim': ('number', 'SSIM'),
+                             'frame_number': ('number', 'Frame number'),
+                             'psnr': ('number', 'PSRN'),
+    }
+    self.names = ["Test 0", "Test 1"]
+    
+  def testCreateData(self):
+    messages = []
+    helper = webrtc.data_helper.DataHelper(self.all_data, self.type_description,
+                                           self.names, messages)
+    description, data_table = helper.CreateData('ssim')
+    self.assertEqual(3, len(description))
+    self.assertTrue('frame_number' in description)
+    self.assertTrue('ssim_0' in description)
+    self.assertTrue('number' in description['ssim_0'][0])
+    self.assertTrue('Test 0' in description['ssim_0'][1])
+    self.assertTrue('ssim_1' in description)
+    self.assertTrue('number' in description['ssim_1'][0])
+    self.assertTrue('Test 1' in description['ssim_1'][1])
+ 
+    self.assertEqual(0, len(messages)) 
+    
+    self.assertEquals(2, len(data_table))
+    row = data_table[0]
+    self.assertEquals(0, row['frame_number'])
+    self.assertEquals(0.5, row['ssim_0'])
+    self.assertEquals(0.6, row['ssim_1'])
+    row = data_table[1]
+    self.assertEquals(1, row['frame_number'])
+    self.assertEquals(0.55, row['ssim_0'])
+    self.assertEquals(0.66, row['ssim_1'])
+    
+    description, data_table = helper.CreateData('psnr') 
+    self.assertEqual(3, len(description))
+    self.assertTrue('frame_number' in description)
+    self.assertTrue('psnr_0' in description)
+    self.assertTrue('psnr_1' in description) 
+    self.assertEqual(0, len(messages)) 
+
+    self.assertEquals(2, len(data_table))
+    row = data_table[0]
+    self.assertEquals(0, row['frame_number'])
+    self.assertEquals(30.5, row['psnr_0'])
+    self.assertEquals(30.6, row['psnr_1'])
+    row = data_table[1]
+    self.assertEquals(1, row['frame_number'])
+    self.assertEquals(30.55, row['psnr_0'])
+    self.assertEquals(30.66, row['psnr_1'])
+  
+  def testGetOrdering(self):
+    """ Tests that the ordering help method returns a list with frame_number 
+       first and the rest sorted alphabetically """
+    messages = []
+    helper = webrtc.data_helper.DataHelper(self.all_data, self.type_description,
+                                           self.names, messages)
+    description, data_table = helper.CreateData('ssim')
+    columns = helper.GetOrdering(description)
+    self.assertEqual(3, len(columns))
+    self.assertEqual(0, len(messages))
+    self.assertEqual('frame_number', columns[0])
+    self.assertEqual('ssim_0', columns[1])
+    self.assertEqual('ssim_1', columns[2])
+    
+if __name__ == "__main__":
+  unittest.main()