mirror of
https://github.com/dankamongmen/notcurses
synced 2025-03-09 17:19:03 -04:00
testing-checklist: add LANG=C, needed for debuilder
This commit is contained in:
parent
0657267274
commit
8ff0d92ad7
@ -1,7 +1,14 @@
|
||||
# Release procedure
|
||||
|
||||
## Precheck
|
||||
|
||||
* Review the testing checklist (doc/testing-checklist.md)
|
||||
* clang-tidy check with something like:
|
||||
* `cmake "-DCMAKE_CXX_CLANG_TIDY=/usr/bin/clang-tidy-11;-checks=-*,clang-analyzer-*,modernize-*,performance-*" ..`
|
||||
* `scan-build cmake .. && scan-build make`
|
||||
|
||||
## Release
|
||||
|
||||
* Run tools/release.sh $OLDVERSION $VERSION
|
||||
* Finalize CHANGELOG.md
|
||||
* Bumps version numbers everywhere they need bumping
|
||||
@ -11,6 +18,17 @@
|
||||
* Draft new release at https://github.com/dankamongmen/notcurses/releases
|
||||
* Title is "v$VERSION—some quip"
|
||||
* That's an em dash (U+2014, UTF-8 e2 80 94), get it right
|
||||
* Upload new Rust crate with `cargo publish`
|
||||
* Upload new Python pip with
|
||||
* `python3 setup.py sdist`
|
||||
* `twine upload dist/*`
|
||||
* Generate and upload new HTML documentation via `make html`
|
||||
* `scp *.html ../doc/man/index.html qemfd.net:/var/www/notcurses/`
|
||||
* Generate and upload new Doxygen documentation via `doxygen ../doc/Doxyfile`
|
||||
* `scp -r html qemfd.net:/var/www/notcurses/`
|
||||
|
||||
## Debian
|
||||
|
||||
* In gbp repository:
|
||||
* Update Debian changelog, if necessary: `dch -v $VERSION+dfsg.1-1`
|
||||
* Finalize Debian changelog with `dch -r`
|
||||
@ -25,23 +43,18 @@
|
||||
* perform this in xterm with TERM=xterm-256color
|
||||
* beware: freak TERMs won't be present in pbuilder
|
||||
* Copy `../*notcurses*$VERSION*` to apt repo, import with `reprepro`
|
||||
* Update Debian changelog with `dch -v $NEXTVERSION-1`
|
||||
* Update CMakeLists.txt with next version
|
||||
|
||||
## Arch
|
||||
|
||||
* Upload new AUR information
|
||||
* Update `pkgver` and `sha256sums` entries
|
||||
* `makepkg --printsrcinfo > .SRCINFO`
|
||||
* Test that package builds with `makepkg`
|
||||
* `git commit -a`
|
||||
* Upload new Rust crate with `cargo publish`
|
||||
* Upload new Python pip with
|
||||
* `python3 setup.py sdist`
|
||||
* `twine upload dist/*`
|
||||
* Generate and upload new HTML documentation via `make html`
|
||||
* `scp *.html ../doc/man/index.html qemfd.net:/var/www/notcurses/`
|
||||
* Generate and upload new Doxygen documentation via `doxygen ../doc/Doxyfile`
|
||||
* `scp -r html qemfd.net:/var/www/notcurses/`
|
||||
* Update Debian changelog with `dch -v $NEXTVERSION-1`
|
||||
* Update CMakeLists.txt with next version
|
||||
|
||||
==FreeBSD==
|
||||
## FreeBSD
|
||||
|
||||
* Update svn checkout of Ports tree: `cd /usr/ports && svn up`
|
||||
* Upgrade ports: `portupgrade -uap`
|
||||
|
@ -4,7 +4,8 @@
|
||||
|
||||
Run unit tests (`make && make test`):
|
||||
* In each multimedia configuration (`ffmpeg`, `oiio`, `none`)
|
||||
* With LANG set to `fr_FR.UTF-8` (to test comma as decimal separator)
|
||||
* With `LANG` set to `fr_FR.UTF-8` (to test comma as decimal separator)
|
||||
* With `LANG` set to `C` (to test ASCII mode, necessary for debuilder)
|
||||
* All must pass
|
||||
|
||||
## Manual tests
|
||||
|
128
tests/visual.cpp
128
tests/visual.cpp
@ -167,78 +167,82 @@ TEST_CASE("Visual") {
|
||||
|
||||
// write a checkerboard pattern and verify the NCBLIT_2x1 output
|
||||
SUBCASE("Dualblitter") {
|
||||
constexpr int DIMY = 10;
|
||||
constexpr int DIMX = 11; // odd number to get checkerboard effect
|
||||
auto rgba = new uint32_t[DIMY * DIMX];
|
||||
for(int i = 0 ; i < DIMY * DIMX ; ++i){
|
||||
CHECK(0 == ncpixel_set_a(&rgba[i], 0xff));
|
||||
if(i % 2){
|
||||
CHECK(0 == ncpixel_set_g(&rgba[i], 0xff));
|
||||
CHECK(0 == ncpixel_set_r(&rgba[i], 0));
|
||||
}else{
|
||||
CHECK(0 == ncpixel_set_r(&rgba[i], 0xff));
|
||||
CHECK(0 == ncpixel_set_g(&rgba[i], 0));
|
||||
if(enforce_utf8()){
|
||||
constexpr int DIMY = 10;
|
||||
constexpr int DIMX = 11; // odd number to get checkerboard effect
|
||||
auto rgba = new uint32_t[DIMY * DIMX];
|
||||
for(int i = 0 ; i < DIMY * DIMX ; ++i){
|
||||
CHECK(0 == ncpixel_set_a(&rgba[i], 0xff));
|
||||
if(i % 2){
|
||||
CHECK(0 == ncpixel_set_g(&rgba[i], 0xff));
|
||||
CHECK(0 == ncpixel_set_r(&rgba[i], 0));
|
||||
}else{
|
||||
CHECK(0 == ncpixel_set_r(&rgba[i], 0xff));
|
||||
CHECK(0 == ncpixel_set_g(&rgba[i], 0));
|
||||
}
|
||||
CHECK(0 == ncpixel_set_b(&rgba[i], 0));
|
||||
}
|
||||
CHECK(0 == ncpixel_set_b(&rgba[i], 0));
|
||||
}
|
||||
auto ncv = ncvisual_from_rgba(rgba, DIMY, DIMX * sizeof(uint32_t), DIMX);
|
||||
REQUIRE(nullptr != ncv);
|
||||
struct ncvisual_options vopts{};
|
||||
vopts.n = n_;
|
||||
vopts.blitter = NCBLIT_2x1;
|
||||
vopts.flags = NCVISUAL_OPTION_NODEGRADE;
|
||||
CHECK(n_ == ncvisual_render(nc_, ncv, &vopts));
|
||||
CHECK(0 == notcurses_render(nc_));
|
||||
for(int y = 0 ; y < DIMY / 2 ; ++y){
|
||||
for(int x = 0 ; x < DIMX ; ++x){
|
||||
uint32_t attrword;
|
||||
uint64_t channels;
|
||||
char* egc = notcurses_at_yx(nc_, y, x, &attrword, &channels);
|
||||
REQUIRE(nullptr != egc);
|
||||
CHECK((rgba[y * 2 * DIMX + x] & 0xffffff) == channels_bg(channels));
|
||||
CHECK((rgba[(y * 2 + 1) * DIMX + x] & 0xffffff) == channels_fg(channels));
|
||||
free(egc);
|
||||
auto ncv = ncvisual_from_rgba(rgba, DIMY, DIMX * sizeof(uint32_t), DIMX);
|
||||
REQUIRE(nullptr != ncv);
|
||||
struct ncvisual_options vopts{};
|
||||
vopts.n = n_;
|
||||
vopts.blitter = NCBLIT_2x1;
|
||||
vopts.flags = NCVISUAL_OPTION_NODEGRADE;
|
||||
CHECK(n_ == ncvisual_render(nc_, ncv, &vopts));
|
||||
CHECK(0 == notcurses_render(nc_));
|
||||
for(int y = 0 ; y < DIMY / 2 ; ++y){
|
||||
for(int x = 0 ; x < DIMX ; ++x){
|
||||
uint32_t attrword;
|
||||
uint64_t channels;
|
||||
char* egc = notcurses_at_yx(nc_, y, x, &attrword, &channels);
|
||||
REQUIRE(nullptr != egc);
|
||||
CHECK((rgba[y * 2 * DIMX + x] & 0xffffff) == channels_bg(channels));
|
||||
CHECK((rgba[(y * 2 + 1) * DIMX + x] & 0xffffff) == channels_fg(channels));
|
||||
free(egc);
|
||||
}
|
||||
}
|
||||
delete[] rgba;
|
||||
}
|
||||
delete[] rgba;
|
||||
}
|
||||
|
||||
// write a checkerboard pattern and verify the NCBLIT_2x2 output
|
||||
SUBCASE("Quadblitter") {
|
||||
constexpr int DIMY = 10;
|
||||
constexpr int DIMX = 11; // odd number to get checkerboard effect
|
||||
auto rgba = new uint32_t[DIMY * DIMX];
|
||||
for(int i = 0 ; i < DIMY * DIMX ; ++i){
|
||||
CHECK(0 == ncpixel_set_a(&rgba[i], 0xff));
|
||||
if(i % 2){
|
||||
CHECK(0 == ncpixel_set_g(&rgba[i], 0xff));
|
||||
CHECK(0 == ncpixel_set_b(&rgba[i], 0));
|
||||
}else{
|
||||
CHECK(0 == ncpixel_set_b(&rgba[i], 0xff));
|
||||
CHECK(0 == ncpixel_set_g(&rgba[i], 0));
|
||||
if(enforce_utf8()){
|
||||
constexpr int DIMY = 10;
|
||||
constexpr int DIMX = 11; // odd number to get checkerboard effect
|
||||
auto rgba = new uint32_t[DIMY * DIMX];
|
||||
for(int i = 0 ; i < DIMY * DIMX ; ++i){
|
||||
CHECK(0 == ncpixel_set_a(&rgba[i], 0xff));
|
||||
if(i % 2){
|
||||
CHECK(0 == ncpixel_set_g(&rgba[i], 0xff));
|
||||
CHECK(0 == ncpixel_set_b(&rgba[i], 0));
|
||||
}else{
|
||||
CHECK(0 == ncpixel_set_b(&rgba[i], 0xff));
|
||||
CHECK(0 == ncpixel_set_g(&rgba[i], 0));
|
||||
}
|
||||
CHECK(0 == ncpixel_set_r(&rgba[i], 0));
|
||||
}
|
||||
CHECK(0 == ncpixel_set_r(&rgba[i], 0));
|
||||
}
|
||||
auto ncv = ncvisual_from_rgba(rgba, DIMY, DIMX * sizeof(uint32_t), DIMX);
|
||||
REQUIRE(nullptr != ncv);
|
||||
struct ncvisual_options vopts{};
|
||||
vopts.n = n_;
|
||||
vopts.blitter = NCBLIT_2x2;
|
||||
vopts.flags = NCVISUAL_OPTION_NODEGRADE;
|
||||
CHECK(n_ == ncvisual_render(nc_, ncv, &vopts));
|
||||
CHECK(0 == notcurses_render(nc_));
|
||||
for(int y = 0 ; y < DIMY / 2 ; ++y){
|
||||
for(int x = 0 ; x < DIMX / 2 ; ++x){
|
||||
uint32_t attrword;
|
||||
uint64_t channels;
|
||||
char* egc = notcurses_at_yx(nc_, y, x, &attrword, &channels);
|
||||
REQUIRE(nullptr != egc);
|
||||
CHECK((rgba[(y * 2 * DIMX) + (x * 2)] & 0xffffff) == channels_fg(channels));
|
||||
CHECK((rgba[(y * 2 + 1) * DIMX + (x * 2) + 1] & 0xffffff) == channels_fg(channels));
|
||||
free(egc);
|
||||
auto ncv = ncvisual_from_rgba(rgba, DIMY, DIMX * sizeof(uint32_t), DIMX);
|
||||
REQUIRE(nullptr != ncv);
|
||||
struct ncvisual_options vopts{};
|
||||
vopts.n = n_;
|
||||
vopts.blitter = NCBLIT_2x2;
|
||||
vopts.flags = NCVISUAL_OPTION_NODEGRADE;
|
||||
CHECK(n_ == ncvisual_render(nc_, ncv, &vopts));
|
||||
CHECK(0 == notcurses_render(nc_));
|
||||
for(int y = 0 ; y < DIMY / 2 ; ++y){
|
||||
for(int x = 0 ; x < DIMX / 2 ; ++x){
|
||||
uint32_t attrword;
|
||||
uint64_t channels;
|
||||
char* egc = notcurses_at_yx(nc_, y, x, &attrword, &channels);
|
||||
REQUIRE(nullptr != egc);
|
||||
CHECK((rgba[(y * 2 * DIMX) + (x * 2)] & 0xffffff) == channels_fg(channels));
|
||||
CHECK((rgba[(y * 2 + 1) * DIMX + (x * 2) + 1] & 0xffffff) == channels_fg(channels));
|
||||
free(egc);
|
||||
}
|
||||
}
|
||||
delete[] rgba;
|
||||
}
|
||||
delete[] rgba;
|
||||
}
|
||||
|
||||
// close-in verification of each quadblitter output EGC
|
||||
|
Loading…
x
Reference in New Issue
Block a user