Ejemplo n.º 1
0
    def setUpClass(cls):
        if not cls.server:
            cls.server = TestServerLauncher(
                server_capabilities=['ImCool', 'TooCool'])
            cls.server.start()

            filename = os.path.join(temp_folder(), "conan.conf")
            save(filename, "")
            config = ConanClientConfigParser(filename)
            requester = ConanRequester(config, requests)
            client_factory = RestApiClientFactory(TestBufferConanOutput(),
                                                  requester=requester,
                                                  config=config)
            localdb = LocalDBMock()

            mocked_user_io = UserIO(out=TestBufferConanOutput())
            mocked_user_io.get_username = Mock(return_value="private_user")
            mocked_user_io.get_password = Mock(return_value="private_pass")

            cls.auth_manager = ConanApiAuthManager(client_factory,
                                                   mocked_user_io, localdb)
            cls.remote = Remote("myremote",
                                "http://127.0.0.1:%s" % str(cls.server.port),
                                True, True)
            cls.auth_manager._authenticate(cls.remote,
                                           user="******",
                                           password="******")
            cls.api = client_factory.new(cls.remote, localdb.access_token,
                                         localdb.refresh_token, {})
Ejemplo n.º 2
0
    def test_replace_in_file_readonly(self):
        tmp_dir = temp_folder()
        text_file = os.path.join(tmp_dir, "text.txt")
        save(text_file, "ONE TWO THREE")

        os.chmod(
            text_file,
            os.stat(text_file).st_mode
            & ~(stat.S_IWRITE | stat.S_IWGRP | stat.S_IWOTH))
        mode_before_replace = os.stat(text_file).st_mode

        replace_in_file(text_file,
                        "ONE TWO THREE",
                        "FOUR FIVE SIX",
                        output=TestBufferConanOutput())
        self.assertEqual(load(text_file), "FOUR FIVE SIX")

        self.assertEqual(os.stat(text_file).st_mode, mode_before_replace)

        replace_path_in_file(text_file,
                             "FOUR FIVE SIX",
                             "SEVEN EIGHT NINE",
                             output=TestBufferConanOutput())
        self.assertEqual(load(text_file), "SEVEN EIGHT NINE")

        self.assertEqual(os.stat(text_file).st_mode, mode_before_replace)
Ejemplo n.º 3
0
    def test_plain_zip(self):
        tmp_folder = temp_folder()
        with chdir(tmp_folder):
            ori_files_dir = os.path.join(tmp_folder, "subfolder-1.2.3")
            file1 = os.path.join(ori_files_dir, "file1")
            file2 = os.path.join(ori_files_dir, "folder", "file2")
            file3 = os.path.join(ori_files_dir, "file3")

            save(file1, "")
            save(file2, "")
            save(file3, "")

        zip_file = os.path.join(tmp_folder, "myzip.zip")
        # Zip with a "folder_entry" in the zip (not only for the files)
        self._zipdir(tmp_folder, zip_file, folder_entry="subfolder-1.2.3")

        # ZIP unzipped regularly
        extract_folder = temp_folder()
        output = TestBufferConanOutput()
        unzip(zip_file,
              destination=extract_folder,
              strip_root=False,
              output=output)
        self.assertNotIn("ERROR: Error extract", output)
        self.assertTrue(
            os.path.exists(os.path.join(extract_folder, "subfolder-1.2.3")))
        self.assertTrue(
            os.path.exists(
                os.path.join(extract_folder, "subfolder-1.2.3", "file1")))
        self.assertTrue(
            os.path.exists(
                os.path.join(extract_folder, "subfolder-1.2.3", "folder",
                             "file2")))
        self.assertTrue(
            os.path.exists(
                os.path.join(extract_folder, "subfolder-1.2.3", "file3")))

        # Extract without the subfolder
        extract_folder = temp_folder()
        output = TestBufferConanOutput()
        unzip(zip_file,
              destination=extract_folder,
              strip_root=True,
              output=output)
        self.assertNotIn("ERROR: Error extract", output)
        self.assertFalse(
            os.path.exists(os.path.join(extract_folder, "subfolder-1.2.3")))
        self.assertTrue(os.path.exists(os.path.join(extract_folder, "file1")))
        self.assertTrue(
            os.path.exists(os.path.join(extract_folder, "folder", "file2")))
        self.assertTrue(os.path.exists(os.path.join(extract_folder, "file3")))
Ejemplo n.º 4
0
    def test_node(self):
        """ nodes are different even if contain same values,
        so they can be repeated if necessary in the graph (common
        static libraries)
        """
        ref1 = ConanFileReference.loads("Hello/0.1@user/stable")
        ref2 = ConanFileReference.loads("Hello/0.1@user/stable")

        conanfile1 = ConanFile(TestBufferConanOutput(), None)
        conanfile2 = ConanFile(TestBufferConanOutput(), None)
        n1 = Node(ref1, conanfile1, context=CONTEXT_HOST)
        n2 = Node(ref2, conanfile2, context=CONTEXT_HOST)

        self.assertNotEqual(n1, n2)
Ejemplo n.º 5
0
    def build_vs_project_test(self, generator, props):
        client = TestClient()
        files = {}
        files["conanfile.py"] = hello_conanfile_py
        files["hello.h"] = hello_h
        client.save(files)
        client.run("create . lasote/testing")

        files = get_vs_project_files()
        files["MyProject/main.cpp"] = main_cpp
        files["conanfile.txt"] = conanfile_txt.format(generator=generator)
        props = os.path.join(client.current_folder, props)
        old = '<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />'
        new = old + '<Import Project="{props}" />'.format(props=props)
        files["MyProject/MyProject.vcxproj"] = files[
            "MyProject/MyProject.vcxproj"].replace(old, new)
        client.save(files, clean_first=True)

        for build_type in ["Debug", "Release"]:
            arch = "x86"
            runner = ConanRunner(print_commands_to_output=True,
                                 generate_run_log_file=False,
                                 log_run_to_output=True,
                                 output=TestBufferConanOutput())
            settings = MockSettings({
                "os": "Windows",
                "build_type": build_type,
                "arch": arch,
                "compiler": "Visual Studio",
                "compiler.version": "15",
                "compiler.toolset": "v141"
            })
            conanfile = MockConanfile(settings, runner=runner)
            settings = " -s os=Windows " \
                       " -s build_type={build_type} " \
                       " -s arch={arch}" \
                       " -s compiler=\"Visual Studio\"" \
                       " -s compiler.toolset=v141" \
                       " -s compiler.version=15".format(build_type=build_type, arch=arch)
            client.run("install . %s" % settings)
            with tools.chdir(client.current_folder):
                msbuild = MSBuild(conanfile)
                msbuild.build(project_file="MyProject.sln",
                              build_type=build_type,
                              arch=arch)
                output = TestBufferConanOutput()
                runner("%s\MyProject.exe" % build_type, output)
                self.assertIn("Hello %s!!!" % build_type, output)
Ejemplo n.º 6
0
    def valid_xml_test(self):
        conanfile = ConanFile(TestBufferConanOutput(), None)
        conanfile.initialize(Settings({}), EnvValues())
        ref = ConanFileReference.loads("MyPkg/0.1@user/testing")
        folder1 = temp_folder()
        folder1 = folder1.replace("\\", "/")
        os.makedirs(os.path.join(folder1, "include"))
        os.makedirs(os.path.join(folder1, "lib"))
        cpp_info = CppInfo(ref.name, folder1)
        conanfile.deps_cpp_info.add(ref.name, cpp_info)
        ref = ConanFileReference.loads("My.Fancy-Pkg_2/0.1@user/testing")
        folder2 = temp_folder()
        folder2 = folder2.replace("\\", "/")
        os.makedirs(os.path.join(folder2, "include"))
        os.makedirs(os.path.join(folder2, "lib"))
        cpp_info = CppInfo(ref.name, folder2)
        conanfile.deps_cpp_info.add(ref.name, cpp_info)
        generator = VisualStudioLegacyGenerator(conanfile)

        content = generator.content
        xml.etree.ElementTree.fromstring(content)

        self.assertIn(
            'AdditionalIncludeDirectories="&quot;%s/include&quot;;&quot;%s/include&quot;;"'
            % (folder1, folder2), content)
        self.assertIn(
            'AdditionalLibraryDirectories="&quot;%s/lib&quot;;&quot;%s/lib&quot;;"'
            % (folder1, folder2), content)
Ejemplo n.º 7
0
 def basic_mocked_test(self):
     mocked_user_io = UserIO(out=TestBufferConanOutput())
     mocked_user_io.request_boolean = Mock(return_value=True)
     self.client.run("remove hello/*", user_io=mocked_user_io)
     self.assert_folders(local_folders={
         "H1": None,
         "H2": None,
         "B": [1, 2],
         "O": [1, 2]
     },
                         remote_folders={
                             "H1": [1, 2],
                             "H2": [1, 2],
                             "B": [1, 2],
                             "O": [1, 2]
                         },
                         build_folders={
                             "H1": None,
                             "H2": None,
                             "B": [1, 2],
                             "O": [1, 2]
                         },
                         src_folders={
                             "H1": False,
                             "H2": False,
                             "B": True,
                             "O": True
                         })
     folders = os.listdir(self.client.storage_folder)
     six.assertCountEqual(self, ["Other", "Bye"], folders)
Ejemplo n.º 8
0
    def test_user_space_with_local_sources(self):
        output = TestBufferConanOutput()

        # Need a real repo to get a working SCM object
        local_sources_path = os.path.join(self.tmp_dir,
                                          'git_repo').replace('\\', '/')
        create_local_git_repo(files={'file1': "content"},
                              folder=local_sources_path)
        git = Git(local_sources_path)
        url = "https://remote.url"
        git.run("remote add origin \"{}\"".format(url))

        # Mock the conanfile (return scm_data)
        conanfile = mock.MagicMock()
        conanfile.scm = {'type': 'git', 'url': 'auto', 'revision': 'auto'}

        # Mock functions called from inside _run_scm (tests will be here)
        def merge_directories(src, dst, excluded=None):
            src = os.path.normpath(src)
            dst = os.path.normpath(dst)
            self.assertEqual(src.replace('\\', '/'), local_sources_path)
            self.assertEqual(dst, self.src_folder)

        with mock.patch("conans.client.source.merge_directories",
                        side_effect=merge_directories):
            _run_local_scm(conanfile,
                           conanfile_folder=local_sources_path,
                           src_folder=self.src_folder,
                           output=output)

        self.assertIn(
            "getting sources from folder: {}".format(
                local_sources_path).lower(),
            str(output).lower())
Ejemplo n.º 9
0
 def test_500_raises_internal_error(self):
     out = TestBufferConanOutput()
     uploader = FileUploader(MockRequester(500), out, verify=False, config=_ConfigMock())
     _, f = tempfile.mkstemp()
     save(f, "some contents")
     with six.assertRaisesRegex(self, InternalErrorException, "tururu"):
         uploader.upload("fake_url", self.f, dedup=True)
Ejemplo n.º 10
0
    def apple_frameworks_test(self):
        settings = Settings.loads(get_default_settings_yml())
        settings.compiler = "apple-clang"
        settings.os = "Macos"
        conanfile = ConanFile(TestBufferConanOutput(), None)
        conanfile.initialize(Settings({}), EnvValues())
        conanfile.settings = settings
        ref = ConanFileReference.loads("MyPkg/0.1@lasote/stables")
        cpp_info = CppInfo(ref.name, "/dummy_root_folder1")
        cpp_info.filter_empty = False
        cpp_info.frameworks = ['AudioUnit', 'AudioToolbox']
        cpp_info.version = "1.3"
        cpp_info.description = "My cool description"
        conanfile.deps_cpp_info.add(ref.name, cpp_info)

        generator = PkgConfigGenerator(conanfile)
        files = generator.content

        self.assertEqual(
            files["MyPkg.pc"], """prefix=/dummy_root_folder1
libdir=${prefix}/lib
includedir=${prefix}/include

Name: MyPkg
Description: My cool description
Version: 1.3
Libs: -L${libdir} -Wl,-rpath,"${libdir}" -framework AudioUnit -framework AudioToolbox -F /dummy_root_folder1/Frameworks
Cflags: -I${includedir}
""")
Ejemplo n.º 11
0
    def test_in_cache_with_local_sources(self):
        """In cache, if we have cached scm sources in the scm_sources, it will get them"""
        output = TestBufferConanOutput()
        local_sources_path = self.tmp_dir.replace('\\', '/')

        # Mock the conanfile (return scm_data)
        conanfile = mock.MagicMock()
        conanfile.scm = {'type': 'git', 'url': 'auto', 'revision': 'auto'}
        conanfile.folders.base_source = self.src_folder

        # Mock functions called from inside _run_scm (tests will be here)
        def merge_directories(src, dst, excluded=None):
            self.assertEqual(src, local_sources_path)
            self.assertEqual(dst, self.src_folder)

        def clean_source_folder(folder):
            self.assertEqual(folder, self.src_folder)

        with mock.patch("conans.client.source.merge_directories",
                        side_effect=merge_directories):
            with mock.patch("conans.client.source._clean_source_folder",
                            side_effect=clean_source_folder):

                _run_cache_scm(conanfile,
                               scm_sources_folder=local_sources_path,
                               output=output)

        self.assertIn("Copying previously cached scm sources", output)
Ejemplo n.º 12
0
    def insert_test(self):
        tmp_folder = temp_folder()
        f = os.path.join(tmp_folder, "remotes.json")
        save(f, """
{
 "remotes": [
  {
   "url": "https://server.conan.io",
   "verify_ssl": true,
   "name": "conan.io"
  }
 ]
}
""")
        output = TestBufferConanOutput()
        cache = ClientCache(tmp_folder, output)
        registry = RemoteRegistry(cache, output)
        registry.add("repo1", "url1", True, insert=0)
        self.assertEqual(list(registry.load_remotes().values()), [Remote("repo1", "url1", True, False),
                         Remote("conan.io", "https://server.conan.io", True, False)])
        registry.add("repo2", "url2", True, insert=1)
        self.assertEqual(list(registry.load_remotes().values()), [Remote("repo1", "url1", True, False),
                         Remote("repo2", "url2", True, False),
                         Remote("conan.io", "https://server.conan.io", True, False)])
        registry.add("repo3", "url3", True, insert=5)
        self.assertEqual(list(registry.load_remotes().values()), [Remote("repo1", "url1", True, False),
                         Remote("repo2", "url2", True, False),
                         Remote("conan.io", "https://server.conan.io", True, False),
                         Remote("repo3", "url3", True, False)])
Ejemplo n.º 13
0
    def test_remote_none(self):
        """ RemoteRegistry should be able to deal when the URL is None
        """
        f = os.path.join(temp_folder(), "add_none_test")
        Remotes().save(f)
        cache = ClientCache(os.path.dirname(f), TestBufferConanOutput())
        registry = cache.registry

        registry.add("foobar", None)
        self.assertEqual(
            list(registry.load_remotes().values()),
            [("conancenter", "https://center.conan.io", True, False),
             ("conan-center", "https://conan.bintray.com", True, False),
             ("foobar", None, True, False)])
        self.assertIn(
            "WARN: The URL is empty. It must contain scheme and hostname.",
            cache._output)
        registry.remove("foobar")

        registry.update("conan-center", None)
        self.assertEqual(
            list(registry.load_remotes().values()),
            [("conancenter", "https://center.conan.io", True, False),
             ("conan-center", None, True, False)])
        self.assertIn(
            "WARN: The URL is empty. It must contain scheme and hostname.",
            cache._output)
Ejemplo n.º 14
0
        def validate_additional_dependencies(libname, additional_dep):
            tempdir = temp_folder()
            with chdir(tempdir):
                conanfile = ConanFile(TestBufferConanOutput(), None)
                conanfile.initialize(Settings({}), EnvValues())

                ref = ConanFileReference.loads("MyPkg/0.1@user/testing")
                cpp_info = CppInfo(ref.name, "dummy_root_folder1")
                cpp_info.libs = [libname]
                conanfile.deps_cpp_info.add(ref.name, cpp_info)

                settings = Settings.loads(get_default_settings_yml())
                settings.os = "Windows"
                settings.arch = "x86_64"
                settings.build_type = "Release"
                settings.compiler = "Visual Studio"
                settings.compiler.version = "15"
                settings.compiler.runtime = "MD"
                settings.compiler.toolset = "v141"
                conanfile.settings = settings

                generator = VisualStudioMultiGenerator(conanfile)
                generator.output_path = ""
                content = generator.content

                self.assertIn('conanbuildinfo_release_x64_v141.props', content.keys())

                content_release = content['conanbuildinfo_release_x64_v141.props']
                self.assertIn("<ConanLibraries>%s;</ConanLibraries>" % additional_dep,
                              content_release)
                self.assertIn("<AdditionalDependencies>"
                              "$(ConanLibraries)%(AdditionalDependencies)"
                              "</AdditionalDependencies>", content_release)
Ejemplo n.º 15
0
 def system_frameworks_libs_test(self):
     # https://github.com/conan-io/conan/issues/7301
     conanfile = ConanFile(TestBufferConanOutput(), None)
     conanfile.initialize(Settings({}), EnvValues())
     cpp_info = CppInfo("MyPkg", "/rootpath")
     cpp_info.version = "0.1"
     cpp_info.libs = ["mypkg"]
     cpp_info.system_libs = ["pthread"]
     cpp_info.frameworks = ["cocoa"]
     cpp_info.frameworkdirs = ["frameworks"]
     cpp_info.filter_empty = False
     conanfile.deps_cpp_info.add("MyPkg", DepCppInfo(cpp_info))
     generator = SConsGenerator(conanfile)
     content = generator.content
     scons_lines = content.splitlines()
     self.assertIn('        "LIBS"        : [\'mypkg\', \'pthread\'],',
                   scons_lines)
     self.assertIn('        "FRAMEWORKS"  : [\'cocoa\'],', scons_lines)
     if platform.system() == "Windows":
         self.assertIn(
             '        "FRAMEWORKPATH"  : [\'/rootpath\\\\frameworks\'],',
             scons_lines)
     else:
         self.assertIn(
             '        "FRAMEWORKPATH"  : [\'/rootpath/frameworks\'],',
             scons_lines)
     self.assertIn('    "MyPkg_version" : "0.1",', scons_lines)
Ejemplo n.º 16
0
    def test_revision_auto(self, _, is_pristine):
        output = TestBufferConanOutput()

        # Mock the conanfile (return scm_data)
        url = "https://remote.url"
        conanfile = mock.MagicMock()
        conanfile.scm = {'type': 'git', 'url': url, 'revision': 'auto'}

        if not is_pristine:
            save(os.path.join(self.git.folder, "other"), "ccc")

        scm_data, _ = _capture_scm_auto_fields(
            conanfile=conanfile,
            conanfile_dir=self.conanfile_dir,
            package_layout=None,
            output=output,
            ignore_dirty=False,
            scm_to_conandata=False)

        self.assertEqual(scm_data.url, url)
        if is_pristine:
            self.assertEqual(scm_data.revision, self.rev)
            self.assertIn("Revision deduced by 'auto': {}".format(self.rev), output)
            self.assertNotIn("Repo origin deduced", output)
        else:
            self.assertEqual(scm_data.revision, "auto")
            self.assertIn("There are uncommitted changes, skipping the replacement of 'scm.url' "
                          "and 'scm.revision' auto fields. Use --ignore-dirty to force it.",
                          output)
Ejemplo n.º 17
0
    def test_url_auto_revision_auto(self, _, local_origin):
        output = TestBufferConanOutput()

        # Mock the conanfile (return scm_data)
        conanfile = mock.MagicMock()
        conanfile.scm = {'type': 'git', 'url': 'auto', 'revision': 'auto'}

        # Set the remote for the repo
        url = self.git.folder if local_origin else "https://remote.url"
        self.git.run("remote add origin \"{}\"".format(url))

        scm_data, _ = _capture_scm_auto_fields(
            conanfile=conanfile,
            conanfile_dir=self.conanfile_dir,
            package_layout=None,
            output=output,
            ignore_dirty=True,
            scm_to_conandata=False)

        self.assertEqual(scm_data.url, url)
        self.assertEqual(scm_data.revision, self.rev)
        self.assertIn("Repo origin deduced by 'auto': {}".format(url), output)
        self.assertIn("Revision deduced by 'auto': {}".format(self.rev), output)
        if local_origin:
            self.assertIn("WARN: Repo origin looks like a local path: {}".format(url), output)
Ejemplo n.º 18
0
 def test_multi_flag(self):
     conanfile = ConanFile(TestBufferConanOutput(), None)
     conanfile.initialize(Settings({}), EnvValues())
     ref = ConanFileReference.loads("MyPkg/0.1@lasote/stables")
     cpp_info = CppInfo(ref.name, "dummy_root_folder1")
     cpp_info.includedirs.append("other_include_dir")
     cpp_info.cxxflags = [
         "-DGTEST_USE_OWN_TR1_TUPLE=1", "-DGTEST_LINKED_AS_SHARED_LIBRARY=1"
     ]
     conanfile.deps_cpp_info.add(ref.name, cpp_info)
     ref = ConanFileReference.loads("MyPkg2/0.1@lasote/stables")
     cpp_info = CppInfo(ref.name, "dummy_root_folder2")
     cpp_info.cflags = ["-DSOMEFLAG=1"]
     conanfile.deps_cpp_info.add(ref.name, cpp_info)
     generator = CMakeGenerator(conanfile)
     content = generator.content
     cmake_lines = content.splitlines()
     self.assertIn('set(CONAN_C_FLAGS_MYPKG2 "-DSOMEFLAG=1")', cmake_lines)
     self.assertIn(
         'set(CONAN_CXX_FLAGS_MYPKG "-DGTEST_USE_OWN_TR1_TUPLE=1'
         ' -DGTEST_LINKED_AS_SHARED_LIBRARY=1")', cmake_lines)
     self.assertIn('set(CONAN_C_FLAGS "-DSOMEFLAG=1 ${CONAN_C_FLAGS}")',
                   cmake_lines)
     self.assertIn(
         'set(CONAN_CXX_FLAGS "-DGTEST_USE_OWN_TR1_TUPLE=1'
         ' -DGTEST_LINKED_AS_SHARED_LIBRARY=1 ${CONAN_CXX_FLAGS}")',
         cmake_lines)
Ejemplo n.º 19
0
 def _init(self):
     temp_dir = temp_folder()
     hook_path = os.path.join(temp_dir, "my_hook.py")
     save(os.path.join(temp_dir, "my_hook.py"), my_hook)
     output = TestBufferConanOutput()
     hook_manager = HookManager(temp_dir, ["my_hook"], output)
     return hook_manager, output, hook_path
Ejemplo n.º 20
0
 def reject_removal_test(self):
     mocked_user_io = UserIO(out=TestBufferConanOutput())
     mocked_user_io.request_boolean = Mock(return_value=False)
     self.client.run("remove hello/* -s -b -p", user_io=mocked_user_io)
     self.assert_folders(local_folders={
         "H1": [1, 2],
         "H2": [1, 2],
         "B": [1, 2],
         "O": [1, 2]
     },
                         remote_folders={
                             "H1": [1, 2],
                             "H2": [1, 2],
                             "B": [1, 2],
                             "O": [1, 2]
                         },
                         build_folders={
                             "H1": [1, 2],
                             "H2": [1, 2],
                             "B": [1, 2],
                             "O": [1, 2]
                         },
                         src_folders={
                             "H1": True,
                             "H2": True,
                             "B": True,
                             "O": True
                         })
Ejemplo n.º 21
0
    def enable_disable_remotes_test(self):
        f = os.path.join(temp_folder(), "aux_file")
        Remotes().save(f)
        cache = ClientCache(os.path.dirname(f), TestBufferConanOutput())
        registry = cache.registry

        registry.add("local", "http://localhost:9300")
        registry.set_disabled_state("local", True)
        self.assertEqual(list(registry.load_remotes().all_values()),
                         [("conan-center", "https://conan.bintray.com", True, False),
                          ("local", "http://localhost:9300", True, True)])

        self.assertEqual(list(registry.load_remotes().values()),
                         [("conan-center", "https://conan.bintray.com", True, False)])

        registry.set_disabled_state("conan-center", True)
        self.assertEqual(list(registry.load_remotes().all_values()),
                         [("conan-center", "https://conan.bintray.com", True, True),
                          ("local", "http://localhost:9300", True, True)])

        self.assertEqual(list(registry.load_remotes().values()), [])

        registry.set_disabled_state("*", False)
        self.assertEqual(list(registry.load_remotes().values()),
                         [("conan-center", "https://conan.bintray.com", True, False),
                          ("local", "http://localhost:9300", True, False)])

        registry.set_disabled_state("*", True)
        self.assertEqual(list(registry.load_remotes().values()), [])
Ejemplo n.º 22
0
    def apple_frameworks_test(self):
        settings = Settings.loads(get_default_settings_yml())
        settings.os = "Macos"
        settings.compiler = "apple-clang"
        settings.compiler.version = "9.1"
        settings.compiler.libcxx = "libc++"
        settings.arch = "x86_64"
        settings.build_type = "Debug"
        conanfile = ConanFile(TestBufferConanOutput(), None)
        conanfile.initialize(Settings({}), EnvValues())
        conanfile.settings = settings

        ref = ConanFileReference.loads("MyPkg/0.1@lasote/stables")
        cpp_info = CppInfo(ref.name, "dummy_root_folder1")
        cpp_info.frameworkdirs.extend(["path/to/Frameworks1", "path/to/Frameworks2"])
        cpp_info.frameworks = ["OpenGL", "OpenCL"]
        cpp_info.filter_empty = False
        conanfile.deps_cpp_info.add(ref.name, cpp_info)

        generator = CMakeGenerator(conanfile)
        content = generator.content
        self.assertIn('find_library(CONAN_FRAMEWORK_${_FRAMEWORK}_FOUND NAME ${_FRAMEWORK} PATHS'
                      ' ${CONAN_FRAMEWORK_DIRS${SUFFIX}})', content)
        self.assertIn('set(CONAN_FRAMEWORK_DIRS "dummy_root_folder1/Frameworks"\n'
                      '\t\t\t"dummy_root_folder1/path/to/Frameworks1"\n'
                      '\t\t\t"dummy_root_folder1/path/to/Frameworks2" '
                      '${CONAN_FRAMEWORK_DIRS})', content)
        self.assertIn('set(CONAN_LIBS ${CONAN_LIBS} ${CONAN_SYSTEM_LIBS} '
                      '${CONAN_FRAMEWORKS_FOUND})', content)

        generator = CMakeFindPackageGenerator(conanfile)
        content = generator.content
        content = content['FindMyPkg.cmake']
        self.assertIn('conan_find_apple_frameworks(MyPkg_FRAMEWORKS_FOUND "${MyPkg_FRAMEWORKS}"'
                      ' "${MyPkg_FRAMEWORK_DIRS}")', content)
Ejemplo n.º 23
0
    def test_detect_default_in_mac_os_using_gcc_as_default(self):
        """
        Test if gcc in Mac OS X is using apple-clang as frontend
        """
        # See: https://github.com/conan-io/conan/issues/2231
        try:
            output = check_output_runner(["gcc", "--version"],
                                         stderr=subprocess.STDOUT)
        except subprocess.CalledProcessError:
            # gcc is not installed or there is any error (no test scenario)
            return

        if "clang" not in output:
            # Not test scenario gcc should display clang in output
            # see: https://stackoverflow.com/questions/19535422/os-x-10-9-gcc-links-to-clang
            raise Exception(
                "Apple gcc doesn't point to clang with gcc frontend anymore!")

        output = TestBufferConanOutput()
        with tools.environment_append({"CC": "gcc"}):
            result = detect_defaults_settings(
                output, profile_path=DEFAULT_PROFILE_NAME)
        # result is a list of tuples (name, value) so converting it to dict
        result = dict(result)
        # No compiler should be detected
        self.assertIsNone(result.get("compiler", None))
        self.assertIn("gcc detected as a frontend using apple-clang", output)
        self.assertIsNotNone(output.error)
Ejemplo n.º 24
0
    def variables_setup_test(self):
        conanfile = ConanFile(TestBufferConanOutput(), None)
        conanfile.initialize(Settings({}), EnvValues())
        ref = ConanFileReference.loads("MyPkg/0.1@lasote/stables")
        cpp_info = CppInfo(ref.name, "dummy_root_folder1")
        cpp_info.defines = ["MYDEFINE1"]
        conanfile.deps_cpp_info.add(ref.name, cpp_info)
        ref = ConanFileReference.loads("MyPkg2/0.1@lasote/stables")
        cpp_info = CppInfo(ref.name, "dummy_root_folder2")
        cpp_info.defines = ["MYDEFINE2"]
        conanfile.deps_cpp_info.add(ref.name, cpp_info)
        conanfile.deps_user_info["LIB1"].myvar = "myvalue"
        conanfile.deps_user_info["LIB1"].myvar2 = "myvalue2"
        conanfile.deps_user_info["lib2"].MYVAR2 = "myvalue4"
        generator = CMakeGenerator(conanfile)
        content = generator.content
        cmake_lines = content.splitlines()
        self.assertIn('set(CONAN_DEFINES_MYPKG "-DMYDEFINE1")', cmake_lines)
        self.assertIn('set(CONAN_DEFINES_MYPKG2 "-DMYDEFINE2")', cmake_lines)
        self.assertIn('set(CONAN_COMPILE_DEFINITIONS_MYPKG "MYDEFINE1")', cmake_lines)
        self.assertIn('set(CONAN_COMPILE_DEFINITIONS_MYPKG2 "MYDEFINE2")', cmake_lines)

        self.assertIn('set(CONAN_USER_LIB1_myvar "myvalue")', cmake_lines)
        self.assertIn('set(CONAN_USER_LIB1_myvar2 "myvalue2")', cmake_lines)
        self.assertIn('set(CONAN_USER_LIB2_MYVAR2 "myvalue4")', cmake_lines)
Ejemplo n.º 25
0
 def test_detect_file_profile(self, _):
     output = TestBufferConanOutput()
     with tools.environment_append({"CC": "gcc"}):
         detect_defaults_settings(output, profile_path="./MyProfile")
         self.assertIn(
             "conan profile update settings.compiler.libcxx=libstdc++11 MyProfile",
             output)
Ejemplo n.º 26
0
class VCVarsClangClTest(unittest.TestCase):
    output = TestBufferConanOutput()

    def test_simple(self):
        settings = Settings.loads(get_default_settings_yml())
        settings.compiler = 'clang'
        settings.compiler.version = '5.0'
        settings.arch = 'x86'
        settings.os = 'Windows'

        command = vcvars_command(settings, output=self.output)
        self.assertIn('vcvarsall.bat', command)
        self.assertIn('x86', command)

    def test_no_version(self):
        settings = Settings.loads(get_default_settings_yml())
        settings.compiler = 'clang'
        settings.arch = 'x86_64'
        settings.os = 'Windows'

        command = vcvars_command(settings, output=self.output)
        self.assertIn('vcvarsall.bat', command)
        self.assertIn('amd64', command)

    def test_no_msvc(self):
        settings = Settings.loads(get_default_settings_yml())
        settings.compiler = 'clang'
        settings.arch = 'x86_64'
        settings.os = 'Windows'

        with mock.patch('conans.client.tools.win.latest_vs_version_installed',
                        mock.MagicMock(return_value=None)):
            with self.assertRaises(ConanException):
                vcvars_command(settings, output=self.output)
Ejemplo n.º 27
0
    def test_in_cache_no_local_sources(self):
        """In cache, if we DON'T have cached scm sources in the scm_sources, it will clone"""
        output = TestBufferConanOutput()

        # Mock the conanfile (return scm_data)
        subfolder = 'subfolder'
        url = 'whatever'
        conanfile = mock.MagicMock()
        conanfile.scm = {
            'type': 'git',
            'url': url,
            'revision': 'auto',
            'subfolder': subfolder
        }
        conanfile.folders.base_source = self.src_folder

        # Mock functions called from inside _run_scm (tests will be here)
        def clean_source_folder(folder):
            self.assertEqual(folder, os.path.join(self.src_folder, subfolder))

        def scm_checkout(scm_itself):
            self.assertEqual(scm_itself.repo_folder,
                             os.path.join(self.src_folder, subfolder))

        with mock.patch("conans.client.source._clean_source_folder",
                        side_effect=clean_source_folder):
            with mock.patch.object(SCM, "checkout", new=scm_checkout):
                _run_cache_scm(conanfile,
                               scm_sources_folder="/not/existing/path",
                               output=output)

        self.assertIn("SCM: Getting sources from url: '{}'".format(url),
                      output)
Ejemplo n.º 28
0
class ParseSCMFromConanDataTestCase(unittest.TestCase):
    loader = ConanFileLoader(runner=None,
                             output=TestBufferConanOutput(),
                             python_requires=ConanPythonRequire(None, None))

    def test_parse_data(self):
        conanfile = textwrap.dedent("""
            import os
            from conans import ConanFile

            class Recipe(ConanFile):
                scm = {"type": "git", "url": "auto", "revision": "auto"}
        """)
        conan_data = {
            'something_else': {},
            '.conan': {
                'scm': {
                    'type': 'git',
                    'url': 'http://myrepo.com',
                    'shallow': False,
                    'revision': 'abcdefghijk'
                }
            }
        }
        test_folder = tempfile.mkdtemp()
        save_files(
            test_folder, {
                'conanfile.py': conanfile,
                DATA_YML: yaml.safe_dump(conan_data, default_flow_style=False)
            })

        conanfile_path = os.path.join(test_folder, 'conanfile.py')
        conanfile, _ = self.loader.load_basic_module(
            conanfile_path=conanfile_path)
        self.assertDictEqual(conanfile.scm, conan_data['.conan']['scm'])
Ejemplo n.º 29
0
 def run_command(self, command, cwd=None, assert_error=False):
     output = TestBufferConanOutput()
     self.out = output
     runner = ConanRunner(output=output)
     ret = runner(command, cwd=cwd or self.current_folder)
     self._handle_cli_result(command, assert_error=assert_error, error=ret)
     return ret
Ejemplo n.º 30
0
 def test_replace_in_file(self):
     tmp_dir = temp_folder()
     text_file = os.path.join(tmp_dir, "text.txt")
     save(text_file, "ONE TWO THREE")
     replace_in_file(text_file, "ONE TWO THREE", "FOUR FIVE SIX",
                     output=TestBufferConanOutput())
     self.assertEqual(load(text_file), "FOUR FIVE SIX")