2019-05-03 21:03:36 +03:00
|
|
|
# Copyright (c) 2014-present PlatformIO <contact@platformio.org>
|
|
|
|
#
|
|
|
|
# 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.
|
|
|
|
|
2019-05-04 12:23:23 +03:00
|
|
|
import os
|
2019-05-07 17:51:50 +03:00
|
|
|
|
2019-05-30 16:38:04 +03:00
|
|
|
import pytest
|
|
|
|
|
2019-06-01 15:38:55 +03:00
|
|
|
from platformio.exception import UnknownEnvNames
|
2019-05-30 16:38:04 +03:00
|
|
|
from platformio.project.config import ConfigParser, ProjectConfig
|
2019-05-03 21:03:36 +03:00
|
|
|
|
|
|
|
BASE_CONFIG = """
|
|
|
|
[platformio]
|
2019-05-08 20:19:39 +03:00
|
|
|
env_default = base, extra_2
|
2019-05-03 21:03:36 +03:00
|
|
|
extra_configs =
|
|
|
|
extra_envs.ini
|
|
|
|
extra_debug.ini
|
|
|
|
|
2019-05-08 20:19:39 +03:00
|
|
|
# global options per [env:*]
|
|
|
|
[env]
|
|
|
|
monitor_speed = 115200
|
2019-05-30 16:38:04 +03:00
|
|
|
lib_deps =
|
|
|
|
Lib1
|
|
|
|
Lib2
|
2019-05-08 20:19:39 +03:00
|
|
|
lib_ignore = ${custom.lib_ignore}
|
|
|
|
|
2019-08-31 23:39:41 +03:00
|
|
|
[strict_ldf]
|
|
|
|
lib_ldf_mode = chain+
|
|
|
|
lib_compat_mode = strict
|
|
|
|
|
|
|
|
[monitor_custom]
|
|
|
|
monitor_speed = 9600
|
|
|
|
|
|
|
|
[strict_settings]
|
|
|
|
extends = strict_ldf, monitor_custom
|
|
|
|
build_flags = -D RELEASE
|
|
|
|
|
2019-05-08 20:19:39 +03:00
|
|
|
[custom]
|
2019-05-03 21:03:36 +03:00
|
|
|
debug_flags = -D RELEASE
|
|
|
|
lib_flags = -lc -lm
|
2019-05-04 12:23:23 +03:00
|
|
|
extra_flags = ${sysenv.__PIO_TEST_CNF_EXTRA_FLAGS}
|
2019-05-08 20:19:39 +03:00
|
|
|
lib_ignore = LibIgnoreCustom
|
2019-05-03 21:03:36 +03:00
|
|
|
|
2019-05-08 20:19:39 +03:00
|
|
|
[env:base]
|
|
|
|
build_flags = ${custom.debug_flags} ${custom.extra_flags}
|
2019-07-02 12:21:06 +03:00
|
|
|
targets =
|
2019-08-31 23:39:41 +03:00
|
|
|
|
|
|
|
[env:test_extends]
|
|
|
|
extends = strict_settings
|
|
|
|
|
2019-05-03 21:03:36 +03:00
|
|
|
"""
|
|
|
|
|
|
|
|
EXTRA_ENVS_CONFIG = """
|
2019-05-08 20:19:39 +03:00
|
|
|
[env:extra_1]
|
|
|
|
build_flags = ${custom.lib_flags} ${custom.debug_flags}
|
2019-06-01 15:38:55 +03:00
|
|
|
lib_install = 574
|
2019-05-08 20:19:39 +03:00
|
|
|
|
|
|
|
[env:extra_2]
|
|
|
|
build_flags = ${custom.debug_flags} ${custom.extra_flags}
|
|
|
|
lib_ignore = ${env.lib_ignore}, Lib3
|
2019-05-30 16:38:04 +03:00
|
|
|
upload_port = /dev/extra_2/port
|
2019-05-03 21:03:36 +03:00
|
|
|
"""
|
|
|
|
|
|
|
|
EXTRA_DEBUG_CONFIG = """
|
2019-05-08 20:19:39 +03:00
|
|
|
# Override original "custom.debug_flags"
|
|
|
|
[custom]
|
2019-05-03 21:03:36 +03:00
|
|
|
debug_flags = -D DEBUG=1
|
|
|
|
|
2019-05-08 20:19:39 +03:00
|
|
|
[env:extra_2]
|
2019-05-03 21:03:36 +03:00
|
|
|
build_flags = -Og
|
|
|
|
"""
|
|
|
|
|
|
|
|
|
2019-08-31 23:39:41 +03:00
|
|
|
@pytest.fixture(scope="module")
|
|
|
|
def config(tmpdir_factory):
|
|
|
|
tmpdir = tmpdir_factory.mktemp("project")
|
2019-05-03 21:03:36 +03:00
|
|
|
tmpdir.join("platformio.ini").write(BASE_CONFIG)
|
|
|
|
tmpdir.join("extra_envs.ini").write(EXTRA_ENVS_CONFIG)
|
|
|
|
tmpdir.join("extra_debug.ini").write(EXTRA_DEBUG_CONFIG)
|
|
|
|
with tmpdir.as_cwd():
|
2019-08-31 23:39:41 +03:00
|
|
|
return ProjectConfig(tmpdir.join("platformio.ini").strpath)
|
|
|
|
|
|
|
|
|
|
|
|
def test_empty_config():
|
|
|
|
config = ProjectConfig("/non/existing/platformio.ini")
|
|
|
|
|
|
|
|
# unknown section
|
|
|
|
with pytest.raises(ConfigParser.NoSectionError):
|
|
|
|
config.getraw("unknown_section", "unknown_option")
|
|
|
|
|
|
|
|
assert config.sections() == []
|
|
|
|
assert config.get("section", "option") is None
|
|
|
|
assert config.get("section", "option", 13) == 13
|
|
|
|
|
|
|
|
|
|
|
|
def test_warnings(config):
|
|
|
|
config.validate(["extra_2", "base"], silent=True)
|
2019-06-01 22:43:44 +03:00
|
|
|
assert len(config.warnings) == 2
|
|
|
|
assert "lib_install" in config.warnings[1]
|
2019-05-03 21:03:36 +03:00
|
|
|
|
2019-06-01 15:38:55 +03:00
|
|
|
with pytest.raises(UnknownEnvNames):
|
|
|
|
config.validate(["non-existing-env"])
|
|
|
|
|
2019-08-31 23:39:41 +03:00
|
|
|
|
2019-09-27 14:13:53 +03:00
|
|
|
def test_defaults(config):
|
|
|
|
assert config.get_optional_dir("core") == os.path.join(
|
|
|
|
os.path.expanduser("~"), ".platformio"
|
|
|
|
)
|
|
|
|
assert config.get_optional_dir("build_cache") == os.environ.get(
|
|
|
|
"PLATFORMIO_BUILD_CACHE_DIR"
|
|
|
|
)
|
|
|
|
|
|
|
|
|
2019-08-31 23:39:41 +03:00
|
|
|
def test_sections(config):
|
2019-05-30 16:38:04 +03:00
|
|
|
with pytest.raises(ConfigParser.NoSectionError):
|
|
|
|
config.getraw("unknown_section", "unknown_option")
|
|
|
|
|
2019-05-03 21:03:36 +03:00
|
|
|
assert config.sections() == [
|
2019-09-23 23:13:48 +03:00
|
|
|
"platformio",
|
|
|
|
"env",
|
|
|
|
"strict_ldf",
|
|
|
|
"monitor_custom",
|
|
|
|
"strict_settings",
|
|
|
|
"custom",
|
|
|
|
"env:base",
|
|
|
|
"env:test_extends",
|
|
|
|
"env:extra_1",
|
|
|
|
"env:extra_2",
|
2019-05-03 21:03:36 +03:00
|
|
|
]
|
2019-05-04 12:23:23 +03:00
|
|
|
|
2019-08-31 23:39:41 +03:00
|
|
|
|
|
|
|
def test_envs(config):
|
|
|
|
assert config.envs() == ["base", "test_extends", "extra_1", "extra_2"]
|
2019-05-08 20:19:39 +03:00
|
|
|
assert config.default_envs() == ["base", "extra_2"]
|
|
|
|
|
2019-08-31 23:39:41 +03:00
|
|
|
|
|
|
|
def test_options(config):
|
2019-05-08 20:19:39 +03:00
|
|
|
assert config.options(env="base") == [
|
2019-09-23 23:13:48 +03:00
|
|
|
"build_flags",
|
|
|
|
"targets",
|
|
|
|
"monitor_speed",
|
|
|
|
"lib_deps",
|
|
|
|
"lib_ignore",
|
2019-05-08 20:19:39 +03:00
|
|
|
]
|
2019-08-31 23:39:41 +03:00
|
|
|
assert config.options(env="test_extends") == [
|
2019-09-23 23:13:48 +03:00
|
|
|
"extends",
|
|
|
|
"build_flags",
|
|
|
|
"lib_ldf_mode",
|
|
|
|
"lib_compat_mode",
|
|
|
|
"monitor_speed",
|
|
|
|
"lib_deps",
|
|
|
|
"lib_ignore",
|
2019-08-31 23:39:41 +03:00
|
|
|
]
|
2019-05-08 20:19:39 +03:00
|
|
|
|
2019-08-31 23:39:41 +03:00
|
|
|
|
|
|
|
def test_has_option(config):
|
2019-05-08 20:19:39 +03:00
|
|
|
assert config.has_option("env:base", "monitor_speed")
|
|
|
|
assert not config.has_option("custom", "monitor_speed")
|
2019-06-01 15:38:55 +03:00
|
|
|
assert not config.has_option("env:extra_1", "lib_install")
|
2019-08-31 23:39:41 +03:00
|
|
|
assert config.has_option("env:test_extends", "lib_compat_mode")
|
2019-05-08 20:19:39 +03:00
|
|
|
|
2019-08-31 23:39:41 +03:00
|
|
|
|
|
|
|
def test_sysenv_options(config):
|
2019-05-30 17:34:44 +03:00
|
|
|
assert config.get("custom", "extra_flags") is None
|
2019-05-30 16:38:04 +03:00
|
|
|
assert config.get("env:base", "build_flags") == ["-D DEBUG=1"]
|
|
|
|
assert config.get("env:base", "upload_port") is None
|
|
|
|
assert config.get("env:extra_2", "upload_port") == "/dev/extra_2/port"
|
|
|
|
os.environ["PLATFORMIO_BUILD_FLAGS"] = "-DSYSENVDEPS1 -DSYSENVDEPS2"
|
|
|
|
os.environ["PLATFORMIO_UPLOAD_PORT"] = "/dev/sysenv/port"
|
2019-05-04 12:23:23 +03:00
|
|
|
os.environ["__PIO_TEST_CNF_EXTRA_FLAGS"] = "-L /usr/local/lib"
|
2019-05-08 20:19:39 +03:00
|
|
|
assert config.get("custom", "extra_flags") == "-L /usr/local/lib"
|
2019-05-30 16:38:04 +03:00
|
|
|
assert config.get("env:base", "build_flags") == [
|
2019-09-23 23:13:48 +03:00
|
|
|
"-D DEBUG=1 -L /usr/local/lib",
|
|
|
|
"-DSYSENVDEPS1 -DSYSENVDEPS2",
|
2019-05-30 16:38:04 +03:00
|
|
|
]
|
|
|
|
assert config.get("env:base", "upload_port") == "/dev/sysenv/port"
|
|
|
|
assert config.get("env:extra_2", "upload_port") == "/dev/extra_2/port"
|
|
|
|
|
2019-08-31 23:39:41 +03:00
|
|
|
# env var as option
|
|
|
|
assert config.options(env="test_extends") == [
|
2019-09-23 23:13:48 +03:00
|
|
|
"extends",
|
|
|
|
"build_flags",
|
|
|
|
"lib_ldf_mode",
|
|
|
|
"lib_compat_mode",
|
|
|
|
"monitor_speed",
|
|
|
|
"lib_deps",
|
|
|
|
"lib_ignore",
|
|
|
|
"upload_port",
|
2019-08-31 23:39:41 +03:00
|
|
|
]
|
|
|
|
|
|
|
|
# sysenv
|
|
|
|
os.environ["PLATFORMIO_HOME_DIR"] = "/custom/core/dir"
|
|
|
|
assert config.get("platformio", "core_dir") == "/custom/core/dir"
|
|
|
|
|
|
|
|
# cleanup system environment variables
|
|
|
|
del os.environ["PLATFORMIO_BUILD_FLAGS"]
|
|
|
|
del os.environ["PLATFORMIO_UPLOAD_PORT"]
|
|
|
|
del os.environ["__PIO_TEST_CNF_EXTRA_FLAGS"]
|
|
|
|
del os.environ["PLATFORMIO_HOME_DIR"]
|
|
|
|
|
|
|
|
|
|
|
|
def test_getraw_value(config):
|
|
|
|
# unknown option
|
|
|
|
with pytest.raises(ConfigParser.NoOptionError):
|
|
|
|
config.getraw("custom", "unknown_option")
|
|
|
|
# unknown option even if exists in [env]
|
|
|
|
with pytest.raises(ConfigParser.NoOptionError):
|
|
|
|
config.getraw("platformio", "monitor_speed")
|
|
|
|
|
|
|
|
# known
|
2019-07-02 12:21:06 +03:00
|
|
|
assert config.getraw("env:base", "targets") == ""
|
2019-06-01 15:38:55 +03:00
|
|
|
assert config.getraw("env:extra_1", "lib_deps") == "574"
|
2019-05-30 16:38:04 +03:00
|
|
|
assert config.getraw("env:extra_1", "build_flags") == "-lc -lm -D DEBUG=1"
|
2019-05-04 12:23:23 +03:00
|
|
|
|
2019-08-31 23:39:41 +03:00
|
|
|
# extended
|
|
|
|
assert config.getraw("env:test_extends", "lib_ldf_mode") == "chain+"
|
|
|
|
assert config.getraw("env", "monitor_speed") == "115200"
|
|
|
|
assert config.getraw("env:test_extends", "monitor_speed") == "9600"
|
|
|
|
|
|
|
|
|
|
|
|
def test_get_value(config):
|
2019-05-08 20:19:39 +03:00
|
|
|
assert config.get("custom", "debug_flags") == "-D DEBUG=1"
|
2019-08-31 23:39:41 +03:00
|
|
|
assert config.get("env:extra_1", "build_flags") == ["-lc -lm -D DEBUG=1"]
|
|
|
|
assert config.get("env:extra_2", "build_flags") == ["-Og"]
|
2019-05-08 20:19:39 +03:00
|
|
|
assert config.get("env:extra_2", "monitor_speed") == "115200"
|
2019-08-31 23:39:41 +03:00
|
|
|
assert config.get("env:base", "build_flags") == ["-D DEBUG=1"]
|
|
|
|
|
2019-05-04 12:23:23 +03:00
|
|
|
|
2019-08-31 23:39:41 +03:00
|
|
|
def test_items(config):
|
2019-05-30 16:38:04 +03:00
|
|
|
assert config.items("custom") == [
|
|
|
|
("debug_flags", "-D DEBUG=1"),
|
|
|
|
("lib_flags", "-lc -lm"),
|
2019-08-31 23:39:41 +03:00
|
|
|
("extra_flags", None),
|
2019-09-23 23:13:48 +03:00
|
|
|
("lib_ignore", "LibIgnoreCustom"),
|
2019-10-30 19:09:32 +02:00
|
|
|
]
|
2019-07-02 12:21:06 +03:00
|
|
|
assert config.items(env="base") == [
|
2019-08-31 23:39:41 +03:00
|
|
|
("build_flags", ["-D DEBUG=1"]),
|
2019-07-02 12:21:06 +03:00
|
|
|
("targets", []),
|
|
|
|
("monitor_speed", "115200"),
|
|
|
|
("lib_deps", ["Lib1", "Lib2"]),
|
|
|
|
("lib_ignore", ["LibIgnoreCustom"]),
|
2019-10-30 19:09:32 +02:00
|
|
|
]
|
2019-05-30 16:38:04 +03:00
|
|
|
assert config.items(env="extra_1") == [
|
2019-08-31 23:39:41 +03:00
|
|
|
("build_flags", ["-lc -lm -D DEBUG=1"]),
|
2019-06-01 15:38:55 +03:00
|
|
|
("lib_deps", ["574"]),
|
2019-05-30 16:38:04 +03:00
|
|
|
("monitor_speed", "115200"),
|
|
|
|
("lib_ignore", ["LibIgnoreCustom"]),
|
2019-10-30 19:09:32 +02:00
|
|
|
]
|
2019-05-30 16:38:04 +03:00
|
|
|
assert config.items(env="extra_2") == [
|
2019-08-31 23:39:41 +03:00
|
|
|
("build_flags", ["-Og"]),
|
2019-05-30 16:38:04 +03:00
|
|
|
("lib_ignore", ["LibIgnoreCustom", "Lib3"]),
|
|
|
|
("upload_port", "/dev/extra_2/port"),
|
|
|
|
("monitor_speed", "115200"),
|
2019-09-23 23:13:48 +03:00
|
|
|
("lib_deps", ["Lib1", "Lib2"]),
|
2019-10-30 19:09:32 +02:00
|
|
|
]
|
2019-08-31 23:39:41 +03:00
|
|
|
assert config.items(env="test_extends") == [
|
|
|
|
("extends", ["strict_settings"]),
|
|
|
|
("build_flags", ["-D RELEASE"]),
|
|
|
|
("lib_ldf_mode", "chain+"),
|
|
|
|
("lib_compat_mode", "strict"),
|
|
|
|
("monitor_speed", "9600"),
|
|
|
|
("lib_deps", ["Lib1", "Lib2"]),
|
2019-09-23 23:13:48 +03:00
|
|
|
("lib_ignore", ["LibIgnoreCustom"]),
|
2019-10-30 19:09:32 +02:00
|
|
|
]
|
|
|
|
|
|
|
|
|
|
|
|
def test_as_tuple(config):
|
|
|
|
assert config.as_tuple() == [
|
|
|
|
(
|
|
|
|
"platformio",
|
|
|
|
[
|
|
|
|
("extra_configs", ["extra_envs.ini", "extra_debug.ini"]),
|
|
|
|
("default_envs", ["base", "extra_2"]),
|
|
|
|
("workspace_dir", "/tmp/pio-workspaces/$PROJECT_HASH"),
|
|
|
|
],
|
|
|
|
),
|
|
|
|
(
|
|
|
|
"env",
|
|
|
|
[
|
|
|
|
("monitor_speed", "115200"),
|
|
|
|
("lib_deps", ["Lib1", "Lib2"]),
|
|
|
|
("lib_ignore", ["LibIgnoreCustom"]),
|
|
|
|
],
|
|
|
|
),
|
|
|
|
("strict_ldf", [("lib_ldf_mode", "chain+"), ("lib_compat_mode", "strict")]),
|
|
|
|
("monitor_custom", [("monitor_speed", "9600")]),
|
|
|
|
(
|
|
|
|
"strict_settings",
|
|
|
|
[
|
|
|
|
("extends", "strict_ldf, monitor_custom"),
|
|
|
|
("build_flags", "-D RELEASE"),
|
|
|
|
("lib_ldf_mode", "chain+"),
|
|
|
|
("lib_compat_mode", "strict"),
|
|
|
|
("monitor_speed", "9600"),
|
|
|
|
],
|
|
|
|
),
|
|
|
|
(
|
|
|
|
"custom",
|
|
|
|
[
|
|
|
|
("debug_flags", "-D DEBUG=1"),
|
|
|
|
("lib_flags", "-lc -lm"),
|
|
|
|
("extra_flags", None),
|
|
|
|
("lib_ignore", "LibIgnoreCustom"),
|
|
|
|
],
|
|
|
|
),
|
|
|
|
(
|
|
|
|
"env:base",
|
|
|
|
[
|
|
|
|
("build_flags", ["-D DEBUG=1"]),
|
|
|
|
("targets", []),
|
|
|
|
("monitor_speed", "115200"),
|
|
|
|
("lib_deps", ["Lib1", "Lib2"]),
|
|
|
|
("lib_ignore", ["LibIgnoreCustom"]),
|
|
|
|
],
|
|
|
|
),
|
|
|
|
(
|
|
|
|
"env:test_extends",
|
|
|
|
[
|
|
|
|
("extends", ["strict_settings"]),
|
|
|
|
("build_flags", ["-D RELEASE"]),
|
|
|
|
("lib_ldf_mode", "chain+"),
|
|
|
|
("lib_compat_mode", "strict"),
|
|
|
|
("monitor_speed", "9600"),
|
|
|
|
("lib_deps", ["Lib1", "Lib2"]),
|
|
|
|
("lib_ignore", ["LibIgnoreCustom"]),
|
|
|
|
],
|
|
|
|
),
|
|
|
|
(
|
|
|
|
"env:extra_1",
|
|
|
|
[
|
|
|
|
("build_flags", ["-lc -lm -D DEBUG=1"]),
|
|
|
|
("lib_deps", ["574"]),
|
|
|
|
("monitor_speed", "115200"),
|
|
|
|
("lib_ignore", ["LibIgnoreCustom"]),
|
|
|
|
],
|
|
|
|
),
|
|
|
|
(
|
|
|
|
"env:extra_2",
|
|
|
|
[
|
|
|
|
("build_flags", ["-Og"]),
|
|
|
|
("lib_ignore", ["LibIgnoreCustom", "Lib3"]),
|
|
|
|
("upload_port", "/dev/extra_2/port"),
|
|
|
|
("monitor_speed", "115200"),
|
|
|
|
("lib_deps", ["Lib1", "Lib2"]),
|
|
|
|
],
|
|
|
|
),
|
|
|
|
]
|