diff options
Diffstat (limited to 'tests')
| -rw-r--r-- | tests/cli.rs | 62 | ||||
| -rw-r--r-- | tests/fixtures/dle-casa.html | 24 |
2 files changed, 86 insertions, 0 deletions
diff --git a/tests/cli.rs b/tests/cli.rs new file mode 100644 index 0000000..4d54a55 --- /dev/null +++ b/tests/cli.rs @@ -0,0 +1,62 @@ +//! Command-line contract. Everything here runs offline: real lookups are +//! tested against the fixtures in the unit tests. + +use assert_cmd::Command; +use predicates::prelude::PredicateBooleanExt; +use predicates::str::contains; + +fn drae() -> Command { + let mut c = Command::cargo_bin("drae").unwrap(); + // A separate cache, so the user's is neither touched nor relied upon. + c.env("XDG_CACHE_HOME", env!("CARGO_TARGET_TMPDIR")); + c.env("NO_COLOR", "1"); + c +} + +#[test] +fn prints_help_without_arguments() { + drae() + .assert() + .success() + .stdout(contains("Diccionario de la lengua española")) + .stdout(contains("conjugar")); +} + +#[test] +fn reports_its_version() { + drae() + .arg("--version") + .assert() + .success() + .stdout(contains(env!("CARGO_PKG_VERSION"))); +} + +#[test] +fn search_needs_the_cache() { + drae() + .args(["buscar", "edificio", "--sin-cache"]) + .assert() + .failure() + .stderr(contains("está desactivada")); +} + +#[test] +fn cache_commands_work_on_an_empty_cache() { + drae().args(["cache", "info"]).assert().success(); + drae() + .args(["cache", "listar"]) + .assert() + .success() + .stdout(contains("vacía").or(contains("rae-api"))); +} + +#[test] +fn definir_exists_for_words_that_clash_with_command_names() { + // `drae sin` is the synonyms command, so the word «sin» is looked up + // with `drae definir sin`. + drae() + .args(["definir", "--help"]) + .assert() + .success() + .stdout(contains("PALABRA")); +} diff --git a/tests/fixtures/dle-casa.html b/tests/fixtures/dle-casa.html new file mode 100644 index 0000000..940c42d --- /dev/null +++ b/tests/fixtures/dle-casa.html @@ -0,0 +1,24 @@ +<article class="o-main__article" role="main" id="7lsKMtR"> + + <header class="c-page-header js-page-header" role="banner"><a name="7lsKMtR"></a> + <div class="c-page-header__container"> +<h1 class="c-page-header__title" title="Definición de casa">casa</h1> + </div> + </header> + + <div class="o-main"> + <div class="o-main__container"> + <div id="navLateral" class="o-main__sidebar"> + + <nav class="c-anchors js-anchors" aria-label="Índice de secciones"> + <ul class="c-anchors__track"> +<li class="c-anchors__track-item"><a href="#7lsKMtR" class="c-anchors__item js-anchor-item">Artículo</a></li><li class="c-anchors__track-item"><a href="#sinonimos7lsKMtR" class="c-anchors__item js-anchor-item">Sinónimos o afines</a></li> + </ul></nav> + + </div> + <div class="o-main__content"> + <section class="c-section"> + <header class="c-section__title u-sr-only"> + <h2>Definición</h2> + </header> +<div class="n2 c-text-intro">Del <abbr title="latín">lat.</abbr> <em>casa</em> 'choza'.</div><ol class="c-definitions"><li id="LjRHphN" class="j"><div class="c-definitions__item" role="definition"><div><span class="n_acep">1. </span><abbr class="d" title="nombre femenino">f.</abbr> <span data-id="ENa0lL9">Edificio</span> <span data-id="Rp1CuT2|RsVKhBv|RwYmdsn|RxSczPr">para</span> <span data-id="JvaKT39">habitar</span>. <span class="h"><span data-id="b67JJSq|b6hEWeB|b6iKApr">Una</span> <span data-id="7lsKMtR|7mL8hqm|7mLg2Jx">casa</span> <span data-id="BtDkacL|BtFYznp">de</span> <span data-id="QrnUsu1">ocho</span> <span data-id="TKGNG6k|TKQacaC">plantas</span>.</span></div><div class="c-definitions__item-footer"><div class="c-word-list"><div class="c-word-list__label"><abbr class="sin-header-inline d" title="Sinónimos o afines">Sin.:</abbr></div><ul class="c-word-list__items" role="list"><li><span><span class="sin" data-id="byF4Mc7">vivienda</span></span>, <span><span class="sin" data-id="LftS0t0">inmueble</span></span>, <span><span class="sin" data-id="E6cyAL3">domicilio</span></span>, <span><span class="sin" data-id="KYIGBW2">hogar</span></span>, <span><span class="sin" data-id="W9hpKPy">residencia</span></span>, <span><span class="sin" data-id="TD3BxDc">piso</span></span>, <span><span class="sin" data-id="35x3ajw">apartamento</span></span>, <span><span class="sin" data-id="CEajDW3">departamento</span></span>, <span><span class="sin" data-id="ZIMlMTu">techo</span></span>, <span><span class="sin" data-id="35xT48b">apartamiento</span></span>, <span><span class="sin" data-id="BTctS7T">cuarto</span></span>, <span><span class="sin" data-id="7m2X3lH">casalicio</span></span>.</li></ul></div></div></div></li><li id="Mlzmv8T" class="j"><div class="c-definitions__item" role="definition"><div><span class="n_acep">2. </span><abbr class="g" title="nombre femenino">f.</abbr> <span data-id="ENa0lL9">Edificio</span> <span data-id="BtDkacL|BtFYznp">de</span> <span data-id="b67JJSq|b6hEWeB|b6iKApr">una</span> <span data-id="QlqTEX0|Qlr66uc|Qltkqeu">o</span> <span data-id="TTT0e1l">pocas</span> <span data-id="TKGNG6k|TKQacaC">plantas</span> <span data-id="DTtK4Mk|DTy95KP|DTzRYFc">destinado</span> <span data-id="002rZ9U|003Ov93">a</span> <span data-id="byF4Mc7">vivienda</span> <span data-id="b5OMHdV">unifamiliar</span>, <span data-id="EuPaWdO">en</span> <span data-id="R6zXXwD">oposición</span> <span data-id="002rZ9U|003Ov93">a</span> <i><span data-id="TC7IycY|TD3BxDc">piso</span></i>. <span class="h"><span data-id="UnvXEIb">Quieren</span> <span data-id="bWSrEeQ">vender</span> <span data-id="ESraxkH">el</span> <span data-id="TC7IycY|TD3BxDc">piso</span> <span data-id="c8HoARq|c8HrfrV|c8IFPyp">y</span> <span data-id="A2uSS6N">comprarse</span> <span data-id="b67JJSq|b6hEWeB|b6iKApr">una</span> <span data-id="7lsKMtR|7mL8hqm|7mLg2Jx">casa</span>.</span></div><div class="c-definitions__item-footer"><div class="c-word-list"><div class="c-word-list__label"><abbr class="sin-header-inline d" title="Sinónimos o afines">Sin.:</abbr></div><ul class="c-word-list__items" role="list"><li><span><span class="sin" data-id="8UP1xbR">chalé</span></span>, <span><span class="sin" data-id="8URIZPT">chalet</span></span>.</li></ul></div></div></div></li><li id="LjSIH95" class="j"><div class="c-definitions__item" role="definition"><div><span class="n_acep">3. </span><abbr class="g" title="nombre femenino">f.</abbr> <a class="a" href="/?id=TD3BxDc#CRZCLsj">piso</a> (‖ <span data-id="byF4Mc7">vivienda</span>). <span class="h"><span data-id="P9rNqLB|P9tBea9|P9vG3X8">Mi</span> <span data-id="7lsKMtR|7mL8hqm|7mLg2Jx">casa</span> <span data-id="GnJiqdL">está</span> <span data-id="EuPaWdO">en</span> <span data-id="ESraxkH">el</span> 3.º <span data-id="6MolVcO">C</span>.</span></div><div class="c-definitions__item-footer"><div class="c-word-list"><div class="c-word-list__label"><abbr class="sin-header-inline d" title="Sinónimo o afín">Sin.:</abbr></div><ul class="c-word-list__items" role="list"><li><span><span class="sin" data-id="TD3BxDc">piso</span></span>.</li></ul></div></div></div></li><li id="LjSPhSE" class="j"><div class="c-definitions__item" role="definition"><div><span class="n_acep">4. </span><abbr class="g" title="nombre femenino">f.</abbr> <span data-id="ENa0lL9">Edificio</span>, <span data-id="PSAA1Au">mobiliario</span>, <span data-id="ViiZ39k">régimen</span> <span data-id="BtDkacL|BtFYznp">de</span> <span data-id="blw7uSa">vida</span>, <abbr class="d" title="etcétera">etc.,</abbr> <span data-id="BtDkacL|BtFYznp">de</span> <span data-id="1oMNWvM">alguien</span>. <span class="h"><span data-id="EJtx4Yo|EK067bv">Echo</span> <span data-id="BtDkacL|BtFYznp">de</span> <span data-id="OuzZNmN">menos</span> <span data-id="ESraxkH|MiZ5vEt|NWnohQu">las</span> <span data-id="9xkcZ9b">comodidades</span> <span data-id="BtDkacL|BtFYznp">de</span> <span data-id="7lsKMtR|7mL8hqm|7mLg2Jx">casa</span>.</span></div></div></li></ol><h3 id="AezUgze" class="k5"><u>casa</u> a la malicia</h3><ol class="c-definitions"><li id="LjcofSI" class="m"><div class="c-definitions__item" role="definition"><div><span class="n_acep">1. </span><abbr class="d" title="nombre femenino">f.</abbr> <span class="u">casa</span> <span data-id="UkbUarn">que</span> <span data-id="A5cH5M4">con</span> <span data-id="6PvMEeq|6R7K0Lr|6R7OJ76">cabida</span> <span data-id="Rp1CuT2|RsVKhBv|RwYmdsn|RxSczPr">para</span> <span data-id="23Sn9bH">alojar</span> <span data-id="E1z0RhR|EA0Jc84">dos</span> <span data-id="HZnZiow">familias</span> <span data-id="XNTSeAe|XNVjCmd">se</span> <span data-id="ENXt0Vd">edificaba</span> <span data-id="EuPaWdO">en</span> Madrid <span data-id="EHqoAYN|EHsV5Ge">durante</span> <span data-id="ESraxkH">el</span> <span data-id="Xr0ACdZ">siglo</span> <span class="i2">XVII,</span> <span data-id="Y5fMg13|Y5lVqnD|Y5lmhPd">sobre</span> <span data-id="aY0DN51|aY9hlGc">traza</span> <span data-id="3dvG2xE">arquitectónica</span> <span data-id="EuPaWdO">en</span> <span data-id="HSa9etX|HSdPKcm|HSfC1I8">fachada</span> <span data-id="BtDkacL|BtFYznp">de</span> <span data-id="b6hEWeB|b6iKApr">un</span> <span data-id="YJBIl0A|YJBeprw">solo</span> <span data-id="TC7IycY|TD3BxDc">piso</span>, <span data-id="VlZMsEx">rehuyendo</span> <span data-id="40vmQ44|3zT41MT">así</span> <span data-id="ESraxkH|MiZ5vEt|NWnohQu">la</span> <span data-id="7Wnhao0|7XB9iU3">carga</span> <span data-id="BtDkacL|BtFYznp">de</span> <span data-id="3GVXH2s|3GYsxvQ">aposento</span>.</div></div></li></ol><footer></footer>
\ No newline at end of file |