tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

json_gn_editor_test.py (3859B)


      1 #!/usr/bin/env python3
      2 # Copyright 2021 The Chromium Authors
      3 # Use of this source code is governed by a BSD-style license that can be
      4 # found in the LICENSE file.
      5 import unittest
      6 import tempfile
      7 import textwrap
      8 import os
      9 
     10 import json_gn_editor
     11 
     12 
     13 class BuildFileTest(unittest.TestCase):
     14    def test_avoid_reformatting_gn_file_if_no_ast_changed(self):
     15        text = textwrap.dedent('''\
     16        android_library("target_name") {
     17          deps =[":local_dep"]} #shouldn't change
     18        ''')
     19        with tempfile.NamedTemporaryFile(mode='w') as f:
     20            f.write(text)
     21            f.flush()
     22            with json_gn_editor.BuildFile(f.name, '/') as build_file:
     23                pass
     24            with open(f.name, 'r') as f_after:
     25                self.assertEqual(f_after.read(), text)
     26 
     27    def test_split_dep_works_for_full_relative_abs_deps(self):
     28        with tempfile.TemporaryDirectory() as rootdir:
     29            java_subdir = os.path.join(rootdir, 'java')
     30            os.mkdir(java_subdir)
     31            build_gn_path = os.path.join(java_subdir, 'BUILD.gn')
     32            with open(build_gn_path, 'w') as f:
     33                f.write(
     34                    textwrap.dedent('''\
     35            android_library("java") {
     36            }
     37 
     38            android_library("target1") {
     39              deps = [ "//java:java" ]
     40            }
     41 
     42            android_library("target2") {
     43              deps += [ ":java" ]
     44            }
     45 
     46            android_library("target3") {
     47              public_deps = [ "//java" ]
     48            }
     49            '''))
     50            with json_gn_editor.BuildFile(build_gn_path,
     51                                          rootdir) as build_file:
     52                # Test both explicit and implied dep resolution works.
     53                build_file.split_dep('//java:java', '//other_dir:other_dep')
     54                build_file.split_dep('//java', '//other_dir:other_dep2')
     55            with open(build_gn_path, 'r') as f:
     56                self.assertEqual(
     57                    f.read(),
     58                    textwrap.dedent('''\
     59            android_library("java") {
     60            }
     61 
     62            android_library("target1") {
     63              deps = [
     64                "//java:java",
     65                "//other_dir:other_dep",
     66                "//other_dir:other_dep2",
     67              ]
     68            }
     69 
     70            android_library("target2") {
     71              deps += [
     72                ":java",
     73                "//other_dir:other_dep",
     74                "//other_dir:other_dep2",
     75              ]
     76            }
     77 
     78            android_library("target3") {
     79              public_deps = [
     80                "//java",
     81                "//other_dir:other_dep",
     82                "//other_dir:other_dep2",
     83              ]
     84            }
     85            '''))
     86 
     87    def test_split_dep_does_not_duplicate_deps(self):
     88        with tempfile.TemporaryDirectory() as rootdir:
     89            java_subdir = os.path.join(rootdir, 'java')
     90            os.mkdir(java_subdir)
     91            build_gn_path = os.path.join(java_subdir, 'BUILD.gn')
     92            with open(build_gn_path, 'w') as f:
     93                f.write(
     94                    textwrap.dedent('''\
     95            android_library("target") {
     96              deps = [
     97                "//java",
     98                "//other_dir:other_dep",
     99              ]
    100            }
    101            '''))
    102            with json_gn_editor.BuildFile(build_gn_path,
    103                                          rootdir) as build_file:
    104                build_file.split_dep('//java:java', '//other_dir:other_dep')
    105            with open(build_gn_path, 'r') as f:
    106                self.assertEqual(
    107                    f.read(),
    108                    textwrap.dedent('''\
    109            android_library("target") {
    110              deps = [
    111                "//java",
    112                "//other_dir:other_dep",
    113              ]
    114            }
    115            '''))
    116 
    117 
    118 if __name__ == '__main__':
    119    unittest.main()