예제 #1
0
    def test_get_build_base_for_defined_type_base(self):
        snapcraft_yaml_file_path = self.make_snapcraft_yaml(
            dedent(
                """\
            name: core20
            type: base
        """
            )
        )

        info = ProjectInfo(snapcraft_yaml_file_path=snapcraft_yaml_file_path)

        self.assertThat(info.get_build_base(), Equals("core20"))
예제 #2
0
    def test_get_build_base_build_base_overrides(self):
        snapcraft_yaml_file_path = self.make_snapcraft_yaml(
            dedent(
                """\
            name: core20
            type: base
            build-base: core
        """
            )
        )

        info = ProjectInfo(snapcraft_yaml_file_path=snapcraft_yaml_file_path)

        self.assertThat(info.get_build_base(), Equals("core"))
예제 #3
0
    def test_get_raw_dict_is_a_copy(self):
        snapcraft_yaml_file_path = self.make_snapcraft_yaml(
            dedent("""\
            name: foo
            version: "1"
            summary: bar
            description: baz
            confinement: strict
        """))

        info = ProjectInfo(snapcraft_yaml_file_path=snapcraft_yaml_file_path)
        raw_snapcraft = info.get_raw_snapcraft()
        raw_snapcraft.pop("name")
        self.assertThat(raw_snapcraft.get("name"), Is(None))

        raw_snapcraft = info.get_raw_snapcraft()
        self.assertThat(raw_snapcraft.get("name"), Equals("foo"))
예제 #4
0
    def test_get_raw_dict(self):
        snapcraft_yaml_file_path = self.make_snapcraft_yaml(
            dedent("""\
            name: foo
            version: "1"
            summary: bar
            description: baz
            confinement: strict
        """))

        info = ProjectInfo(snapcraft_yaml_file_path=snapcraft_yaml_file_path)
        raw_snapcraft = info.get_raw_snapcraft()

        self.assertThat(raw_snapcraft["name"], Equals("foo"))
        self.assertThat(raw_snapcraft["version"], Equals("1"))
        self.assertThat(raw_snapcraft["summary"], Equals("bar"))
        self.assertThat(raw_snapcraft["description"], Equals("baz"))
        self.assertThat(raw_snapcraft["confinement"], Equals("strict"))
예제 #5
0
    def test_get_raw_dict_is_a_copy(self):
        snapcraft_yaml_file_path = self.make_snapcraft_yaml(
            dedent(
                """\
            name: foo
            version: "1"
            summary: bar
            description: baz
            confinement: strict
        """
            )
        )

        info = ProjectInfo(snapcraft_yaml_file_path=snapcraft_yaml_file_path)
        raw_snapcraft = info.get_raw_snapcraft()
        raw_snapcraft.pop("name")
        self.assertThat(raw_snapcraft.get("name"), Is(None))

        raw_snapcraft = info.get_raw_snapcraft()
        self.assertThat(raw_snapcraft.get("name"), Equals("foo"))
예제 #6
0
    def test_minimal_load_with_name_only(self):
        snapcraft_yaml_file_path = self.make_snapcraft_yaml(
            dedent("""\
            name: foo
        """))

        info = ProjectInfo(snapcraft_yaml_file_path=snapcraft_yaml_file_path)
        self.assertThat(info.name, Equals("foo"))
        self.assertThat(info.version, Is(None))
        self.assertThat(info.summary, Is(None))
        self.assertThat(info.description, Is(None))
        self.assertThat(info.confinement, Is(None))
예제 #7
0
    def test_get_raw_dict(self):
        snapcraft_yaml_file_path = self.make_snapcraft_yaml(
            dedent(
                """\
            name: foo
            version: "1"
            summary: bar
            description: baz
            confinement: strict
        """
            )
        )

        info = ProjectInfo(snapcraft_yaml_file_path=snapcraft_yaml_file_path)
        raw_snapcraft = info.get_raw_snapcraft()

        self.assertThat(raw_snapcraft["name"], Equals("foo"))
        self.assertThat(raw_snapcraft["version"], Equals("1"))
        self.assertThat(raw_snapcraft["summary"], Equals("bar"))
        self.assertThat(raw_snapcraft["description"], Equals("baz"))
        self.assertThat(raw_snapcraft["confinement"], Equals("strict"))
예제 #8
0
    def setUp(self):
        super().setUp()

        self.instance_name = 'ridicoulus-hours'
        patcher = mock.patch('petname.Generate',
                             return_value=self.instance_name)
        patcher.start()
        self.addCleanup(patcher.stop)

        self.project = Project()
        self.project.info = ProjectInfo(dict(name='project-name'))

        self.echoer_mock = mock.Mock()
예제 #9
0
    def test_properties(self):
        snapcraft_yaml_file_path = self.make_snapcraft_yaml(
            dedent("""\
            name: foo
            version: "1"
            summary: bar
            description: baz
            confinement: strict
        """))

        info = ProjectInfo(snapcraft_yaml_file_path=snapcraft_yaml_file_path)
        self.assertThat(info.name, Equals("foo"))
        self.assertThat(info.version, Equals("1"))
        self.assertThat(info.summary, Equals("bar"))
        self.assertThat(info.description, Equals("baz"))
        self.assertThat(info.confinement, Equals("strict"))
예제 #10
0
    def test_config_loads_with_different_encodings_loads(self):
        snapcraft_yaml = dedent("""\
            name: test
            version: "1"
            summary: test
            description: ñoño test
            confinement: strict
            grade: stable

            parts:
              part1:
                plugin: go
                stage-packages: [fswebcam]
        """)

        snapcraft_yaml_file_path = self.make_snapcraft_yaml(
            snapcraft_yaml, encoding=self.encoding)
        ProjectInfo(snapcraft_yaml_file_path=snapcraft_yaml_file_path)
예제 #11
0
def test_different_encodings_loads(tmp_work_path, encoding):
    snapcraft_yaml = dedent("""\
        name: test
        version: "1"
        summary: test
        description: ñoño test
        confinement: strict
        grade: stable

        parts:
          part1:
            plugin: go
            stage-packages: [fswebcam]
    """)

    snapcraft_yaml_path = tmp_work_path / "snapcraft.yaml"
    with snapcraft_yaml_path.open("w", encoding=encoding) as snapcraft_file:
        print(snapcraft_yaml, file=snapcraft_file)

    ProjectInfo(snapcraft_yaml_file_path=snapcraft_yaml_path.as_posix())
예제 #12
0
    def __init__(self, project_options: project.Project = None) -> None:
        if project_options is None:
            project_options = project.Project()

        self.build_snaps = set()  # type: Set[str]
        self._project_options = project_options

        self.snapcraft_yaml_path = get_snapcraft_yaml()
        snapcraft_yaml = _snapcraft_yaml_load(self.snapcraft_yaml_path)

        self._validator = Validator(snapcraft_yaml)
        self._validator.validate()

        snapcraft_yaml = self._process_remote_parts(snapcraft_yaml)
        snapcraft_yaml = self._expand_filesets(snapcraft_yaml)

        # both confinement type and build quality are optionals
        _ensure_confinement_default(snapcraft_yaml, self._validator.schema)
        _ensure_grade_default(snapcraft_yaml, self._validator.schema)

        self.data = self._expand_env(snapcraft_yaml)
        # We need to set the ProjectInfo here because ProjectOptions is
        # created in the CLI.
        self._project_options.info = ProjectInfo(self.data)
        self._ensure_no_duplicate_app_aliases()

        grammar_processor = grammar_processing.GlobalGrammarProcessor(
            properties=self.data, project_options=project_options)

        self.build_tools = grammar_processor.get_build_packages()
        self.build_tools |= set(project_options.additional_build_packages)

        self.parts = PartsConfig(parts=self.data,
                                 project_options=self._project_options,
                                 validator=self._validator,
                                 build_snaps=self.build_snaps,
                                 build_tools=self.build_tools,
                                 snapcraft_yaml=self.snapcraft_yaml_path)

        if 'architectures' not in self.data:
            self.data['architectures'] = [self._project_options.deb_arch]
예제 #13
0
    def __init__(self, project_options: project.Project = None) -> None:
        if project_options is None:
            project_options = project.Project()

        self.build_snaps = set()  # type: Set[str]
        self._project_options = project_options

        self.snapcraft_yaml_path = get_snapcraft_yaml()
        snapcraft_yaml = _snapcraft_yaml_load(self.snapcraft_yaml_path)
        self.original_snapcraft_yaml = snapcraft_yaml.copy()

        self.validator = Validator(snapcraft_yaml)
        self.validator.validate()

        snapcraft_yaml = self._process_remote_parts(snapcraft_yaml)
        snapcraft_yaml = self._expand_filesets(snapcraft_yaml)

        # We need to set the ProjectInfo here because ProjectOptions is
        # created in the CLI.
        self._project_options.info = ProjectInfo(snapcraft_yaml)
        self.data = self._expand_env(snapcraft_yaml)
        self._ensure_no_duplicate_app_aliases()

        grammar_processor = grammar_processing.GlobalGrammarProcessor(
            properties=self.data, project=project_options)

        self.build_tools = grammar_processor.get_build_packages()
        self.build_tools |= set(project_options.additional_build_packages)

        self.parts = PartsConfig(parts=self.data,
                                 project_options=self._project_options,
                                 validator=self.validator,
                                 build_snaps=self.build_snaps,
                                 build_tools=self.build_tools,
                                 snapcraft_yaml=self.snapcraft_yaml_path)

        self.data['architectures'] = _process_architectures(
            self.data.get('architectures'), self._project_options.deb_arch)