78 lines
2.5 KiB
Python
78 lines
2.5 KiB
Python
#!/usr/bin/env python3
|
|
|
|
# Copyright (c) 2012 Google Inc. All rights reserved.
|
|
# Use of this source code is governed by a BSD-style license that can be
|
|
# found in the LICENSE file.
|
|
|
|
"""Unit tests for the ninja.py file."""
|
|
|
|
import sys
|
|
import unittest
|
|
from pathlib import Path
|
|
|
|
from gyp.generator import ninja
|
|
from gyp.MSVSVersion import SelectVisualStudioVersion
|
|
|
|
|
|
def _has_visual_studio():
|
|
"""Check if Visual Studio can be detected by gyp's registry-based detection."""
|
|
if not sys.platform.startswith("win"):
|
|
return False
|
|
try:
|
|
SelectVisualStudioVersion("auto", allow_fallback=False)
|
|
return True
|
|
except ValueError:
|
|
return False
|
|
|
|
|
|
class TestPrefixesAndSuffixes(unittest.TestCase):
|
|
@unittest.skipUnless(
|
|
_has_visual_studio(),
|
|
"requires Windows with a Visual Studio installation detected via the registry",
|
|
)
|
|
def test_BinaryNamesWindows(self):
|
|
writer = ninja.NinjaWriter(
|
|
"foo", "wee", ".", ".", "build.ninja", ".", "build.ninja", "win"
|
|
)
|
|
spec = {"target_name": "wee"}
|
|
for key, ext in {
|
|
"executable": ".exe",
|
|
"shared_library": ".dll",
|
|
"static_library": ".lib",
|
|
}.items():
|
|
self.assertTrue(writer.ComputeOutputFileName(spec, key).endswith(ext))
|
|
|
|
def test_BinaryNamesLinux(self):
|
|
writer = ninja.NinjaWriter(
|
|
"foo", "wee", ".", ".", "build.ninja", ".", "build.ninja", "linux"
|
|
)
|
|
spec = {"target_name": "wee"}
|
|
self.assertTrue("." not in writer.ComputeOutputFileName(spec, "executable"))
|
|
self.assertTrue(
|
|
writer.ComputeOutputFileName(spec, "shared_library").startswith("lib")
|
|
)
|
|
self.assertTrue(
|
|
writer.ComputeOutputFileName(spec, "static_library").startswith("lib")
|
|
)
|
|
self.assertTrue(
|
|
writer.ComputeOutputFileName(spec, "shared_library").endswith(".so")
|
|
)
|
|
self.assertTrue(
|
|
writer.ComputeOutputFileName(spec, "static_library").endswith(".a")
|
|
)
|
|
|
|
def test_GenerateCompileDBWithNinja(self):
|
|
build_dir = (
|
|
Path(__file__).resolve().parent.parent.parent.parent / "data" / "ninja"
|
|
)
|
|
compile_db = ninja.GenerateCompileDBWithNinja(build_dir)
|
|
assert len(compile_db) == 1
|
|
assert compile_db[0]["directory"] == str(build_dir)
|
|
assert compile_db[0]["command"] == "cc my.in my.out"
|
|
assert compile_db[0]["file"] == "my.in"
|
|
assert compile_db[0]["output"] == "my.out"
|
|
|
|
|
|
if __name__ == "__main__":
|
|
unittest.main()
|