Upstream version 9.38.198.0
[platform/framework/web/crosswalk.git] / src / third_party / trace-viewer / third_party / tvcm / tvcm / project.py
index dab98a3..c9399fb 100644 (file)
@@ -5,7 +5,6 @@ import os
 
 from tvcm import resource as resource_module
 from tvcm import resource_loader
-from tvcm import js_module
 
 def _FindAllFilesRecursive(source_paths):
   all_filenames = set()
@@ -18,24 +17,83 @@ def _FindAllFilesRecursive(source_paths):
         all_filenames.add(x)
   return all_filenames
 
-def _IsFilenameAJSModule(loader, x):
-  if not x.endswith(".js"):
+def _IsFilenameAModule(loader, x):
+  if x.endswith('.html'):
+    return True
+  else:
     return False
-  s = loader.GetStrippedJSForFilename(x, early_out_if_no_tvcm=True)
-  if not s:
-    return
-  return js_module.IsJSModule(s, text_is_stripped=True)
 
-def _IsFilenameAJSTest(loader, x):
+
+def _IsFilenameATest(loader, x):
   if x.endswith('_test.js'):
     return True
 
+  if x.endswith('_test.html'):
+    return True
+
   if x.endswith('_unittest.js'):
     return True
 
+  if x.endswith('_unittest.html'):
+    return True
+
   # TODO(nduca): Add content test?
   return False
 
+class AbsFilenameList(object):
+  def __init__(self, willDirtyCallback):
+    self._willDirtyCallback = willDirtyCallback
+    self._filenames = []
+    self._filenames_set = set()
+
+  def _WillBecomeDirty(self):
+    if self._willDirtyCallback:
+      self._willDirtyCallback()
+
+  def append(self, filename):
+    assert os.path.isabs(filename)
+    self._WillBecomeDirty()
+    self._filenames.append(filename)
+    self._filenames_set.add(filename)
+
+  def extend(self, iter):
+    self._WillBecomeDirty()
+    for filename in iter:
+      assert os.path.isabs(filename)
+      self._filenames.append(filename)
+      self._filenames_set.add(filename)
+
+  def appendRel(self, basedir, filename):
+    assert os.path.isabs(basedir)
+    self._WillBecomeDirty()
+    n = os.path.abspath(os.path.join(basedir, filename))
+    self._filenames.append(n)
+    self._filenames_set.add(n)
+
+  def extendRel(self, basedir, iter):
+    self._WillBecomeDirty()
+    assert os.path.isabs(basedir)
+    for filename in iter:
+      n = os.path.abspath(os.path.join(basedir, filename))
+      self._filenames.append(n)
+      self._filenames_set.add(n)
+
+  def __contains__(self, x):
+    return x in self._filenames_set
+
+  def __len__(self):
+    return self._filenames.__len__()
+
+  def __iter__(self):
+    return iter(self._filenames)
+
+  def __repr__(self):
+    return repr(self._filenames)
+
+  def __str__(self):
+    return str(self._filenames)
+
+
 class Project(object):
   tvcm_path = os.path.abspath(os.path.join(
       os.path.dirname(__file__), '..'))
@@ -46,30 +104,59 @@ class Project(object):
   tvcm_third_party_path = os.path.abspath(os.path.join(
       tvcm_path, 'third_party'))
 
-  def __init__(self, source_paths=None, include_tvcm_paths=True):
+  def __init__(self, source_paths=None, include_tvcm_paths=True, non_module_html_files=None):
     """
     source_paths: A list of top-level directories in which modules and raw scripts can be found.
         Module paths are relative to these directories.
     """
-    self.source_paths = []
+    self._loader = None
+    self._frozen = False
+    self.source_paths = AbsFilenameList(self._WillPartOfPathChange)
+    self.non_module_html_files = AbsFilenameList(self._WillPartOfPathChange)
+
     if include_tvcm_paths:
-      self.source_paths += [
-          self.tvcm_src_path,
-          os.path.join(self.tvcm_third_party_path, 'Promises', 'polyfill', 'src'),
-          os.path.join(self.tvcm_third_party_path, 'gl-matrix', 'src'),
-          os.path.join(self.tvcm_third_party_path, 'polymer'),
-          os.path.join(self.tvcm_third_party_path, 'd3')
-      ]
+      self.source_paths.append(self.tvcm_src_path)
+      self.source_paths.extendRel(self.tvcm_third_party_path, [
+        'Promises/polyfill/src',
+        'gl-matrix/src',
+        'polymer',
+        'd3'
+      ])
+      self.non_module_html_files.extendRel(self.tvcm_third_party_path, [
+        'gl-matrix/jsdoc-template/static/header.html',
+        'gl-matrix/jsdoc-template/static/index.html',
+        'Promises/polyfill/tests/test.html',
+        'Promises/reworked_APIs/IndexedDB/example/after.html',
+        'Promises/reworked_APIs/IndexedDB/example/before.html',
+        'Promises/reworked_APIs/WebCrypto/example/after.html',
+        'Promises/reworked_APIs/WebCrypto/example/before.html'
+      ]);
+
     if source_paths != None:
-      self.source_paths += [os.path.abspath(p) for p in source_paths]
+      self.source_paths.extend(source_paths)
+
+    if non_module_html_files != None:
+      self.non_module_html_files.extend(non_module_html_files)
+
+  def Freeze(self):
+    self._frozen = True
+
+  def _WillPartOfPathChange(self):
+    if self._frozen:
+      raise Exception('The project is frozen. You cannot edit it now')
     self._loader = None
 
   @staticmethod
   def FromDict(d):
-    return Project(d['source_paths'])
+    return Project(d['source_paths'],
+                   include_tvcm_paths=False,
+                   non_module_html_files=d.get('non_module_html_files', None))
 
   def AsDict(self):
-    return {'source_paths': self.source_paths}
+    return {
+      'source_paths': list(self.source_paths),
+      'non_module_html_files': list(self.non_module_html_files)
+    }
 
   def __repr__(self):
     return "Project(%s)" % repr(self.source_paths)
@@ -86,15 +173,17 @@ class Project(object):
   def ResetLoader(self):
     self._loader = None
 
-  def _FindAllJSModuleFilenames(self, source_paths):
+  def _FindAllModuleFilenames(self, source_paths):
     all_filenames = _FindAllFilesRecursive(source_paths)
     return [x for x in all_filenames if
-            _IsFilenameAJSModule(self.loader, x)]
+            x not in self.non_module_html_files and
+            _IsFilenameAModule(self.loader, x)]
 
   def _FindTestModuleFilenames(self, source_paths):
     all_filenames = _FindAllFilesRecursive(source_paths)
     return [x for x in all_filenames if
-            _IsFilenameAJSTest(self.loader, x)]
+            x not in self.non_module_html_files and
+            _IsFilenameATest(self.loader, x)]
 
   def FindAllTestModuleResources(self, start_path=None):
     if start_path == None:
@@ -107,11 +196,11 @@ class Project(object):
     return [self.loader.FindResourceGivenAbsolutePath(x)
             for x in test_module_filenames]
 
-  def FindAllJSModuleFilenames(self):
-    return self._FindAllJSModuleFilenames(self.source_paths)
+  def FindAllModuleFilenames(self):
+    return self._FindAllModuleFilenames(self.source_paths)
 
   def CalcLoadSequenceForAllModules(self):
-    filenames = self.FindAllJSModuleFilenames()
+    filenames = self.FindAllModuleFilenames()
     return self.CalcLoadSequenceForModuleFilenames(filenames)
 
   def _Load(self, filenames):