class TestFileHandling(object): """Test parser basic file operations. """ h_dir = os.path.join(H_DIRECTORY, 'file_handling') def setup(self): self.parser = CParser(process_all=False) def test_init(self): parser = CParser(os.path.join(self.h_dir, 'replace.h')) assert parser.files is not None def test_find_file(self): saved_headers = pyclibrary.utils.HEADER_DIRS try: pyclibrary.utils.add_header_locations([self.h_dir]) assert self.h_dir in pyclibrary.utils.HEADER_DIRS assert self.parser.find_headers(['replace.h']) == \ [os.path.join(self.h_dir, 'replace.h')] finally: pyclibrary.utils.HEADER_DIRS = saved_headers abs_hdr_path = os.path.join(self.h_dir, 'replace.h') assert self.parser.find_headers([abs_hdr_path]) == [abs_hdr_path] abs_hdr_path2 = os.path.join(self.h_dir, 'c_comments.h') assert len(self.parser.find_headers([abs_hdr_path, abs_hdr_path2])) == 2 def test_load_file(self): path = os.path.join(self.h_dir, 'replace.h') assert self.parser.load_file(path) assert self.parser.files[path] is not None assert self.parser.file_order == [path] assert self.parser.init_opts['replace']['replace.h'] is None assert self.parser.init_opts['files'] == ['replace.h'] def test_load_file_and_replace(self): path = os.path.join(self.h_dir, 'replace.h') rep = {'{placeholder}': '1', 'placeholder2': '2'} assert self.parser.load_file(path, rep) lines = self.parser.files[path].split('\n') assert lines[3] == '# define MACRO 1' assert lines[6] == ' # define MACRO2 2' lines[3] = '# define MACRO {placeholder}' lines[6] = ' # define MACRO2 placeholder2' with open(path) as f: compare_lines(lines, f.readlines()) assert self.parser.file_order == [path] assert self.parser.init_opts['replace']['replace.h'] == rep assert self.parser.init_opts['files'] == ['replace.h'] def test_load_non_existing_file(self): path = os.path.join(self.h_dir, 'no.h') assert not self.parser.load_file(path) assert self.parser.files[path] is None def test_removing_c_comments(self): path = os.path.join(self.h_dir, 'c_comments.h') self.parser.load_file(path) self.parser.remove_comments(path) with open(os.path.join(self.h_dir, 'c_comments_removed.h'), 'rU') as f: compare_lines(self.parser.files[path].split('\n'), f.readlines()) def test_removing_cpp_comments(self): path = os.path.join(self.h_dir, 'cpp_comments.h') self.parser.load_file(path) self.parser.remove_comments(path) with open(os.path.join(self.h_dir, 'cpp_comments_removed.h'), 'rU') as f: compare_lines(self.parser.files[path].split('\n'), f.readlines())
class TestFileHandling(object): """Test parser basic file operations. """ h_dir = os.path.join(H_DIRECTORY, "file_handling") def setup(self): self.parser = CParser(process_all=False) def test_init(self): parser = CParser(os.path.join(self.h_dir, "replace.h")) assert parser.files is not None def test_find_file(self): saved_headers = pyclibrary.utils.HEADER_DIRS try: pyclibrary.utils.add_header_locations([self.h_dir]) assert self.h_dir in pyclibrary.utils.HEADER_DIRS assert self.parser.find_headers(["replace.h"]) == [os.path.join(self.h_dir, "replace.h")] finally: pyclibrary.utils.HEADER_DIRS = saved_headers abs_hdr_path = os.path.join(self.h_dir, "replace.h") assert self.parser.find_headers([abs_hdr_path]) == [abs_hdr_path] abs_hdr_path2 = os.path.join(self.h_dir, "c_comments.h") assert len(self.parser.find_headers([abs_hdr_path, abs_hdr_path2])) == 2 def test_load_file(self): path = os.path.join(self.h_dir, "replace.h") assert self.parser.load_file(path) assert self.parser.files[path] is not None assert self.parser.file_order == [path] assert self.parser.init_opts["replace"]["replace.h"] is None assert self.parser.init_opts["files"] == ["replace.h"] def test_load_file_and_replace(self): path = os.path.join(self.h_dir, "replace.h") rep = {"{placeholder}": "1", "placeholder2": "2"} assert self.parser.load_file(path, rep) lines = self.parser.files[path].split("\n") assert lines[3] == "# define MACRO 1" assert lines[6] == " # define MACRO2 2" lines[3] = "# define MACRO {placeholder}" lines[6] = " # define MACRO2 placeholder2" with open(path) as f: compare_lines(lines, f.readlines()) assert self.parser.file_order == [path] assert self.parser.init_opts["replace"]["replace.h"] == rep assert self.parser.init_opts["files"] == ["replace.h"] def test_load_non_existing_file(self): path = os.path.join(self.h_dir, "no.h") assert not self.parser.load_file(path) assert self.parser.files[path] is None def test_removing_c_comments(self): path = os.path.join(self.h_dir, "c_comments.h") self.parser.load_file(path) self.parser.remove_comments(path) with open(os.path.join(self.h_dir, "c_comments_removed.h"), "rU") as f: compare_lines(self.parser.files[path].split("\n"), f.readlines()) def test_removing_cpp_comments(self): path = os.path.join(self.h_dir, "cpp_comments.h") self.parser.load_file(path) self.parser.remove_comments(path) with open(os.path.join(self.h_dir, "cpp_comments_removed.h"), "rU") as f: compare_lines(self.parser.files[path].split("\n"), f.readlines())