# Copyright 2015 The Shaderc Authors. All rights reserved. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. """Classes for conveniently specifying a test environment. These classes have write() methods that create objects in a test's environment. For instance, File creates a file, and Directory creates a directory with some files or subdirectories in it. Example: test.environment = Directory('.', [ File('a.vert', 'void main(){}'), Directory('subdir', [ File('b', 'b content'), File('c', 'c content') ]) ]) In general, these classes don't clean up the disk content they create. They were written in a test framework that handles clean-up at a higher level. """ import os class Directory: """Specifies a directory or a subdirectory.""" def __init__(self, name, content): """content is a list of File or Directory objects.""" self.name = name self.content = content @staticmethod def create(path): """Creates a directory path if it doesn't already exist.""" try: os.makedirs(path) except OSError: # Handles both pre-existence and a racing creation. if not os.path.isdir(path): raise def write(self, parent): """Creates a self.name directory within parent (which is a string path) and recursively writes the content in it. """ full_path = os.path.join(parent, self.name) Directory.create(full_path) for c in self.content: c.write(full_path) class File: """Specifies a file by name and content.""" def __init__(self, name, content): self.name = name self.content = content def write(self, directory): """Writes content to directory/name.""" with open(os.path.join(directory, self.name), 'w') as f: f.write(self.content)