blob: 92538ffc593fdc7075d67951909a7fd1f4937447 [file] [log] [blame]
#!/bin/bash
# Copyright 2015 The Bazel Authors. All rights reserved.
#
# 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.
# Tests release notes generation (relnotes.sh)
set -eu
SCRIPT_DIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)
source ${SCRIPT_DIR}/testenv.sh || { echo "testenv.sh not found!" >&2; exit 1; }
### Setup a git repository
setup_git_repository
### Load the relnotes script
source ${SCRIPT_DIR}/relnotes.sh || { echo "relnotes.sh not found!" >&2; exit 1; }
### Tests method
function set_up() {
cd ${MASTER_ROOT}
}
function test_format_release_notes() {
local expected=' - Lorem ipsus I do not know more of latin than that but I need to
type random text that spans multiple line so we can test that the
wrapping of lines works as intended.
- Another thing I must type.
- Yet another test that spans across multiple lines so I must type
some random stuff to test wrapping.'
local input=("Lorem ipsus I do not know more of latin \
than that but I need to type random text that spans multiple line so we \
can test that the wrapping of lines works as intended."
"Another thing I must type."
"Yet another test that spans across multiple lines so I must type \
some random stuff to test wrapping.")
assert_equals "${expected}" "$(format_release_notes "${input[@]}")"
}
function test_get_release_notes_commits() {
# Generated with git log --grep RELNOTES.
# Only 6d98f6c 53c0748 are removed (rollback).
commits="0188971 957934c 7a99c7f b5ba24a c9041bf 8232d9b 422c731 e9029d4 \
cc44636 06b09ce 29b05c8 67944d8 e8f6647 6d9fb36 f7c9922 5c0e4b2 9e387dd \
98c9274 db4d861 a689f29 db487ce 965c392 bb59d88 d3461db cef25c4 14d905b"
assert_equals "$commits" "$(get_release_notes_commits 00d7223 | xargs)"
assert_equals "$(echo "$commits" | sed 's/957934c //')" \
"$(get_release_notes_commits 00d7223 957934c | xargs)"
}
TEST_INC_CHANGE='Incompatible changes:
- Remove deprecated "make var" INCDIR
'
TEST_NEW_CHANGE='New features:
- added --with_aspect_deps to blaze query, that prints additional
information about aspects of target when --output is set to {xml,
proto, record}.
'
TEST_CHANGE='Important changes:
- Use a default implementation of a progress message, rather than
defaulting to null for all SpawnActions.
- Attribute error messages related to Android resources are easier
to understand now.'
function test_release_notes() {
assert_equals "$TEST_INC_CHANGE$(echo)$TEST_NEW_CHANGE$(echo)$TEST_CHANGE" \
"$(release_notes 965c392ab1d68d5bc23fdef3d86d635ec9d2da8e)"
assert_equals "$TEST_NEW_CHANGE$(echo)$TEST_CHANGE" \
"$(release_notes 965c392ab1d68d5bc23fdef3d86d635ec9d2da8e bb59d88)"
}
function test_get_last_release() {
rm -f ${TEST_TMPDIR}/CHANGELOG.md
if (get_last_release "${TEST_TMPDIR}/CHANGELOG.md"); then
fail "Should have returned false for initial release"
fi
cat <<EOF >${TEST_TMPDIR}/CHANGELOG.md
## No release
EOF
if (get_last_release "${TEST_TMPDIR}/CHANGELOG.md"); then
fail "Should have returned false when no release exists"
fi
cat <<EOF >${TEST_TMPDIR}/CHANGELOG.md
## New release
Baseline: 965c392
Initial release without cherry-picks
EOF
assert_equals "965c392" \
"$(get_last_release "${TEST_TMPDIR}/CHANGELOG.md")"
mv ${TEST_TMPDIR}/CHANGELOG.md ${TEST_TMPDIR}/CHANGELOG.md.bak
cat <<EOF >${TEST_TMPDIR}/CHANGELOG.md
## Cherry-picking bb59d88
Baseline: 965c392
+ bb59d88: RELNOTES[INC]: Remove deprecated "make var" INCDIR
$TEST_INC_CHANGE
EOF
cat ${TEST_TMPDIR}/CHANGELOG.md.bak >>${TEST_TMPDIR}/CHANGELOG.md
rm ${TEST_TMPDIR}/CHANGELOG.md.bak
assert_equals "965c392 bb59d88" \
"$(get_last_release "${TEST_TMPDIR}/CHANGELOG.md")"
mv ${TEST_TMPDIR}/CHANGELOG.md ${TEST_TMPDIR}/CHANGELOG.md.bak
cat <<EOF >${TEST_TMPDIR}/CHANGELOG.md
## Cherry-picking bb59d88 and 14d905b
Baseline: 965c392
+ bb59d88: RELNOTES[INC]: Remove deprecated "make var" INCDIR
+ 14d905b: Add --with_aspect_deps flag to blaze query. This flag
should produce additional information about aspect
dependencies when --output is set to {xml, proto}.
$TEST_INC_CHANGE
$TEST_NEW_CHANGE
EOF
cat ${TEST_TMPDIR}/CHANGELOG.md.bak >>${TEST_TMPDIR}/CHANGELOG.md
rm ${TEST_TMPDIR}/CHANGELOG.md.bak
assert_equals "965c392 bb59d88 14d905b" \
"$(get_last_release "${TEST_TMPDIR}/CHANGELOG.md")"
}
function test_create_release_notes() {
cat <<EOF >${TEST_TMPDIR}/CHANGELOG.md
## New release
Baseline: 965c392
Initial release without cherry-picks
EOF
assert_equals "$TEST_INC_CHANGE$(echo)$TEST_NEW_CHANGE$(echo)$TEST_CHANGE" \
"$(create_release_notes ${TEST_TMPDIR}/CHANGELOG.md)"
cat <<'EOF' >${TEST_TMPDIR}/CHANGELOG.md
## Cherry-picking bb59d88
```
Baseline: 965c392
+ bb59d88: RELNOTES[INC]: Remove deprecated "make var" INCDIR
```
EOF
cat <<EOF >>${TEST_TMPDIR}/CHANGELOG.md
$TEST_INC_CHANGE
EOF
assert_equals "$TEST_NEW_CHANGE$(echo)$TEST_CHANGE" \
"$(create_release_notes ${TEST_TMPDIR}/CHANGELOG.md)"
assert_equals "965c392 bb59d88" \
"$(get_last_release "${TEST_TMPDIR}/CHANGELOG.md")"
cat <<'EOF' >${TEST_TMPDIR}/CHANGELOG.md
## Cherry-picking bb59d88 and 14d905b
```
Baseline: 965c392
+ bb59d88: RELNOTES[INC]: Remove deprecated "make var" INCDIR
+ 14d905b: Add --with_aspect_deps flag to blaze query. This flag
should produce additional information about aspect
dependencies when --output is set to {xml, proto}.
```
EOF
cat <<EOF >>${TEST_TMPDIR}/CHANGELOG.md
$TEST_INC_CHANGE
$TEST_NEW_CHANGE
EOF
assert_equals "$TEST_CHANGE" \
"$(create_release_notes ${TEST_TMPDIR}/CHANGELOG.md)"
}
function test_create_revision_information() {
expected='Baseline: 965c392
+ bb59d88: RELNOTES[INC]: Remove deprecated "make var" INCDIR
+ 14d905b: Add --with_aspect_deps flag to blaze query. This flag
should produce additional information about aspect
dependencies when --output is set to {xml, proto}.'
assert_equals "$expected" \
"$(create_revision_information 965c392ab1d68d5bc23fdef3d86d635ec9d2da8e bb59d88 14d905b5cce9a1bbc2911331809b03679b23dad1)"
}
run_suite "Release notes generation tests"