Esempio n. 1
0
def run_test(test_filename, print_json = False, print_ninja = False):
	print("-> Testing %s" % test_filename)
	try:
		json_filename = os.path.splitext(test_filename)[0] + ".json"
		json_exists = os.path.isfile(json_filename)
		if json_exists or print_json:
			engine = EngineMock()
			parse(engine, test_filename)
			if print_json:
				print("--- JSON ---------------------")
				print(json.dumps(engine.output, sort_keys = True, indent = "\t"))
				print("--- JSON END -----------------")
			if json_exists:
				with open(json_filename, "r") as f:
					reference = json.loads(f.read())
					if sys.version_info[0] < 3:
						def byteify(input):
							if isinstance(input, dict):
								return {byteify(key): byteify(value) for key,value in input.iteritems()}
							elif isinstance(input, list):
								return [byteify(element) for element in input]
							elif isinstance(input, unicode):
								return input.encode("utf-8")
							else:
								return input
						reference = byteify(reference)
				diff = DeepDiff(reference, engine.output)
				if diff:
					print("Results differ from reference:")
					pprint(diff)
					return False

		ninja_filename = os.path.splitext(test_filename)[0] + ".ninja"
		ninja_exists = os.path.isfile(ninja_filename)
		if ninja_exists or print_ninja:
			engine = Engine()
			engine.load(test_filename, logo = False)
			if print_ninja:
				print("--- NINJA --------------------")
				print(engine.text())
				print("--- NINJA END ----------------")
			if ninja_exists:
				with open(os.path.splitext(test_filename)[0] + ".ninja", "r") as f:
					reference = f.read()
				diff = DeepDiff(reference, engine.text())
				if diff:
					print("Results differ from reference:")
					pprint(diff)
					return False

		if not (json_exists or print_json or ninja_exists or print_ninja):
			print("json and ninja files are not present")
			return False

		return True
	except:
		err = sys.exc_info()[0]
		print("Exception error: %s" % err)
		traceback.print_exc()
		return False
Esempio n. 2
0
	def load(self, filename, logo = True):
		self.filename = filename
		self.rel_path = rel_dir(filename)
		if logo:
			self.output.append("# generated with love by buildfox from %s" % filename)
		self.write_rel_path()
		parse(self, filename)
Esempio n. 3
0
	def on_include(self, obj):
		paths = self.eval_find_files([obj])
		for path in paths:
			old_rel_path = self.rel_path
			self.rel_path = rel_dir(path)
			self.write_rel_path()
			parse(self, path)
			self.rel_path = old_rel_path
Esempio n. 4
0
	def load_core(self, fox_core):
		self.filename = "fox_core.fox"
		self.rel_path = ""
		self.write_rel_path()
		parse(self, self.filename, text = fox_core)
Esempio n. 5
0
def run_test(test_filename, print_json=False, print_ninja=False):
    print("-> Testing %s" % test_filename)
    try:
        json_filename = os.path.splitext(test_filename)[0] + ".json"
        json_exists = os.path.isfile(json_filename)
        if json_exists or print_json:
            engine = EngineMock()
            parse(engine, test_filename)
            if print_json:
                print("--- JSON ---------------------")
                print(json.dumps(engine.output, sort_keys=True, indent="\t"))
                print("--- JSON END -----------------")
            if json_exists:
                with open(json_filename, "r") as f:
                    reference = json.loads(f.read())
                    if sys.version_info[0] < 3:

                        def byteify(input):
                            if isinstance(input, dict):
                                return {
                                    byteify(key): byteify(value)
                                    for key, value in input.iteritems()
                                }
                            elif isinstance(input, list):
                                return [byteify(element) for element in input]
                            elif isinstance(input, unicode):
                                return input.encode("utf-8")
                            else:
                                return input

                        reference = byteify(reference)
                diff = DeepDiff(reference, engine.output)
                if diff:
                    print("Results differ from reference:")
                    pprint(diff)
                    return False

        ninja_filename = os.path.splitext(test_filename)[0] + ".ninja"
        ninja_exists = os.path.isfile(ninja_filename)
        if ninja_exists or print_ninja:
            engine = Engine()
            engine.load(test_filename, logo=False)
            if print_ninja:
                print("--- NINJA --------------------")
                print(engine.text())
                print("--- NINJA END ----------------")
            if ninja_exists:
                with open(os.path.splitext(test_filename)[0] + ".ninja",
                          "r") as f:
                    reference = f.read()
                diff = DeepDiff(reference, engine.text())
                if diff:
                    print("Results differ from reference:")
                    pprint(diff)
                    return False

        if not (json_exists or print_json or ninja_exists or print_ninja):
            print("json and ninja files are not present")
            return False

        return True
    except:
        err = sys.exc_info()[0]
        print("Exception error: %s" % err)
        traceback.print_exc()
        return False