bst fmt: Add tests for core functionality
diff --git a/tests/completions/completions.py b/tests/completions/completions.py
index 372ed78..303bc94 100644
--- a/tests/completions/completions.py
+++ b/tests/completions/completions.py
@@ -9,6 +9,7 @@
'artifact ',
'build ',
'checkout ',
+ 'fmt ',
'help ',
'init ',
'pull ',
diff --git a/tests/integration/fmt.py b/tests/integration/fmt.py
new file mode 100644
index 0000000..4580d5e
--- /dev/null
+++ b/tests/integration/fmt.py
@@ -0,0 +1,75 @@
+import os
+import pytest
+
+from tests.testutils import cli_integration as cli
+from tests.testutils.site import IS_LINUX
+
+
+DATA_DIR = os.path.join(
+ os.path.dirname(os.path.realpath(__file__)),
+ "project"
+)
+
+
+@pytest.mark.integration
+@pytest.mark.datafiles(DATA_DIR)
+def test_fmt_single(cli, tmpdir, datafiles):
+ project = os.path.join(datafiles.dirname, datafiles.basename)
+ element_name = 'fmt/bad-format.bst'
+ good_element = 'fmt/good-format.bst'
+
+ with open(os.path.join(project, 'elements', good_element)) as element:
+ good = element.readlines()
+
+ res = cli.run(project=project, args=['fmt', element_name])
+ assert res.exit_code == 0
+
+ with open(os.path.join(project, 'elements', element_name)) as element:
+ final = element.readlines()
+
+ # Have to test only the last line, rather than full file because of #767
+ assert final[-1] == good[-1]
+
+
+@pytest.mark.integration
+@pytest.mark.datafiles(DATA_DIR)
+def test_fmt_all(cli, tmpdir, datafiles):
+ project = os.path.join(datafiles.dirname, datafiles.basename)
+ check_elements = ['fmt/bad-format.bst', 'fmt/except.bst']
+ target = 'fmt/stack.bst'
+
+ initial_lines = []
+ for e in check_elements:
+ with open(os.path.join(project, 'elements', e)) as element:
+ initial_lines.append(element.readlines()[-1])
+
+ with open(os.path.join(project, 'elements', 'fmt/good-format.bst')) as element:
+ expected = element.readlines()[-1]
+
+ res = cli.run(project=project, args=['fmt', '--all', target])
+ assert res.exit_code == 0
+
+ for i, _ in enumerate(initial_lines):
+ with open(os.path.join(project, 'elements', check_elements[i])) as element:
+ assert element.readlines()[-1] == expected
+
+
+@pytest.mark.integration
+@pytest.mark.datafiles(DATA_DIR)
+def test_fmt_except(cli, tmpdir, datafiles):
+ project = os.path.join(datafiles.dirname, datafiles.basename)
+ bad_target = 'fmt/bad-format.bst'
+ except_target = 'fmt/except.bst'
+ target = 'fmt/stack.bst'
+
+ with open(os.path.join(project, 'elements', 'fmt/good-format.bst')) as element:
+ formatted = element.readlines()[-1]
+
+ res = cli.run(project=project, args=['fmt', '--all', target, '--except', except_target])
+ assert res.exit_code == 0
+
+ with open(os.path.join(project, 'elements', except_target)) as element:
+ assert formatted != element.readlines()[-1]
+
+ with open(os.path.join(project, 'elements', bad_target)) as element:
+ assert formatted == element.readlines()[-1]
diff --git a/tests/integration/project/elements/fmt/bad-format.bst b/tests/integration/project/elements/fmt/bad-format.bst
new file mode 100644
index 0000000..bbecc3a
--- /dev/null
+++ b/tests/integration/project/elements/fmt/bad-format.bst
@@ -0,0 +1,4 @@
+kind: stack
+
+depends:
+ - filename: base.bst
diff --git a/tests/integration/project/elements/fmt/except.bst b/tests/integration/project/elements/fmt/except.bst
new file mode 100644
index 0000000..bbecc3a
--- /dev/null
+++ b/tests/integration/project/elements/fmt/except.bst
@@ -0,0 +1,4 @@
+kind: stack
+
+depends:
+ - filename: base.bst
diff --git a/tests/integration/project/elements/fmt/good-format.bst b/tests/integration/project/elements/fmt/good-format.bst
new file mode 100644
index 0000000..44e2293
--- /dev/null
+++ b/tests/integration/project/elements/fmt/good-format.bst
@@ -0,0 +1,4 @@
+kind: stack
+
+depends:
+- filename: base.bst
diff --git a/tests/integration/project/elements/fmt/stack.bst b/tests/integration/project/elements/fmt/stack.bst
new file mode 100644
index 0000000..0252d54
--- /dev/null
+++ b/tests/integration/project/elements/fmt/stack.bst
@@ -0,0 +1,5 @@
+kind: stack
+depends:
+- filename: fmt/bad-format.bst
+- filename: fmt/good-format.bst
+- filename: fmt/except.bst