diff --git a/setup.py b/setup.py index 899543540aaa65eb9d01baea136ffe5090df9e83..8c8eb0fcbf71e31bdae9b5f494beb56de7f48d89 100755 --- a/setup.py +++ b/setup.py @@ -65,6 +65,8 @@ setup( lister.cran=swh.lister.cran:register lister.crates=swh.lister.crates:register lister.debian=swh.lister.debian:register + lister.dlang=swh.lister.dlang:register + lister.fedora=swh.lister.fedora:register lister.gitea=swh.lister.gitea:register lister.github=swh.lister.github:register lister.gitiles=swh.lister.gitiles:register diff --git a/swh/lister/dlang/__init__.py b/swh/lister/dlang/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..8cd517ddfe200f2a89f193465475bceee45ac798 --- /dev/null +++ b/swh/lister/dlang/__init__.py @@ -0,0 +1,75 @@ +# Copyright (C) 2023 The Software Heritage developers +# See the AUTHORS file at the top-level directory of this distribution +# License: GNU General Public License version 3, or any later version +# See top-level LICENSE file for more information + + +""" +Dlang lister +============= + +D is a general-purpose programming language with static typing, systems-level access, +and C-like syntax. + +The `Dlang`_ lister list origins from its packages manager registry `DUB`_. + +The registry provides an `http api endpoint`_ that helps in getting the packages index +with name, url, versions and dates. + +As of July 2023 `DUB`_ list 2364 package names. + +Origins retrieving strategy +--------------------------- + +To build a list of origins we make a GET request to an `http api endpoint`_ that returns +a Json array of objects. +The origin url for each package is constructed with the information of corresponding +`repository` entry which represents Git based projects hosted on Github, GitLab or +Bitbucket. + +Page listing +------------ + +There is only one page listing all origins url. + +Origins from page +----------------- + +The lister is stateless and yields all origins url from one page. It is a list of package +url with last update information. + +Running tests +------------- + +Activate the virtualenv and run from within swh-lister directory:: + + pytest -s -vv --log-cli-level=DEBUG swh/lister/dlang/tests + +Testing with Docker +------------------- + +Change directory to swh/docker then launch the docker environment:: + + docker compose up -d + +Then schedule a dlang listing task:: + + docker compose exec swh-scheduler swh scheduler task add -p oneshot list-dlang + +You can follow lister execution by displaying logs of swh-lister service:: + + docker compose logs -f swh-lister + +.. _Dlang: https://dlang.org/ +.. _DUB: https://code.dlang.org/ +.. _http api endpoint: https://code.dlang.org/api/packages/dump" +""" + + +def register(): + from .lister import DlangLister + + return { + "lister": DlangLister, + "task_modules": ["%s.tasks" % __name__], + } diff --git a/swh/lister/dlang/lister.py b/swh/lister/dlang/lister.py new file mode 100644 index 0000000000000000000000000000000000000000..65afad446823b1a6d14c63c7c81f29301dec5a6a --- /dev/null +++ b/swh/lister/dlang/lister.py @@ -0,0 +1,93 @@ +# Copyright (C) 2023 The Software Heritage developers +# See the AUTHORS file at the top-level directory of this distribution +# License: GNU General Public License version 3, or any later version +# See top-level LICENSE file for more information + +import logging +from typing import Any, Dict, Iterator, List, Optional + +import iso8601 + +from swh.scheduler.interface import SchedulerInterface +from swh.scheduler.model import ListedOrigin + +from ..pattern import CredentialsType, StatelessLister + +logger = logging.getLogger(__name__) + +# Aliasing the page results returned by `get_pages` method from the lister. +DlangListerPage = List[Dict[str, Any]] + + +class DlangLister(StatelessLister[DlangListerPage]): + """List D lang origins.""" + + LISTER_NAME = "dlang" + VISIT_TYPE = "git" # D lang origins url are Git repositories + INSTANCE = "dlang" + + BASE_URL = "https://code.dlang.org" + PACKAGES_DUMP_URL = BASE_URL + "/api/packages/dump" + KINDS = { + "github": "https://github.com", + "gitlab": "https://gitlab.com", + "bitbucket": "https://bitbucket.com", + } + + KIND_URL_PATTERN = "{url}/{owner}/{project}" + + def __init__( + self, + scheduler: SchedulerInterface, + credentials: Optional[CredentialsType] = None, + max_origins_per_page: Optional[int] = None, + max_pages: Optional[int] = None, + enable_origins: bool = True, + ): + super().__init__( + scheduler=scheduler, + credentials=credentials, + instance=self.INSTANCE, + url=self.PACKAGES_DUMP_URL, + max_origins_per_page=max_origins_per_page, + max_pages=max_pages, + enable_origins=enable_origins, + ) + self.session.headers.update({"Accept": "application/json"}) + + def get_pages(self) -> Iterator[DlangListerPage]: + """Yield an iterator which returns 'page' + + It uses the api endpoint provided by `https://registry.dlang.io/packages` + to get a list of package names with an origin url that corresponds to Git + repository. + + There is only one page that list all origins urls. + """ + response = self.http_request(self.url) + yield response.json() + + def get_origins_from_page(self, page: DlangListerPage) -> Iterator[ListedOrigin]: + """Iterate on all pages and yield ListedOrigin instances""" + assert self.lister_obj.id is not None + + for entry in page: + repo: Dict[str, Any] = entry["repository"] + kind: str = repo["kind"] + + if kind not in self.KINDS: + logging.error("Can not build a repository url with %r" % repo) + continue + + repo_url = self.KIND_URL_PATTERN.format( + url=self.KINDS[kind], owner=repo["owner"], project=repo["project"] + ) + + last_update = iso8601.parse_date(entry["stats"]["updatedAt"]) + + yield ListedOrigin( + lister_id=self.lister_obj.id, + visit_type=self.VISIT_TYPE, + url=repo_url, + last_update=last_update, + ) diff --git a/swh/lister/dlang/tasks.py b/swh/lister/dlang/tasks.py new file mode 100644 index 0000000000000000000000000000000000000000..678caf18541e0ebe6e6e51177e4e58d4aec64af3 --- /dev/null +++ b/swh/lister/dlang/tasks.py @@ -0,0 +1,19 @@ +# Copyright (C) 2023 The Software Heritage developers +# See the AUTHORS file at the top-level directory of this distribution +# License: GNU General Public License version 3, or any later version +# See top-level LICENSE file for more information + +from celery import shared_task + +from swh.lister.dlang.lister import DlangLister + + +@shared_task(name=__name__ + ".DlangListerTask") +def list_dlang(**lister_args): + """Lister task for D lang packages registry""" + return DlangLister.from_configfile(**lister_args).run().dict() + + +@shared_task(name=__name__ + ".ping") +def _ping(): + return "OK" diff --git a/swh/lister/dlang/tests/__init__.py b/swh/lister/dlang/tests/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/swh/lister/dlang/tests/data/https_code.dlang.org/api_packages_dump b/swh/lister/dlang/tests/data/https_code.dlang.org/api_packages_dump new file mode 100644 index 0000000000000000000000000000000000000000..0844c15a60e66943ded98e6a2350a9db54ecda69 --- /dev/null +++ b/swh/lister/dlang/tests/data/https_code.dlang.org/api_packages_dump @@ -0,0 +1,688 @@ +[ + { + "_id": "5b704cf09603f8d552a6f511", + "owner": "590df882a26e9ec51fdc1b23", + "name": "silly", + "repository": { + "kind": "gitlab", + "owner": "AntonMeep", + "project": "silly" + }, + "versions": [ + { + "date": "2022-08-28T11:25:18Z", + "version": "~master", + "commitID": "63219a6d7695caeea02db044ee9238068975c6fe", + "info": { + "packageDescriptionFile": "dub.json", + "authors": [ + "Anton Fediushin" + ], + "sourceFiles": [ + "silly.d" + ], + "license": "ISC", + "copyright": "Copyright © 2018-2019, Anton Fediushin", + "name": "silly", + "description": "Better test runner for D", + "importPaths": [ + "." + ], + "targetType": "sourceLibrary" + }, + "readme": "silly [](https://gitlab.com/AntonMeep/silly) [](https://gitlab.com/AntonMeep/silly/commits/master) [](https://gitlab.com/AntonMeep/silly/commits/master) [](https://gitlab.com/AntonMeep/silly/blob/master/LICENSE) [](https://gitlab.com/AntonMeep/silly/tags)\n=====\n\n**silly** is a modern and light test runner for the D programming language.\n\n# Used by\n\n[Optional](http://optional.dub.pm/), [expected](http://expected.dub.pm/), [ddash](http://ddash.dub.pm/), and more!\n\n> Got a cool project that uses **silly**? [Let us know!](https://gitlab.com/AntonMeep/silly/issues)\n\n# Features\n\n- Easy to install and use with dub\n- No changes of your code are required to start using silly\n- Seamless integration with `dub test`\n- Named tests\n- Multi-threaded test execution\n- Filtering tests\n- Colourful output\n\n# Getting started\n\nAdd **silly** to your project:\n\n```\n$ dub add silly\n```\n\nThis should be it! Try to run tests:\n\n```\n$ dub test\n```\n\nIf it succeeded then congratulations, you have just finished setting up **silly**! Make sure to add more tests and give them nice names.\n\n# Troubleshooting\n\nUnfortunately, setup isn't that easy sometimes and running `dub test` will fail. Don't panic, most of the issues are caused by the quirks and twists of dub. Here are some suggestions on what to check first:\n\n## Make sure `main()` function isn't defined when built in `unittest` mode\n\nSo, instead of this:\n```d\nvoid main() {\n\n}\n```\n\nDo this:\n```d\nversion(unittest) {\n\t// Do nothing here, dub takes care of that\n} else {\n\tvoid main() {\n\n\t}\n}\n```\n\n## Make sure there is a special `unittest` configuration in your dub.json/dub.sdl\n\n```json\n{\n ...\n\t\"configurations\": [\n\t\t{\n\t\t\t\"name\": \"executable\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"unittest\"\n\t\t}\n\t]\n}\n```\n\nSee also [#32](https://gitlab.com/AntonMeep/silly/issues/32).\n\n> **Pro Tip**: dub configurations can have `dependencies` as well! You may want to add silly as a dependency only for the `unittest` configuration to indicate that it's only used for tests.\n\n## Make sure there is no `targetType: executable` in `unittest` configuration in your dub.json/dub.sdl\n\nInstead of this:\n\n```json\n{\n\t...\n\t\"configurations\": [\n\t\t...\n\t\t{\n\t\t\t\"name\": \"unittest\",\n\t\t\t\"targetType\": \"executable\",\n\t\t\t...\n\t\t}\n\t]\n}\n```\n\nDo this:\n\n```json\n{\n\t...\n\t\"configurations\": [\n\t\t...\n\t\t{\n\t\t\t\"name\": \"unittest\",\n\t\t\t...\n\t\t}\n\t]\n}\n```\n\nSee [#12](https://gitlab.com/AntonMeep/silly/issues/12) for more information.\n\n## Nothing helped?\n\nOpen a new [issue](https://gitlab.com/AntonMeep/silly/issues), we will be happy to help you!\n\n# Naming tests\n\nIt is as easy as adding a `string` [user-defined attribute](https://dlang.org/spec/attribute.html#UserDefinedAttribute) to your `unittest` declaration.\n\n```d\n@(\"Johny\")\nunittest {\n\t// This unittest is named Johny\n}\n```\n\nIf there are multiple such UDAs, the first one is chosen to be the name of the unittest.\n\n```d\n@(\"Hello, \") @(\"World!\")\nunittest {\n\t// This unittest's name is \"Hello, \"\n}\n```\n\n# Command line options\n\n**Silly** accept various command-line options that let you customize its behaviour:\n\n```\n$ dub test -- <options>\n\nOptions:\n --no-colours Disable colours\n -t <n> --threads <n> Number of worker threads. 0 to auto-detect (default)\n -i <regexp> --include <regexp> Run tests if their name matches specified regular expression. See filtering tests\n -e <regexp> --exclude <regexp> Skip tests if their name matches specified regular expression. See filtering tests\n --fail-fast Stop executing all tests when a test fails\n -v --verbose Show verbose output (full stack traces, location and durations)\n -h --help Help information\n```\n\n# Filtering tests\n\nWith `--include` and `--exclude` options it's possible to control what tests will be run. These options take regular expressions in [std.regex'](https://dlang.org/phobos/std_regex.html#Syntax%20and%20general%20information) format.\n\n`--include` only tests that match provided regular expression will be run, other tests will be skipped.\n`--exclude` all of the tests that don't match provided regular expression will be run.\n\n> Using both options at the same time will produce unexpected results!\n\n# Best practices\n\n- Running tests in multi-threaded mode (default) can potentially cause issues, try running tests with `--threads 1`\n- Although unittests inside of nested classes and structs are discovered and executed by Silly, it may be unreliable. Consider having unittest blocks on the toplevel\n\n", + "readmeMarkdown": true, + "docFolder": "" + }, + { + "date": "2018-08-26T08:10:08Z", + "version": "0.3.0", + "commitID": "93a5705135470d7437c309aa9ceb671bcc678dd0", + "info": { + "packageDescriptionFile": "dub.json", + "authors": [ + "Anton Fediushin" + ], + "sourceFiles": [ + "silly.d" + ], + "license": "MIT", + "copyright": "Copyright © 2018, Anton Fediushin", + "name": "silly", + "description": "Better test runner for D", + "importPaths": [ + "." + ], + "targetType": "sourceLibrary" + }, + "readme": "silly [](https://gitlab.com/ohboi/silly) [](https://gitlab.com/ohboi/silly/commits/master) [](https://gitlab.com/ohboi/silly/blob/master/LICENCE) [](https://gitlab.com/ohboi/silly/tags)\n=====\n\n**silly** is a no-nonsense test runner for the D programming language. Instead of re-inventing the wheel and adding more and more levels of abstraction it just works, requiring as little effort from the programmer as possible.\n\n> Note that project's development happens on the [GitLab](https://gitlab.com/ohboi/silly).\n> GitHub repository is a mirror, it might *not* always be up-to-date.\n\nMake sure to check out project's [homepage](https://ohboi.gitlab.io/silly/) for more information about installation and usage.\n\n## Why?\n\nBuilt-in test runner is not good enough. It does its job, but it doesn't show what tests were executed. It just runs them all stopping on the first failed one. Of course, community offers many different solutions for that problem. Being an overcomplicated projects with thousands lines of code they could make you *less* productive increasing build times and deeply integrating into your project.\n\n**silly** is developed with strict principles in mind.\n\n### Keep It Simple, Silly\n\nFind -> run -> report. That's all there is about test runners. It can't be simpler.\n\n### Less code more better\n\nWriting code is hard, writing useful code is even harder, but writing no code is genius. **silly** is meant to contain no useless code.\n\n### Just a test runner, nothing more\n\nYou won't find anything besides the test runner here. It's not test runner's business to provide you with assertions and other nonsense.\n\n### Don't reinvent the wheel\n\n[dub](https://dub.pm/) is a great tool and there's no reason not to use it. Some other test runners use scripts or even integrate dub as part of them but **silly** is just an another dependency of your project.\n\n### It just works\n\nJust add it as a dependency and that's it. No editing of your project's source code is required. No editing of `dub.json/dub.sdl` except for adding a dependency is required. No changes in your editor config or terminal aliases are required, **silly** just runs with\n```\n$ dub test\n```\n\n### Your choice, your test runner\n\nIt's up to you whether you want to use this test runner or not. Get rid of it just by removing the dependency. It won't break your CI/CD scripts and cause any trouble.\n", + "readmeMarkdown": true, + "docFolder": "" + }, + { + "date": "2018-08-27T14:35:33Z", + "version": "0.4.0", + "commitID": "009f98a18fc1207caa05bf8f517a0cd4e938263b", + "info": { + "packageDescriptionFile": "dub.json", + "authors": [ + "Anton Fediushin" + ], + "sourceFiles": [ + "silly.d" + ], + "license": "MIT", + "copyright": "Copyright © 2018, Anton Fediushin", + "name": "silly", + "description": "Better test runner for D", + "importPaths": [ + "." + ], + "targetType": "sourceLibrary" + }, + "readme": "silly [](https://gitlab.com/ohboi/silly) [](https://gitlab.com/ohboi/silly/commits/master) [](https://gitlab.com/ohboi/silly/blob/master/LICENCE) [](https://gitlab.com/ohboi/silly/tags)\n=====\n\n**silly** is a no-nonsense test runner for the D programming language. Instead of re-inventing the wheel and adding more and more levels of abstraction it just works, requiring as little effort from the programmer as possible.\n\n> Note that project's development happens on the [GitLab](https://gitlab.com/ohboi/silly).\n> GitHub repository is a mirror, it might *not* always be up-to-date.\n\nMake sure to check out project's [homepage](https://ohboi.gitlab.io/silly/) for more information about installation and usage.\n\n## Why?\n\nBuilt-in test runner is not good enough. It does its job, but it doesn't show what tests were executed. It just runs them all stopping on the first failed one. Of course, community offers many different solutions for that problem. Being an overcomplicated projects with thousands lines of code they could make you *less* productive increasing build times and deeply integrating into your project.\n\n**silly** is developed with strict principles in mind.\n\n### Keep It Simple, Silly\n\nFind -> run -> report. That's all there is about test runners. It can't be simpler.\n\n### Less code more better\n\nWriting code is hard, writing useful code is even harder, but writing no code is genius. **silly** is meant to contain no useless code.\n\n### Just a test runner, nothing more\n\nYou won't find anything besides the test runner here. It's not test runner's business to provide you with assertions and other nonsense.\n\n### Don't reinvent the wheel\n\n[dub](https://dub.pm/) is a great tool and there's no reason not to use it. Some other test runners use scripts or even integrate dub as part of them but **silly** is just an another dependency of your project.\n\n### It just works\n\nJust add it as a dependency and that's it. No editing of your project's source code is required. No editing of `dub.json/dub.sdl` except for adding a dependency is required. No changes in your editor config or terminal aliases are required, **silly** just runs with\n```\n$ dub test\n```\n\n### Your choice, your test runner\n\nIt's up to you whether you want to use this test runner or not. Get rid of it just by removing the dependency. It won't break your CI/CD scripts and cause any trouble.\n", + "readmeMarkdown": true, + "docFolder": "" + }, + { + "date": "2018-08-28T08:58:26Z", + "version": "0.4.1", + "commitID": "83d352de8df2305ce8c0810c891a98e960182d36", + "info": { + "packageDescriptionFile": "dub.json", + "authors": [ + "Anton Fediushin" + ], + "sourceFiles": [ + "silly.d" + ], + "license": "MIT", + "copyright": "Copyright © 2018, Anton Fediushin", + "name": "silly", + "description": "Better test runner for D", + "importPaths": [ + "." + ], + "targetType": "sourceLibrary" + }, + "readme": "silly [](https://gitlab.com/ohboi/silly) [](https://gitlab.com/ohboi/silly/commits/master) [](https://gitlab.com/ohboi/silly/commits/master) [](https://gitlab.com/ohboi/silly/blob/master/LICENCE) [](https://gitlab.com/ohboi/silly/tags)\n=====\n\n**silly** is a no-nonsense test runner for the D programming language. Instead of re-inventing the wheel and adding more and more levels of abstraction it just works, requiring as little effort from the programmer as possible.\n\n> Note that project's development happens on the [GitLab](https://gitlab.com/ohboi/silly).\n> GitHub repository is a mirror, it might *not* always be up-to-date.\n\nMake sure to check out project's [homepage](https://ohboi.gitlab.io/silly/) for more information about installation and usage.\n\n## Why?\n\nBuilt-in test runner is not good enough. It does its job, but it doesn't show what tests were executed. It just runs them all stopping on the first failed one. Of course, community offers many different solutions for that problem. Being an overcomplicated projects with thousands lines of code they could make you *less* productive increasing build times and deeply integrating into your project.\n\n**silly** is developed with strict principles in mind.\n\n### Keep It Simple, Silly\n\nFind -> run -> report. That's all there is about test runners. It can't be simpler.\n\n### Less code more better\n\nWriting code is hard, writing useful code is even harder, but writing no code is genius. **silly** is meant to contain no useless code.\n\n### Just a test runner, nothing more\n\nYou won't find anything besides the test runner here. It's not test runner's business to provide you with assertions and other nonsense.\n\n### Don't reinvent the wheel\n\n[dub](https://dub.pm/) is a great tool and there's no reason not to use it. Some other test runners use scripts or even integrate dub as part of them but **silly** is just an another dependency of your project.\n\n### It just works\n\nJust add it as a dependency and that's it. No editing of your project's source code is required. No editing of `dub.json/dub.sdl` except for adding a dependency is required. No changes in your editor config or terminal aliases are required, **silly** just runs with\n```\n$ dub test\n```\n\n### Your choice, your test runner\n\nIt's up to you whether you want to use this test runner or not. Get rid of it just by removing the dependency. It won't break your CI/CD scripts and cause any trouble.\n", + "readmeMarkdown": true, + "docFolder": "" + }, + { + "date": "2018-08-28T20:18:10Z", + "version": "0.4.2", + "commitID": "610c64a62d59a1e6f9b398484bbe24b6686e37fd", + "info": { + "packageDescriptionFile": "dub.json", + "authors": [ + "Anton Fediushin" + ], + "sourceFiles": [ + "silly.d" + ], + "license": "MIT", + "copyright": "Copyright © 2018, Anton Fediushin", + "name": "silly", + "description": "Better test runner for D", + "importPaths": [ + "." + ], + "targetType": "sourceLibrary" + }, + "readme": "silly [](https://gitlab.com/ohboi/silly) [](https://gitlab.com/ohboi/silly/commits/master) [](https://gitlab.com/ohboi/silly/commits/master) [](https://gitlab.com/ohboi/silly/blob/master/LICENCE) [](https://gitlab.com/ohboi/silly/tags)\n=====\n\n**silly** is a no-nonsense test runner for the D programming language. Instead of re-inventing the wheel and adding more and more levels of abstraction it just works, requiring as little effort from the programmer as possible.\n\n> Note that project's development happens on the [GitLab](https://gitlab.com/ohboi/silly).\n> GitHub repository is a mirror, it might *not* always be up-to-date.\n\nMake sure to check out project's [homepage](https://ohboi.gitlab.io/silly/) for more information about installation and usage.\n\n## Why?\n\nBuilt-in test runner is not good enough. It does its job, but it doesn't show what tests were executed. It just runs them all stopping on the first failed one. Of course, community offers many different solutions for that problem. Being an overcomplicated projects with thousands lines of code they could make you *less* productive increasing build times and deeply integrating into your project.\n\n**silly** is developed with strict principles in mind.\n\n### Keep It Simple, Silly\n\nFind -> run -> report. That's all there is about test runners. It can't be simpler.\n\n### Less code more better\n\nWriting code is hard, writing useful code is even harder, but writing no code is genius. **silly** is meant to contain no useless code.\n\n### Just a test runner, nothing more\n\nYou won't find anything besides the test runner here. It's not test runner's business to provide you with assertions and other nonsense.\n\n### Don't reinvent the wheel\n\n[dub](https://dub.pm/) is a great tool and there's no reason not to use it. Some other test runners use scripts or even integrate dub as part of them but **silly** is just an another dependency of your project.\n\n### It just works\n\nJust add it as a dependency and that's it. No editing of your project's source code is required. No editing of `dub.json/dub.sdl` except for adding a dependency is required. No changes in your editor config or terminal aliases are required, **silly** just runs with\n```\n$ dub test\n```\n\n### Your choice, your test runner\n\nIt's up to you whether you want to use this test runner or not. Get rid of it just by removing the dependency. It won't break your CI/CD scripts and cause any trouble.\n", + "readmeMarkdown": true, + "docFolder": "" + }, + { + "date": "2018-08-30T19:58:52Z", + "version": "0.4.3", + "commitID": "8ff18ebbb37f93f947b5f6ce8f4a3262ac9cbe5a", + "info": { + "packageDescriptionFile": "dub.json", + "authors": [ + "Anton Fediushin" + ], + "sourceFiles": [ + "silly.d" + ], + "license": "MIT", + "copyright": "Copyright © 2018, Anton Fediushin", + "name": "silly", + "description": "Better test runner for D", + "homepage": "https://ohboi.gitlab.io/silly/", + "importPaths": [ + "." + ], + "targetType": "sourceLibrary" + }, + "readme": "silly [](https://gitlab.com/ohboi/silly) [](https://gitlab.com/ohboi/silly/commits/master) [](https://gitlab.com/ohboi/silly/commits/master) [](https://gitlab.com/ohboi/silly/blob/master/LICENCE) [](https://gitlab.com/ohboi/silly/tags)\n=====\n\n**silly** is a no-nonsense test runner for the D programming language. Instead of re-inventing the wheel and adding more and more levels of abstraction it just works, requiring as little effort from the programmer as possible.\n\n> Note that project's development happens on the [GitLab](https://gitlab.com/ohboi/silly).\n> GitHub repository is a mirror, it might *not* always be up-to-date.\n\nMake sure to check out project's [homepage](https://ohboi.gitlab.io/silly/) for more information about installation and usage.\n\n## Why?\n\nBuilt-in test runner is not good enough. It does its job, but it doesn't show what tests were executed. It just runs them all stopping on the first failed one. Of course, community offers many different solutions for that problem. Being an overcomplicated projects with thousands lines of code they could make you *less* productive increasing build times and deeply integrating into your project.\n\n**silly** is developed with strict principles in mind.\n\n### Keep It Simple, Silly\n\nFind -> run -> report. That's all there is about test runners. It can't be simpler.\n\n### Less code more better\n\nWriting code is hard, writing useful code is even harder, but writing no code is genius. **silly** is meant to contain no useless code.\n\n### Just a test runner, nothing more\n\nYou won't find anything besides the test runner here. It's not test runner's business to provide you with assertions and other nonsense.\n\n### Don't reinvent the wheel\n\n[dub](https://dub.pm/) is a great tool and there's no reason not to use it. Some other test runners use scripts or even integrate dub as part of them but **silly** is just an another dependency of your project.\n\n### It just works\n\nJust add it as a dependency and that's it. No editing of your project's source code is required. No editing of `dub.json/dub.sdl` except for adding a dependency is required. No changes in your editor config or terminal aliases are required, **silly** just runs with\n```\n$ dub test\n```\n\n### Your choice, your test runner\n\nIt's up to you whether you want to use this test runner or not. Get rid of it just by removing the dependency. It won't break your CI/CD scripts and cause any trouble.\n", + "readmeMarkdown": true, + "docFolder": "" + }, + { + "date": "2018-08-31T09:30:32Z", + "version": "0.5.0", + "commitID": "7ed0de70c3b11c88fa6217f6a00270cf66d788ee", + "info": { + "packageDescriptionFile": "dub.json", + "authors": [ + "Anton Fediushin" + ], + "sourceFiles": [ + "silly.d" + ], + "license": "MIT", + "copyright": "Copyright © 2018, Anton Fediushin", + "name": "silly", + "description": "Better test runner for D", + "homepage": "https://ohboi.gitlab.io/silly/", + "importPaths": [ + "." + ], + "targetType": "sourceLibrary" + }, + "readme": "silly [](https://gitlab.com/ohboi/silly) [](https://gitlab.com/ohboi/silly/commits/master) [](https://gitlab.com/ohboi/silly/commits/master) [](https://gitlab.com/ohboi/silly/blob/master/LICENCE) [](https://gitlab.com/ohboi/silly/tags)\n=====\n\n**silly** is a no-nonsense test runner for the D programming language. Instead of re-inventing the wheel and adding more and more levels of abstraction it just works, requiring as little effort from the programmer as possible.\n\n> Note that project's development happens on the [GitLab](https://gitlab.com/ohboi/silly).\n> GitHub repository is a mirror, it might *not* always be up-to-date.\n\nMake sure to check out project's [homepage](https://ohboi.gitlab.io/silly/) for more information about installation and usage.\n\n## Why?\n\nBuilt-in test runner is not good enough. It does its job, but it doesn't show what tests were executed. It just runs them all stopping on the first failed one. Of course, community offers many different solutions for that problem. Being an overcomplicated projects with thousands lines of code they could make you *less* productive increasing build times and deeply integrating into your project.\n\n**silly** is developed with strict principles in mind.\n\n### Keep It Simple, Silly\n\nFind -> run -> report. That's all there is about test runners. It can't be simpler.\n\n### Less code more better\n\nWriting code is hard, writing useful code is even harder, but writing no code is genius. **silly** is meant to contain no useless code.\n\n### Just a test runner, nothing more\n\nYou won't find anything besides the test runner here. It's not test runner's business to provide you with assertions and other nonsense.\n\n### Don't reinvent the wheel\n\n[dub](https://dub.pm/) is a great tool and there's no reason not to use it. Some other test runners use scripts or even integrate dub as part of them but **silly** is just an another dependency of your project.\n\n### It just works\n\nJust add it as a dependency and that's it. No editing of your project's source code is required. No editing of `dub.json/dub.sdl` except for adding a dependency is required. No changes in your editor config or terminal aliases are required, **silly** just runs with\n```\n$ dub test\n```\n\n### Your choice, your test runner\n\nIt's up to you whether you want to use this test runner or not. Get rid of it just by removing the dependency. It won't break your CI/CD scripts and cause any trouble.\n", + "readmeMarkdown": true, + "docFolder": "" + }, + { + "date": "2018-09-04T17:26:57Z", + "version": "0.6.0", + "commitID": "cc4b7620652d2ebf896f57cde92a53d2ebc240c4", + "info": { + "packageDescriptionFile": "dub.json", + "authors": [ + "Anton Fediushin" + ], + "sourceFiles": [ + "silly.d" + ], + "license": "MIT", + "copyright": "Copyright © 2018, Anton Fediushin", + "name": "silly", + "description": "Better test runner for D", + "homepage": "https://ohboi.gitlab.io/silly/", + "importPaths": [ + "." + ], + "targetType": "sourceLibrary" + }, + "readme": "silly [](https://gitlab.com/ohboi/silly) [](https://gitlab.com/ohboi/silly/commits/master) [](https://gitlab.com/ohboi/silly/commits/master) [](https://gitlab.com/ohboi/silly/blob/master/LICENCE) [](https://gitlab.com/ohboi/silly/tags)\n=====\n\n**silly** is a no-nonsense test runner for the D programming language. Instead of re-inventing the wheel and adding more and more levels of abstraction it just works, requiring as little effort from the programmer as possible.\n\n> Note that project's development happens on the [GitLab](https://gitlab.com/ohboi/silly).\n> GitHub repository is a mirror, it might *not* always be up-to-date.\n\nMake sure to check out project's [homepage](https://ohboi.gitlab.io/silly/) for more information about installation and usage.\n\n## Why?\n\nBuilt-in test runner is not good enough. It does its job, but it doesn't show what tests were executed. It just runs them all stopping on the first failed one. Of course, community offers many different solutions for that problem. Being an overcomplicated projects with thousands lines of code they could make you *less* productive increasing build times and deeply integrating into your project.\n\n**silly** is developed with strict principles in mind.\n\n### Keep It Simple, Silly\n\nFind -> run -> report. That's all there is about test runners. It can't be simpler.\n\n### Less code more better\n\nWriting code is hard, writing useful code is even harder, but writing no code is genius. **silly** is meant to contain no useless code.\n\n### Just a test runner, nothing more\n\nYou won't find anything besides the test runner here. It's not test runner's business to provide you with assertions and other nonsense.\n\n### Don't reinvent the wheel\n\n[dub](https://dub.pm/) is a great tool and there's no reason not to use it. Some other test runners use scripts or even integrate dub as part of them but **silly** is just an another dependency of your project.\n\n### It just works\n\nJust add it as a dependency and that's it. No editing of your project's source code is required. No editing of `dub.json/dub.sdl` except for adding a dependency is required. No changes in your editor config or terminal aliases are required, **silly** just runs with\n```\n$ dub test\n```\n\n### Your choice, your test runner\n\nIt's up to you whether you want to use this test runner or not. Get rid of it just by removing the dependency. It won't break your CI/CD scripts and cause any trouble.\n", + "readmeMarkdown": true, + "docFolder": "" + }, + { + "date": "2018-09-05T20:03:39Z", + "version": "0.7.0-alpha", + "commitID": "96dd1e5407e25a8197987c9cb08a3162aea0fc0c", + "info": { + "packageDescriptionFile": "dub.json", + "authors": [ + "Anton Fediushin" + ], + "sourceFiles": [ + "silly.d" + ], + "license": "MIT", + "copyright": "Copyright © 2018, Anton Fediushin", + "name": "silly", + "description": "Better test runner for D", + "homepage": "https://ohboi.gitlab.io/silly/", + "importPaths": [ + "." + ], + "targetType": "sourceLibrary" + }, + "readme": "silly [](https://gitlab.com/ohboi/silly) [](https://gitlab.com/ohboi/silly/commits/master) [](https://gitlab.com/ohboi/silly/commits/master) [](https://gitlab.com/ohboi/silly/blob/master/LICENCE) [](https://gitlab.com/ohboi/silly/tags)\n=====\n\n**silly** is a no-nonsense test runner for the D programming language. Instead of re-inventing the wheel and adding more and more levels of abstraction it just works, requiring as little effort from the programmer as possible.\n\n> Note that project's development happens on the [GitLab](https://gitlab.com/ohboi/silly).\n> GitHub repository is a mirror, it might *not* always be up-to-date.\n\nMake sure to check out project's [homepage](https://ohboi.gitlab.io/silly/) for more information about installation and usage.\n\n## Why?\n\nBuilt-in test runner is not good enough. It does its job, but it doesn't show what tests were executed. It just runs them all stopping on the first failed one. Of course, community offers many different solutions for that problem. Being an overcomplicated projects with thousands lines of code they could make you *less* productive increasing build times and deeply integrating into your project.\n\n**silly** is developed with strict principles in mind.\n\n### Keep It Simple, Silly\n\nFind -> run -> report. That's all there is about test runners. It can't be simpler.\n\n### Less code more better\n\nWriting code is hard, writing useful code is even harder, but writing no code is genius. **silly** is meant to contain no useless code.\n\n### Just a test runner, nothing more\n\nYou won't find anything besides the test runner here. It's not test runner's business to provide you with assertions and other nonsense.\n\n### Don't reinvent the wheel\n\n[dub](https://dub.pm/) is a great tool and there's no reason not to use it. Some other test runners use scripts or even integrate dub as part of them but **silly** is just an another dependency of your project.\n\n### It just works\n\nJust add it as a dependency and that's it. No editing of your project's source code is required. No editing of `dub.json/dub.sdl` except for adding a dependency is required. No changes in your editor config or terminal aliases are required, **silly** just runs with\n```\n$ dub test\n```\n\n### Your choice, your test runner\n\nIt's up to you whether you want to use this test runner or not. Get rid of it just by removing the dependency. It won't break your CI/CD scripts and cause any trouble.\n", + "readmeMarkdown": true, + "docFolder": "" + }, + { + "date": "2018-09-06T10:30:38Z", + "version": "0.7.0", + "commitID": "931bded68f2d2dd03db2bf55795760344caf85fa", + "info": { + "packageDescriptionFile": "dub.json", + "authors": [ + "Anton Fediushin" + ], + "sourceFiles": [ + "silly.d" + ], + "license": "MIT", + "copyright": "Copyright © 2018, Anton Fediushin", + "name": "silly", + "description": "Better test runner for D", + "homepage": "https://ohboi.gitlab.io/silly/", + "importPaths": [ + "." + ], + "targetType": "sourceLibrary" + }, + "readme": "silly [](https://gitlab.com/ohboi/silly) [](https://gitlab.com/ohboi/silly/commits/master) [](https://gitlab.com/ohboi/silly/commits/master) [](https://gitlab.com/ohboi/silly/blob/master/LICENCE) [](https://gitlab.com/ohboi/silly/tags)\n=====\n\n**silly** is a no-nonsense test runner for the D programming language. Instead of re-inventing the wheel and adding more and more levels of abstraction it just works, requiring as little effort from the programmer as possible.\n\n> Note that project's development happens on the [GitLab](https://gitlab.com/ohboi/silly).\n> GitHub repository is a mirror, it might *not* always be up-to-date.\n\nMake sure to check out project's [homepage](https://ohboi.gitlab.io/silly/) for more information about installation and usage.\n\n## Why?\n\nBuilt-in test runner is not good enough. It does its job, but it doesn't show what tests were executed. It just runs them all stopping on the first failed one. Of course, community offers many different solutions for that problem. Being an overcomplicated projects with thousands lines of code they could make you *less* productive increasing build times and deeply integrating into your project.\n\n**silly** is developed with strict principles in mind.\n\n### Keep It Simple, Silly\n\nFind -> run -> report. That's all there is about test runners. It can't be simpler.\n\n### Less code more better\n\nWriting code is hard, writing useful code is even harder, but writing no code is genius. **silly** is meant to contain no useless code.\n\n### Just a test runner, nothing more\n\nYou won't find anything besides the test runner here. It's not test runner's business to provide you with assertions and other nonsense.\n\n### Don't reinvent the wheel\n\n[dub](https://dub.pm/) is a great tool and there's no reason not to use it. Some other test runners use scripts or even integrate dub as part of them but **silly** is just an another dependency of your project.\n\n### It just works\n\nJust add it as a dependency and that's it. No editing of your project's source code is required. No editing of `dub.json/dub.sdl` except for adding a dependency is required. No changes in your editor config or terminal aliases are required, **silly** just runs with\n```\n$ dub test\n```\n\n### Your choice, your test runner\n\nIt's up to you whether you want to use this test runner or not. Get rid of it just by removing the dependency. It won't break your CI/CD scripts and cause any trouble.\n", + "readmeMarkdown": true, + "docFolder": "" + }, + { + "date": "2018-09-12T09:42:26Z", + "version": "0.7.1", + "commitID": "37a157641867f5f3bd43c64be54733f28a9ea14d", + "info": { + "packageDescriptionFile": "dub.json", + "authors": [ + "Anton Fediushin" + ], + "sourceFiles": [ + "silly.d" + ], + "license": "MIT", + "copyright": "Copyright © 2018, Anton Fediushin", + "name": "silly", + "description": "Better test runner for D", + "homepage": "https://ohboi.gitlab.io/silly/", + "importPaths": [ + "." + ], + "targetType": "sourceLibrary" + }, + "readme": "silly [](https://gitlab.com/ohboi/silly) [](https://gitlab.com/ohboi/silly/commits/master) [](https://gitlab.com/ohboi/silly/commits/master) [](https://gitlab.com/ohboi/silly/blob/master/LICENCE) [](https://gitlab.com/ohboi/silly/tags)\n=====\n\n**silly** is a no-nonsense test runner for the D programming language. Instead of re-inventing the wheel and adding more and more levels of abstraction it just works, requiring as little effort from the programmer as possible.\n\n> Note that project's development happens on the [GitLab](https://gitlab.com/ohboi/silly).\n> GitHub repository is a mirror, it might *not* always be up-to-date.\n\nMake sure to check out project's [homepage](https://ohboi.gitlab.io/silly/) for more information about installation and usage.\n\n## Why?\n\nBuilt-in test runner is not good enough. It does its job, but it doesn't show what tests were executed. It just runs them all stopping on the first failed one. Of course, community offers many different solutions for that problem. Being an overcomplicated projects with thousands lines of code they could make you *less* productive increasing build times and deeply integrating into your project.\n\n**silly** is developed with strict principles in mind.\n\n### Keep It Simple, Silly\n\nFind -> run -> report. That's all there is about test runners. It can't be simpler.\n\n### Less code more better\n\nWriting code is hard, writing useful code is even harder, but writing no code is genius. **silly** is meant to contain no useless code.\n\n### Just a test runner, nothing more\n\nYou won't find anything besides the test runner here. It's not test runner's business to provide you with assertions and other nonsense.\n\n### Don't reinvent the wheel\n\n[dub](https://dub.pm/) is a great tool and there's no reason not to use it. Some other test runners use scripts or even integrate dub as part of them but **silly** is just an another dependency of your project.\n\n### It just works\n\nJust add it as a dependency and that's it. No editing of your project's source code is required. No editing of `dub.json/dub.sdl` except for adding a dependency is required. No changes in your editor config or terminal aliases are required, **silly** just runs with\n```\n$ dub test\n```\n\n### Your choice, your test runner\n\nIt's up to you whether you want to use this test runner or not. Get rid of it just by removing the dependency. It won't break your CI/CD scripts and cause any trouble.\n", + "readmeMarkdown": true, + "docFolder": "" + }, + { + "date": "2018-09-20T10:16:34Z", + "version": "0.8.0", + "commitID": "6357ab77e7329fad47b3e63d4764e3322ab97d40", + "info": { + "packageDescriptionFile": "dub.json", + "authors": [ + "Anton Fediushin" + ], + "sourceFiles": [ + "silly.d" + ], + "license": "MIT", + "copyright": "Copyright © 2018, Anton Fediushin", + "name": "silly", + "description": "Better test runner for D", + "homepage": "https://ohboi.gitlab.io/silly/", + "importPaths": [ + "." + ], + "targetType": "sourceLibrary" + }, + "readme": "silly [](https://gitlab.com/ohboi/silly) [](https://gitlab.com/ohboi/silly/commits/master) [](https://gitlab.com/ohboi/silly/commits/master) [](https://gitlab.com/ohboi/silly/blob/master/LICENCE) [](https://gitlab.com/ohboi/silly/tags)\n=====\n\n**silly** is a no-nonsense test runner for the D programming language. Instead of re-inventing the wheel and adding more and more levels of abstraction it just works, requiring as little effort from the programmer as possible.\n\n> Note that project's development happens on the [GitLab](https://gitlab.com/ohboi/silly).\n> GitHub repository is a mirror, it might *not* always be up-to-date.\n\nMake sure to check out project's [homepage](https://ohboi.gitlab.io/silly/) for more information about installation and usage.\n\n## Why?\n\nBuilt-in test runner is not good enough. It does its job, but it doesn't show what tests were executed. It just runs them all stopping on the first failed one. Of course, community offers many different solutions for that problem. Being an overcomplicated projects with thousands lines of code they could make you *less* productive increasing build times and deeply integrating into your project.\n\n**silly** is developed with strict principles in mind.\n\n### Keep It Simple, Silly\n\nFind -> run -> report. That's all there is about test runners. It can't be simpler.\n\n### Less code more better\n\nWriting code is hard, writing useful code is even harder, but writing no code is genius. **silly** is meant to contain no useless code.\n\n### Just a test runner, nothing more\n\nYou won't find anything besides the test runner here. It's not test runner's business to provide you with assertions and other nonsense.\n\n### Don't reinvent the wheel\n\n[dub](https://dub.pm/) is a great tool and there's no reason not to use it. Some other test runners use scripts or even integrate dub as part of them but **silly** is just an another dependency of your project.\n\n### It just works\n\nJust add it as a dependency and that's it. No editing of your project's source code is required. No editing of `dub.json/dub.sdl` except for adding a dependency is required. No changes in your editor config or terminal aliases are required, **silly** just runs with\n```\n$ dub test\n```\n\n### Your choice, your test runner\n\nIt's up to you whether you want to use this test runner or not. Get rid of it just by removing the dependency. It won't break your CI/CD scripts and cause any trouble.\n", + "readmeMarkdown": true, + "docFolder": "" + }, + { + "date": "2019-03-17T12:58:17Z", + "version": "0.8.1", + "commitID": "78b19c8ca06cec4d3df1da95c31d6f3c8973843b", + "info": { + "packageDescriptionFile": "dub.json", + "authors": [ + "Anton Fediushin" + ], + "sourceFiles": [ + "silly.d" + ], + "license": "MIT", + "copyright": "Copyright © 2018, Anton Fediushin", + "name": "silly", + "description": "Better test runner for D", + "homepage": "https://ohboi.gitlab.io/silly/", + "importPaths": [ + "." + ], + "targetType": "sourceLibrary" + }, + "readme": "silly [](https://gitlab.com/AntonMeep/silly) [](https://gitlab.com/AntonMeep/silly/commits/master) [](https://gitlab.com/AntonMeep/silly/commits/master) [](https://gitlab.com/AntonMeep/silly/blob/master/LICENCE) [](https://gitlab.com/AntonMeep/silly/tags)\n=====\n\n**silly** is a no-nonsense test runner for the D programming language. Instead of re-inventing the wheel and adding more and more levels of abstraction it just works, requiring as little effort from the programmer as possible.\n\n> Note that project's development happens on the [GitLab](https://gitlab.com/AntonMeep/silly).\n> GitHub repository is a mirror, it might *not* always be up-to-date.\n\nMake sure to check out project's [homepage](https://antonmeep.gitlab.io/silly/) for more information about installation and usage.\n\n## Why?\n\nBuilt-in test runner is not good enough. It does its job, but it doesn't show what tests were executed. It just runs them all stopping on the first failed one. Of course, community offers many different solutions for that problem. Being an overcomplicated projects with thousands lines of code they could make you *less* productive increasing build times and deeply integrating into your project.\n\n**silly** is developed with strict principles in mind.\n\n### Keep It Simple, Silly\n\nFind -> run -> report. That's all there is about test runners. It can't be simpler.\n\n### Less code more better\n\nWriting code is hard, writing useful code is even harder, but writing no code is genius. **silly** is meant to contain no useless code.\n\n### Just a test runner, nothing more\n\nYou won't find anything besides the test runner here. It's not test runner's business to provide you with assertions and other nonsense.\n\n### Don't reinvent the wheel\n\n[dub](https://dub.pm/) is a great tool and there's no reason not to use it. Some other test runners use scripts or even integrate dub as part of them but **silly** is just an another dependency of your project.\n\n### It just works\n\nJust add it as a dependency and that's it. No editing of your project's source code is required. No editing of `dub.json/dub.sdl` except for adding a dependency is required. No changes in your editor config or terminal aliases are required, **silly** just runs with\n```\n$ dub test\n```\n\n### Your choice, your test runner\n\nIt's up to you whether you want to use this test runner or not. Get rid of it just by removing the dependency. It won't break your CI/CD scripts and cause any trouble.\n", + "readmeMarkdown": true, + "docFolder": "" + }, + { + "date": "2019-03-17T13:09:35Z", + "version": "0.8.2", + "commitID": "771c6fec3ab56890f14c3a4bd19848584adfa803", + "info": { + "packageDescriptionFile": "dub.json", + "authors": [ + "Anton Fediushin" + ], + "sourceFiles": [ + "silly.d" + ], + "license": "MIT", + "copyright": "Copyright © 2018, Anton Fediushin", + "name": "silly", + "description": "Better test runner for D", + "homepage": "https://ohboi.gitlab.io/silly/", + "importPaths": [ + "." + ], + "targetType": "sourceLibrary" + }, + "readme": "silly [](https://gitlab.com/AntonMeep/silly) [](https://gitlab.com/AntonMeep/silly/commits/master) [](https://gitlab.com/AntonMeep/silly/commits/master) [](https://gitlab.com/AntonMeep/silly/blob/master/LICENCE) [](https://gitlab.com/AntonMeep/silly/tags)\n=====\n\n**silly** is a no-nonsense test runner for the D programming language. Instead of re-inventing the wheel and adding more and more levels of abstraction it just works, requiring as little effort from the programmer as possible.\n\n> Note that project's development happens on the [GitLab](https://gitlab.com/AntonMeep/silly).\n> GitHub repository is a mirror, it might *not* always be up-to-date.\n\nMake sure to check out project's [homepage](https://antonmeep.gitlab.io/silly/) for more information about installation and usage.\n\n## Why?\n\nBuilt-in test runner is not good enough. It does its job, but it doesn't show what tests were executed. It just runs them all stopping on the first failed one. Of course, community offers many different solutions for that problem. Being an overcomplicated projects with thousands lines of code they could make you *less* productive increasing build times and deeply integrating into your project.\n\n**silly** is developed with strict principles in mind.\n\n### Keep It Simple, Silly\n\nFind -> run -> report. That's all there is about test runners. It can't be simpler.\n\n### Less code more better\n\nWriting code is hard, writing useful code is even harder, but writing no code is genius. **silly** is meant to contain no useless code.\n\n### Just a test runner, nothing more\n\nYou won't find anything besides the test runner here. It's not test runner's business to provide you with assertions and other nonsense.\n\n### Don't reinvent the wheel\n\n[dub](https://dub.pm/) is a great tool and there's no reason not to use it. Some other test runners use scripts or even integrate dub as part of them but **silly** is just an another dependency of your project.\n\n### It just works\n\nJust add it as a dependency and that's it. No editing of your project's source code is required. No editing of `dub.json/dub.sdl` except for adding a dependency is required. No changes in your editor config or terminal aliases are required, **silly** just runs with\n```\n$ dub test\n```\n\n### Your choice, your test runner\n\nIt's up to you whether you want to use this test runner or not. Get rid of it just by removing the dependency. It won't break your CI/CD scripts and cause any trouble.\n", + "readmeMarkdown": true, + "docFolder": "" + }, + { + "date": "2019-11-24T07:42:59Z", + "version": "1.0.0", + "commitID": "2d5072cb84b25ff6a471f1234596af53bc139fc9", + "info": { + "packageDescriptionFile": "dub.json", + "authors": [ + "Anton Fediushin" + ], + "sourceFiles": [ + "silly.d" + ], + "license": "ISC", + "copyright": "Copyright © 2018-2019, Anton Fediushin", + "name": "silly", + "description": "Better test runner for D", + "importPaths": [ + "." + ], + "targetType": "sourceLibrary" + }, + "readme": "silly [](https://gitlab.com/AntonMeep/silly) [](https://gitlab.com/AntonMeep/silly/commits/master) [](https://gitlab.com/AntonMeep/silly/commits/master) [](https://gitlab.com/AntonMeep/silly/blob/master/LICENSE) [](https://gitlab.com/AntonMeep/silly/tags)\n=====\n\n**silly** is a modern and light test runner for the D programming language.\n\n# Used by\n\n[Optional](http://optional.dub.pm/), [expected](http://expected.dub.pm/), [ddash](http://ddash.dub.pm/), and more!\n\n> Got a cool project that uses **silly**? [Let us know!](https://gitlab.com/AntonMeep/silly/issues)\n\n# Features\n\n- Easy to install and use with dub\n- No changes of your code are required to start using silly\n- Seamless integration with `dub test`\n- Named tests\n- Multi-threaded test execution\n- Filtering tests\n- Colourful output\n\n# Getting started\n\nAdd **silly** to your project:\n\n```\n$ dub add silly\n```\n\nThis should be it! Try to run tests:\n\n```\n$ dub test\n```\n\nIf it succeeded then congratulations, you have just finished setting up **silly**! Make sure to add more tests and give them nice names.\n\n# Troubleshooting\n\nUnfortunately, setup isn't that easy sometimes and running `dub test` will fail. Don't panic, most of the issues are caused by the quirks and twists of dub. Here are some suggestions on what to check first:\n\n## Make sure `main()` function isn't defined when built in `unittest` mode\n\nSo, instead of this:\n```d\nvoid main() {\n\n}\n```\n\nDo this:\n```d\nversion(unittest) {\n\t// Do nothing here, dub takes care of that\n} else {\n\tvoid main() {\n\n\t}\n}\n```\n\n## Make sure there is no `targetType: executable` in `unittest` configuration in your dub.json/dub.sdl\n\nInstead of this:\n\n```json\n{\n\t...\n\t\"configurations\": [\n\t\t...\n\t\t{\n\t\t\t\"name\": \"unittest\",\n\t\t\t\"targetType\": \"executable\",\n\t\t\t...\n\t\t}\n\t]\n}\n```\n\nDo this:\n\n```json\n{\n\t...\n\t\"configurations\": [\n\t\t...\n\t\t{\n\t\t\t\"name\": \"unittest\",\n\t\t\t...\n\t\t}\n\t]\n}\n```\n\nSee [#12](https://gitlab.com/AntonMeep/silly/issues/12) for more information.\n\n## Nothing helped?\n\nOpen a new [issue](https://gitlab.com/AntonMeep/silly/issues), we will be happy to help you!\n\n# Naming tests\n\nIt is as easy as adding a `string` [user-defined attribute](https://dlang.org/spec/attribute.html#UserDefinedAttribute) to your `unittest` declaration.\n\n```d\n@(\"Johny\")\nunittest {\n\t// This unittest is named Johny\n}\n```\n\nIf there are multiple such UDAs, the first one is chosen to be the name of the unittest.\n\n```d\n@(\"Hello, \") @(\"World!\")\nunittest {\n\t// This unittest's name is \"Hello, \"\n}\n```\n\n# Command line options\n\n**Silly** accept various command-line options that let you customize its behaviour:\n\n```\n$ dub test -- <options>\n\nOptions:\n --no-colours Disable colours\n -t <n> --threads <n> Number of worker threads. 0 to auto-detect (default)\n -i <regexp> --include <regexp> Run tests if their name matches specified regular expression. See filtering tests\n -e <regexp> --exclude <regexp> Skip tests if their name matches specified regular expression. See filtering tests\n -v --verbose Show verbose output (full stack traces and durations)\n -h --help Help information\n```\n\n# Filtering tests\n\nWith `--include` and `--exclude` options it's possible to control what tests will be run. These options take regular expressions in [std.regex'](https://dlang.org/phobos/std_regex.html#Syntax%20and%20general%20information) format.\n\n`--include` only tests that match provided regular expression will be run, other tests will be skipped.\n`--exclude` all of the tests that don't match provided regular expression will be run.\n\n> Using both options at the same time will produce unexpected results!\n", + "readmeMarkdown": true, + "docFolder": "" + }, + { + "date": "2020-01-06T10:47:54Z", + "version": "1.0.1", + "commitID": "b0970cf62ba7d9d8f4e9bd70a2635f72523d8c23", + "info": { + "packageDescriptionFile": "dub.json", + "authors": [ + "Anton Fediushin" + ], + "sourceFiles": [ + "silly.d" + ], + "license": "ISC", + "copyright": "Copyright © 2018-2019, Anton Fediushin", + "name": "silly", + "description": "Better test runner for D", + "importPaths": [ + "." + ], + "targetType": "sourceLibrary" + }, + "readme": "silly [](https://gitlab.com/AntonMeep/silly) [](https://gitlab.com/AntonMeep/silly/commits/master) [](https://gitlab.com/AntonMeep/silly/commits/master) [](https://gitlab.com/AntonMeep/silly/blob/master/LICENSE) [](https://gitlab.com/AntonMeep/silly/tags)\n=====\n\n**silly** is a modern and light test runner for the D programming language.\n\n# Used by\n\n[Optional](http://optional.dub.pm/), [expected](http://expected.dub.pm/), [ddash](http://ddash.dub.pm/), and more!\n\n> Got a cool project that uses **silly**? [Let us know!](https://gitlab.com/AntonMeep/silly/issues)\n\n# Features\n\n- Easy to install and use with dub\n- No changes of your code are required to start using silly\n- Seamless integration with `dub test`\n- Named tests\n- Multi-threaded test execution\n- Filtering tests\n- Colourful output\n\n# Getting started\n\nAdd **silly** to your project:\n\n```\n$ dub add silly\n```\n\nThis should be it! Try to run tests:\n\n```\n$ dub test\n```\n\nIf it succeeded then congratulations, you have just finished setting up **silly**! Make sure to add more tests and give them nice names.\n\n# Troubleshooting\n\nUnfortunately, setup isn't that easy sometimes and running `dub test` will fail. Don't panic, most of the issues are caused by the quirks and twists of dub. Here are some suggestions on what to check first:\n\n## Make sure `main()` function isn't defined when built in `unittest` mode\n\nSo, instead of this:\n```d\nvoid main() {\n\n}\n```\n\nDo this:\n```d\nversion(unittest) {\n\t// Do nothing here, dub takes care of that\n} else {\n\tvoid main() {\n\n\t}\n}\n```\n\n## Make sure there is no `targetType: executable` in `unittest` configuration in your dub.json/dub.sdl\n\nInstead of this:\n\n```json\n{\n\t...\n\t\"configurations\": [\n\t\t...\n\t\t{\n\t\t\t\"name\": \"unittest\",\n\t\t\t\"targetType\": \"executable\",\n\t\t\t...\n\t\t}\n\t]\n}\n```\n\nDo this:\n\n```json\n{\n\t...\n\t\"configurations\": [\n\t\t...\n\t\t{\n\t\t\t\"name\": \"unittest\",\n\t\t\t...\n\t\t}\n\t]\n}\n```\n\nSee [#12](https://gitlab.com/AntonMeep/silly/issues/12) for more information.\n\n## Nothing helped?\n\nOpen a new [issue](https://gitlab.com/AntonMeep/silly/issues), we will be happy to help you!\n\n# Naming tests\n\nIt is as easy as adding a `string` [user-defined attribute](https://dlang.org/spec/attribute.html#UserDefinedAttribute) to your `unittest` declaration.\n\n```d\n@(\"Johny\")\nunittest {\n\t// This unittest is named Johny\n}\n```\n\nIf there are multiple such UDAs, the first one is chosen to be the name of the unittest.\n\n```d\n@(\"Hello, \") @(\"World!\")\nunittest {\n\t// This unittest's name is \"Hello, \"\n}\n```\n\n# Command line options\n\n**Silly** accept various command-line options that let you customize its behaviour:\n\n```\n$ dub test -- <options>\n\nOptions:\n --no-colours Disable colours\n -t <n> --threads <n> Number of worker threads. 0 to auto-detect (default)\n -i <regexp> --include <regexp> Run tests if their name matches specified regular expression. See filtering tests\n -e <regexp> --exclude <regexp> Skip tests if their name matches specified regular expression. See filtering tests\n -v --verbose Show verbose output (full stack traces and durations)\n -h --help Help information\n```\n\n# Filtering tests\n\nWith `--include` and `--exclude` options it's possible to control what tests will be run. These options take regular expressions in [std.regex'](https://dlang.org/phobos/std_regex.html#Syntax%20and%20general%20information) format.\n\n`--include` only tests that match provided regular expression will be run, other tests will be skipped.\n`--exclude` all of the tests that don't match provided regular expression will be run.\n\n> Using both options at the same time will produce unexpected results!\n", + "readmeMarkdown": true, + "docFolder": "" + }, + { + "date": "2020-02-03T16:04:04Z", + "version": "1.0.2", + "commitID": "01b7e5558f644e1c310be84b5890454bb0ccb61c", + "info": { + "packageDescriptionFile": "dub.json", + "authors": [ + "Anton Fediushin" + ], + "sourceFiles": [ + "silly.d" + ], + "license": "ISC", + "copyright": "Copyright © 2018-2019, Anton Fediushin", + "name": "silly", + "description": "Better test runner for D", + "importPaths": [ + "." + ], + "targetType": "sourceLibrary" + }, + "readme": "silly [](https://gitlab.com/AntonMeep/silly) [](https://gitlab.com/AntonMeep/silly/commits/master) [](https://gitlab.com/AntonMeep/silly/commits/master) [](https://gitlab.com/AntonMeep/silly/blob/master/LICENSE) [](https://gitlab.com/AntonMeep/silly/tags)\n=====\n\n**silly** is a modern and light test runner for the D programming language.\n\n# Used by\n\n[Optional](http://optional.dub.pm/), [expected](http://expected.dub.pm/), [ddash](http://ddash.dub.pm/), and more!\n\n> Got a cool project that uses **silly**? [Let us know!](https://gitlab.com/AntonMeep/silly/issues)\n\n# Features\n\n- Easy to install and use with dub\n- No changes of your code are required to start using silly\n- Seamless integration with `dub test`\n- Named tests\n- Multi-threaded test execution\n- Filtering tests\n- Colourful output\n\n# Getting started\n\nAdd **silly** to your project:\n\n```\n$ dub add silly\n```\n\nThis should be it! Try to run tests:\n\n```\n$ dub test\n```\n\nIf it succeeded then congratulations, you have just finished setting up **silly**! Make sure to add more tests and give them nice names.\n\n# Troubleshooting\n\nUnfortunately, setup isn't that easy sometimes and running `dub test` will fail. Don't panic, most of the issues are caused by the quirks and twists of dub. Here are some suggestions on what to check first:\n\n## Make sure `main()` function isn't defined when built in `unittest` mode\n\nSo, instead of this:\n```d\nvoid main() {\n\n}\n```\n\nDo this:\n```d\nversion(unittest) {\n\t// Do nothing here, dub takes care of that\n} else {\n\tvoid main() {\n\n\t}\n}\n```\n\n## Make sure there is no `targetType: executable` in `unittest` configuration in your dub.json/dub.sdl\n\nInstead of this:\n\n```json\n{\n\t...\n\t\"configurations\": [\n\t\t...\n\t\t{\n\t\t\t\"name\": \"unittest\",\n\t\t\t\"targetType\": \"executable\",\n\t\t\t...\n\t\t}\n\t]\n}\n```\n\nDo this:\n\n```json\n{\n\t...\n\t\"configurations\": [\n\t\t...\n\t\t{\n\t\t\t\"name\": \"unittest\",\n\t\t\t...\n\t\t}\n\t]\n}\n```\n\nSee [#12](https://gitlab.com/AntonMeep/silly/issues/12) for more information.\n\n## Nothing helped?\n\nOpen a new [issue](https://gitlab.com/AntonMeep/silly/issues), we will be happy to help you!\n\n# Naming tests\n\nIt is as easy as adding a `string` [user-defined attribute](https://dlang.org/spec/attribute.html#UserDefinedAttribute) to your `unittest` declaration.\n\n```d\n@(\"Johny\")\nunittest {\n\t// This unittest is named Johny\n}\n```\n\nIf there are multiple such UDAs, the first one is chosen to be the name of the unittest.\n\n```d\n@(\"Hello, \") @(\"World!\")\nunittest {\n\t// This unittest's name is \"Hello, \"\n}\n```\n\n# Command line options\n\n**Silly** accept various command-line options that let you customize its behaviour:\n\n```\n$ dub test -- <options>\n\nOptions:\n --no-colours Disable colours\n -t <n> --threads <n> Number of worker threads. 0 to auto-detect (default)\n -i <regexp> --include <regexp> Run tests if their name matches specified regular expression. See filtering tests\n -e <regexp> --exclude <regexp> Skip tests if their name matches specified regular expression. See filtering tests\n -v --verbose Show verbose output (full stack traces and durations)\n -h --help Help information\n```\n\n# Filtering tests\n\nWith `--include` and `--exclude` options it's possible to control what tests will be run. These options take regular expressions in [std.regex'](https://dlang.org/phobos/std_regex.html#Syntax%20and%20general%20information) format.\n\n`--include` only tests that match provided regular expression will be run, other tests will be skipped.\n`--exclude` all of the tests that don't match provided regular expression will be run.\n\n> Using both options at the same time will produce unexpected results!\n", + "readmeMarkdown": true, + "docFolder": "" + }, + { + "date": "2020-06-20T08:03:06Z", + "version": "1.1.0", + "commitID": "7cf73242665d006d4a7267a9fa14490db5532f6a", + "info": { + "packageDescriptionFile": "dub.json", + "authors": [ + "Anton Fediushin" + ], + "sourceFiles": [ + "silly.d" + ], + "license": "ISC", + "copyright": "Copyright © 2018-2019, Anton Fediushin", + "name": "silly", + "description": "Better test runner for D", + "importPaths": [ + "." + ], + "targetType": "sourceLibrary" + }, + "readme": "silly [](https://gitlab.com/AntonMeep/silly) [](https://gitlab.com/AntonMeep/silly/commits/master) [](https://gitlab.com/AntonMeep/silly/commits/master) [](https://gitlab.com/AntonMeep/silly/blob/master/LICENSE) [](https://gitlab.com/AntonMeep/silly/tags)\n=====\n\n**silly** is a modern and light test runner for the D programming language.\n\n# Used by\n\n[Optional](http://optional.dub.pm/), [expected](http://expected.dub.pm/), [ddash](http://ddash.dub.pm/), and more!\n\n> Got a cool project that uses **silly**? [Let us know!](https://gitlab.com/AntonMeep/silly/issues)\n\n# Features\n\n- Easy to install and use with dub\n- No changes of your code are required to start using silly\n- Seamless integration with `dub test`\n- Named tests\n- Multi-threaded test execution\n- Filtering tests\n- Colourful output\n\n# Getting started\n\nAdd **silly** to your project:\n\n```\n$ dub add silly\n```\n\nThis should be it! Try to run tests:\n\n```\n$ dub test\n```\n\nIf it succeeded then congratulations, you have just finished setting up **silly**! Make sure to add more tests and give them nice names.\n\n# Troubleshooting\n\nUnfortunately, setup isn't that easy sometimes and running `dub test` will fail. Don't panic, most of the issues are caused by the quirks and twists of dub. Here are some suggestions on what to check first:\n\n## Make sure `main()` function isn't defined when built in `unittest` mode\n\nSo, instead of this:\n```d\nvoid main() {\n\n}\n```\n\nDo this:\n```d\nversion(unittest) {\n\t// Do nothing here, dub takes care of that\n} else {\n\tvoid main() {\n\n\t}\n}\n```\n\n## Make sure there is a special `unittest` configuration in your dub.json/dub.sdl\n\n```json\n{\n ...\n\t\"configurations\": [\n\t\t{\n\t\t\t\"name\": \"executable\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"unittest\"\n\t\t}\n\t]\n}\n```\n\nSee also [#32](https://gitlab.com/AntonMeep/silly/issues/32).\n\n> **Pro Tip**: dub configurations can have `dependencies` as well! You may want to add silly as a dependency only for the `unittest` configuration to indicate that it's only used for tests.\n\n## Make sure there is no `targetType: executable` in `unittest` configuration in your dub.json/dub.sdl\n\nInstead of this:\n\n```json\n{\n\t...\n\t\"configurations\": [\n\t\t...\n\t\t{\n\t\t\t\"name\": \"unittest\",\n\t\t\t\"targetType\": \"executable\",\n\t\t\t...\n\t\t}\n\t]\n}\n```\n\nDo this:\n\n```json\n{\n\t...\n\t\"configurations\": [\n\t\t...\n\t\t{\n\t\t\t\"name\": \"unittest\",\n\t\t\t...\n\t\t}\n\t]\n}\n```\n\nSee [#12](https://gitlab.com/AntonMeep/silly/issues/12) for more information.\n\n## Nothing helped?\n\nOpen a new [issue](https://gitlab.com/AntonMeep/silly/issues), we will be happy to help you!\n\n# Naming tests\n\nIt is as easy as adding a `string` [user-defined attribute](https://dlang.org/spec/attribute.html#UserDefinedAttribute) to your `unittest` declaration.\n\n```d\n@(\"Johny\")\nunittest {\n\t// This unittest is named Johny\n}\n```\n\nIf there are multiple such UDAs, the first one is chosen to be the name of the unittest.\n\n```d\n@(\"Hello, \") @(\"World!\")\nunittest {\n\t// This unittest's name is \"Hello, \"\n}\n```\n\n# Command line options\n\n**Silly** accept various command-line options that let you customize its behaviour:\n\n```\n$ dub test -- <options>\n\nOptions:\n --no-colours Disable colours\n -t <n> --threads <n> Number of worker threads. 0 to auto-detect (default)\n -i <regexp> --include <regexp> Run tests if their name matches specified regular expression. See filtering tests\n -e <regexp> --exclude <regexp> Skip tests if their name matches specified regular expression. See filtering tests\n -v --verbose Show verbose output (full stack traces, location and durations)\n -h --help Help information\n```\n\n# Filtering tests\n\nWith `--include` and `--exclude` options it's possible to control what tests will be run. These options take regular expressions in [std.regex'](https://dlang.org/phobos/std_regex.html#Syntax%20and%20general%20information) format.\n\n`--include` only tests that match provided regular expression will be run, other tests will be skipped.\n`--exclude` all of the tests that don't match provided regular expression will be run.\n\n> Using both options at the same time will produce unexpected results!\n", + "readmeMarkdown": true, + "docFolder": "" + }, + { + "date": "2020-12-27T19:00:48Z", + "version": "1.1.1", + "commitID": "9c7743d73b7dae6c7ec841fe719d0a04a99096b9", + "info": { + "packageDescriptionFile": "dub.json", + "authors": [ + "Anton Fediushin" + ], + "sourceFiles": [ + "silly.d" + ], + "license": "ISC", + "copyright": "Copyright © 2018-2019, Anton Fediushin", + "name": "silly", + "description": "Better test runner for D", + "importPaths": [ + "." + ], + "targetType": "sourceLibrary" + }, + "readme": "silly [](https://gitlab.com/AntonMeep/silly) [](https://gitlab.com/AntonMeep/silly/commits/master) [](https://gitlab.com/AntonMeep/silly/commits/master) [](https://gitlab.com/AntonMeep/silly/blob/master/LICENSE) [](https://gitlab.com/AntonMeep/silly/tags)\n=====\n\n**silly** is a modern and light test runner for the D programming language.\n\n# Used by\n\n[Optional](http://optional.dub.pm/), [expected](http://expected.dub.pm/), [ddash](http://ddash.dub.pm/), and more!\n\n> Got a cool project that uses **silly**? [Let us know!](https://gitlab.com/AntonMeep/silly/issues)\n\n# Features\n\n- Easy to install and use with dub\n- No changes of your code are required to start using silly\n- Seamless integration with `dub test`\n- Named tests\n- Multi-threaded test execution\n- Filtering tests\n- Colourful output\n\n# Getting started\n\nAdd **silly** to your project:\n\n```\n$ dub add silly\n```\n\nThis should be it! Try to run tests:\n\n```\n$ dub test\n```\n\nIf it succeeded then congratulations, you have just finished setting up **silly**! Make sure to add more tests and give them nice names.\n\n# Troubleshooting\n\nUnfortunately, setup isn't that easy sometimes and running `dub test` will fail. Don't panic, most of the issues are caused by the quirks and twists of dub. Here are some suggestions on what to check first:\n\n## Make sure `main()` function isn't defined when built in `unittest` mode\n\nSo, instead of this:\n```d\nvoid main() {\n\n}\n```\n\nDo this:\n```d\nversion(unittest) {\n\t// Do nothing here, dub takes care of that\n} else {\n\tvoid main() {\n\n\t}\n}\n```\n\n## Make sure there is a special `unittest` configuration in your dub.json/dub.sdl\n\n```json\n{\n ...\n\t\"configurations\": [\n\t\t{\n\t\t\t\"name\": \"executable\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"unittest\"\n\t\t}\n\t]\n}\n```\n\nSee also [#32](https://gitlab.com/AntonMeep/silly/issues/32).\n\n> **Pro Tip**: dub configurations can have `dependencies` as well! You may want to add silly as a dependency only for the `unittest` configuration to indicate that it's only used for tests.\n\n## Make sure there is no `targetType: executable` in `unittest` configuration in your dub.json/dub.sdl\n\nInstead of this:\n\n```json\n{\n\t...\n\t\"configurations\": [\n\t\t...\n\t\t{\n\t\t\t\"name\": \"unittest\",\n\t\t\t\"targetType\": \"executable\",\n\t\t\t...\n\t\t}\n\t]\n}\n```\n\nDo this:\n\n```json\n{\n\t...\n\t\"configurations\": [\n\t\t...\n\t\t{\n\t\t\t\"name\": \"unittest\",\n\t\t\t...\n\t\t}\n\t]\n}\n```\n\nSee [#12](https://gitlab.com/AntonMeep/silly/issues/12) for more information.\n\n## Nothing helped?\n\nOpen a new [issue](https://gitlab.com/AntonMeep/silly/issues), we will be happy to help you!\n\n# Naming tests\n\nIt is as easy as adding a `string` [user-defined attribute](https://dlang.org/spec/attribute.html#UserDefinedAttribute) to your `unittest` declaration.\n\n```d\n@(\"Johny\")\nunittest {\n\t// This unittest is named Johny\n}\n```\n\nIf there are multiple such UDAs, the first one is chosen to be the name of the unittest.\n\n```d\n@(\"Hello, \") @(\"World!\")\nunittest {\n\t// This unittest's name is \"Hello, \"\n}\n```\n\n# Command line options\n\n**Silly** accept various command-line options that let you customize its behaviour:\n\n```\n$ dub test -- <options>\n\nOptions:\n --no-colours Disable colours\n -t <n> --threads <n> Number of worker threads. 0 to auto-detect (default)\n -i <regexp> --include <regexp> Run tests if their name matches specified regular expression. See filtering tests\n -e <regexp> --exclude <regexp> Skip tests if their name matches specified regular expression. See filtering tests\n -v --verbose Show verbose output (full stack traces, location and durations)\n -h --help Help information\n```\n\n# Filtering tests\n\nWith `--include` and `--exclude` options it's possible to control what tests will be run. These options take regular expressions in [std.regex'](https://dlang.org/phobos/std_regex.html#Syntax%20and%20general%20information) format.\n\n`--include` only tests that match provided regular expression will be run, other tests will be skipped.\n`--exclude` all of the tests that don't match provided regular expression will be run.\n\n> Using both options at the same time will produce unexpected results!\n", + "readmeMarkdown": true, + "docFolder": "" + }, + { + "date": "2021-06-19T08:15:10Z", + "version": "1.2.0-dev.1", + "commitID": "b2f89e90a90d7ea5214ef4a26ee11e7e6163b611", + "info": { + "packageDescriptionFile": "dub.json", + "authors": [ + "Anton Fediushin" + ], + "sourceFiles": [ + "silly.d" + ], + "license": "ISC", + "copyright": "Copyright © 2018-2019, Anton Fediushin", + "name": "silly", + "description": "Better test runner for D", + "importPaths": [ + "." + ], + "targetType": "sourceLibrary" + }, + "readme": "silly [](https://gitlab.com/AntonMeep/silly) [](https://gitlab.com/AntonMeep/silly/commits/master) [](https://gitlab.com/AntonMeep/silly/commits/master) [](https://gitlab.com/AntonMeep/silly/blob/master/LICENSE) [](https://gitlab.com/AntonMeep/silly/tags)\n=====\n\n**silly** is a modern and light test runner for the D programming language.\n\n# Used by\n\n[Optional](http://optional.dub.pm/), [expected](http://expected.dub.pm/), [ddash](http://ddash.dub.pm/), and more!\n\n> Got a cool project that uses **silly**? [Let us know!](https://gitlab.com/AntonMeep/silly/issues)\n\n# Features\n\n- Easy to install and use with dub\n- No changes of your code are required to start using silly\n- Seamless integration with `dub test`\n- Named tests\n- Multi-threaded test execution\n- Filtering tests\n- Colourful output\n\n# Getting started\n\nAdd **silly** to your project:\n\n```\n$ dub add silly\n```\n\nThis should be it! Try to run tests:\n\n```\n$ dub test\n```\n\nIf it succeeded then congratulations, you have just finished setting up **silly**! Make sure to add more tests and give them nice names.\n\n# Troubleshooting\n\nUnfortunately, setup isn't that easy sometimes and running `dub test` will fail. Don't panic, most of the issues are caused by the quirks and twists of dub. Here are some suggestions on what to check first:\n\n## Make sure `main()` function isn't defined when built in `unittest` mode\n\nSo, instead of this:\n```d\nvoid main() {\n\n}\n```\n\nDo this:\n```d\nversion(unittest) {\n\t// Do nothing here, dub takes care of that\n} else {\n\tvoid main() {\n\n\t}\n}\n```\n\n## Make sure there is a special `unittest` configuration in your dub.json/dub.sdl\n\n```json\n{\n ...\n\t\"configurations\": [\n\t\t{\n\t\t\t\"name\": \"executable\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"unittest\"\n\t\t}\n\t]\n}\n```\n\nSee also [#32](https://gitlab.com/AntonMeep/silly/issues/32).\n\n> **Pro Tip**: dub configurations can have `dependencies` as well! You may want to add silly as a dependency only for the `unittest` configuration to indicate that it's only used for tests.\n\n## Make sure there is no `targetType: executable` in `unittest` configuration in your dub.json/dub.sdl\n\nInstead of this:\n\n```json\n{\n\t...\n\t\"configurations\": [\n\t\t...\n\t\t{\n\t\t\t\"name\": \"unittest\",\n\t\t\t\"targetType\": \"executable\",\n\t\t\t...\n\t\t}\n\t]\n}\n```\n\nDo this:\n\n```json\n{\n\t...\n\t\"configurations\": [\n\t\t...\n\t\t{\n\t\t\t\"name\": \"unittest\",\n\t\t\t...\n\t\t}\n\t]\n}\n```\n\nSee [#12](https://gitlab.com/AntonMeep/silly/issues/12) for more information.\n\n## Nothing helped?\n\nOpen a new [issue](https://gitlab.com/AntonMeep/silly/issues), we will be happy to help you!\n\n# Naming tests\n\nIt is as easy as adding a `string` [user-defined attribute](https://dlang.org/spec/attribute.html#UserDefinedAttribute) to your `unittest` declaration.\n\n```d\n@(\"Johny\")\nunittest {\n\t// This unittest is named Johny\n}\n```\n\nIf there are multiple such UDAs, the first one is chosen to be the name of the unittest.\n\n```d\n@(\"Hello, \") @(\"World!\")\nunittest {\n\t// This unittest's name is \"Hello, \"\n}\n```\n\n# Command line options\n\n**Silly** accept various command-line options that let you customize its behaviour:\n\n```\n$ dub test -- <options>\n\nOptions:\n --no-colours Disable colours\n -t <n> --threads <n> Number of worker threads. 0 to auto-detect (default)\n -i <regexp> --include <regexp> Run tests if their name matches specified regular expression. See filtering tests\n -e <regexp> --exclude <regexp> Skip tests if their name matches specified regular expression. See filtering tests\n --fail-fast Stop executing all tests when a test fails\n -v --verbose Show verbose output (full stack traces, location and durations)\n -h --help Help information\n```\n\n# Filtering tests\n\nWith `--include` and `--exclude` options it's possible to control what tests will be run. These options take regular expressions in [std.regex'](https://dlang.org/phobos/std_regex.html#Syntax%20and%20general%20information) format.\n\n`--include` only tests that match provided regular expression will be run, other tests will be skipped.\n`--exclude` all of the tests that don't match provided regular expression will be run.\n\n> Using both options at the same time will produce unexpected results!\n\n# Best practices\n\n- Running tests in multi-threaded mode (default) can potentially cause issues, try running tests with `--threads 1`\n- Although unittests inside of nested classes and structs are discovered and executed by Silly, it may be unreliable. Consider having unittest blocks on the toplevel\n\n", + "readmeMarkdown": true, + "docFolder": "" + }, + { + "date": "2022-08-28T11:25:18Z", + "version": "1.2.0-dev.2", + "commitID": "63219a6d7695caeea02db044ee9238068975c6fe", + "info": { + "packageDescriptionFile": "dub.json", + "authors": [ + "Anton Fediushin" + ], + "sourceFiles": [ + "silly.d" + ], + "license": "ISC", + "copyright": "Copyright © 2018-2019, Anton Fediushin", + "name": "silly", + "description": "Better test runner for D", + "importPaths": [ + "." + ], + "targetType": "sourceLibrary" + }, + "readme": "silly [](https://gitlab.com/AntonMeep/silly) [](https://gitlab.com/AntonMeep/silly/commits/master) [](https://gitlab.com/AntonMeep/silly/commits/master) [](https://gitlab.com/AntonMeep/silly/blob/master/LICENSE) [](https://gitlab.com/AntonMeep/silly/tags)\n=====\n\n**silly** is a modern and light test runner for the D programming language.\n\n# Used by\n\n[Optional](http://optional.dub.pm/), [expected](http://expected.dub.pm/), [ddash](http://ddash.dub.pm/), and more!\n\n> Got a cool project that uses **silly**? [Let us know!](https://gitlab.com/AntonMeep/silly/issues)\n\n# Features\n\n- Easy to install and use with dub\n- No changes of your code are required to start using silly\n- Seamless integration with `dub test`\n- Named tests\n- Multi-threaded test execution\n- Filtering tests\n- Colourful output\n\n# Getting started\n\nAdd **silly** to your project:\n\n```\n$ dub add silly\n```\n\nThis should be it! Try to run tests:\n\n```\n$ dub test\n```\n\nIf it succeeded then congratulations, you have just finished setting up **silly**! Make sure to add more tests and give them nice names.\n\n# Troubleshooting\n\nUnfortunately, setup isn't that easy sometimes and running `dub test` will fail. Don't panic, most of the issues are caused by the quirks and twists of dub. Here are some suggestions on what to check first:\n\n## Make sure `main()` function isn't defined when built in `unittest` mode\n\nSo, instead of this:\n```d\nvoid main() {\n\n}\n```\n\nDo this:\n```d\nversion(unittest) {\n\t// Do nothing here, dub takes care of that\n} else {\n\tvoid main() {\n\n\t}\n}\n```\n\n## Make sure there is a special `unittest` configuration in your dub.json/dub.sdl\n\n```json\n{\n ...\n\t\"configurations\": [\n\t\t{\n\t\t\t\"name\": \"executable\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"unittest\"\n\t\t}\n\t]\n}\n```\n\nSee also [#32](https://gitlab.com/AntonMeep/silly/issues/32).\n\n> **Pro Tip**: dub configurations can have `dependencies` as well! You may want to add silly as a dependency only for the `unittest` configuration to indicate that it's only used for tests.\n\n## Make sure there is no `targetType: executable` in `unittest` configuration in your dub.json/dub.sdl\n\nInstead of this:\n\n```json\n{\n\t...\n\t\"configurations\": [\n\t\t...\n\t\t{\n\t\t\t\"name\": \"unittest\",\n\t\t\t\"targetType\": \"executable\",\n\t\t\t...\n\t\t}\n\t]\n}\n```\n\nDo this:\n\n```json\n{\n\t...\n\t\"configurations\": [\n\t\t...\n\t\t{\n\t\t\t\"name\": \"unittest\",\n\t\t\t...\n\t\t}\n\t]\n}\n```\n\nSee [#12](https://gitlab.com/AntonMeep/silly/issues/12) for more information.\n\n## Nothing helped?\n\nOpen a new [issue](https://gitlab.com/AntonMeep/silly/issues), we will be happy to help you!\n\n# Naming tests\n\nIt is as easy as adding a `string` [user-defined attribute](https://dlang.org/spec/attribute.html#UserDefinedAttribute) to your `unittest` declaration.\n\n```d\n@(\"Johny\")\nunittest {\n\t// This unittest is named Johny\n}\n```\n\nIf there are multiple such UDAs, the first one is chosen to be the name of the unittest.\n\n```d\n@(\"Hello, \") @(\"World!\")\nunittest {\n\t// This unittest's name is \"Hello, \"\n}\n```\n\n# Command line options\n\n**Silly** accept various command-line options that let you customize its behaviour:\n\n```\n$ dub test -- <options>\n\nOptions:\n --no-colours Disable colours\n -t <n> --threads <n> Number of worker threads. 0 to auto-detect (default)\n -i <regexp> --include <regexp> Run tests if their name matches specified regular expression. See filtering tests\n -e <regexp> --exclude <regexp> Skip tests if their name matches specified regular expression. See filtering tests\n --fail-fast Stop executing all tests when a test fails\n -v --verbose Show verbose output (full stack traces, location and durations)\n -h --help Help information\n```\n\n# Filtering tests\n\nWith `--include` and `--exclude` options it's possible to control what tests will be run. These options take regular expressions in [std.regex'](https://dlang.org/phobos/std_regex.html#Syntax%20and%20general%20information) format.\n\n`--include` only tests that match provided regular expression will be run, other tests will be skipped.\n`--exclude` all of the tests that don't match provided regular expression will be run.\n\n> Using both options at the same time will produce unexpected results!\n\n# Best practices\n\n- Running tests in multi-threaded mode (default) can potentially cause issues, try running tests with `--threads 1`\n- Although unittests inside of nested classes and structs are discovered and executed by Silly, it may be unreliable. Consider having unittest blocks on the toplevel\n\n", + "readmeMarkdown": true, + "docFolder": "" + } + ], + "stats": { + "updatedAt": "2023-07-12T01:32:31.235Z", + "downloads": { + "total": 495619, + "monthly": 13247, + "weekly": 3064, + "daily": 433 + }, + "repo": { + "stars": 13, + "watchers": 0, + "forks": 6, + "issues": 11 + }, + "score": 4.99225902557373 + }, + "errors": [], + "categories": [ + "application.desktop.development" + ], + "updateCounter": 27, + "logo": "5b704da37ba6ffce63502c1f", + "documentationURL": "https://gitlab.com/AntonMeep/silly", + "textScore": 0 + }, + { + "_id": "64adcc9f53d32c16c0158e78", + "owner": "63277a2ba808d5cc3555d560", + "name": "theprocess", + "repository": { + "kind": "github", + "owner": "katyukha", + "project": "TheProcess" + }, + "versions": [ + { + "date": "2023-07-11T21:37:33Z", + "version": "~master", + "commitID": "cbeac1d05c47255c30ab89d2fbdf3609f2a967b1", + "info": { + "packageDescriptionFile": "dub.sdl", + "authors": [ + "Dmytro Katyukha" + ], + "license": "MPL-2", + "copyright": "Copyright © 2023, Dmytro Katyukha", + "targetPath": "./build/", + "name": "theprocess", + "description": "The easy way to run external commands", + "dependencies": { + "thepath": ">=0.1.7" + }, + "targetType": "library", + "configurations": [ + { + "targetType": "library", + "name": "library" + }, + { + "targetType": "library", + "name": "sourceLibrary" + }, + { + "dependencies": { + "dshould": ">=1.7.0" + }, + "targetType": "library", + "name": "unittest" + } + ] + }, + "readme": "# The Process\n\nThis lib is designed to be able to easily run external process with complex configuration.\nIt uses builder pattern to configure process (args, env, workdir, etc),\nthus it allows to easily use complex logic to prepare arguments and env for external process.\n\nCurrent stage: ***Alpha***\n\nJust few real examples at the moment:\n\n```d\n// Simply run git add command\nProcess(\"git\")\n .withArgs([\"add\", this.dst_info.path])\n .inWorkDir(this.config.package_dir)\n .execute\n .ensureStatus;\n\n\n// Run Odoo server with different args depending on configuration\nauto runner = Process(venv_path.join(\"bin\", \"run-in-venv\"))\n .inWorkDir(_project.project_root.toString)\n .withEnv(getServerEnv);\n\nif (_project.odoo.server_user)\n runner.setUser(_project.odoo.server_user);\n\nif (coverage.enable) {\n // Run server with coverage mode\n runner.addArgs(\n _project.venv.path.join(\"bin\", \"coverage\").toString,\n \"run\",\n \"--parallel-mode\",\n \"--omit=*/__openerp__.py,*/__manifest__.py\",\n // TODO: Add --data-file option. possibly store it in CoverageOptions\n );\n if (coverage.source.length > 0)\n runner.addArgs(\n \"--source=%s\".format(\n coverage.source.map!(p => p.toString).join(\",\")),\n );\n if (coverage.include.length > 0)\n runner.addArgs(\n \"--include=%s\".format(\n coverage.include.map!(\n p => p.toString ~ \"/*\").join(\",\")),\n );\n}\n\nrunner.addArgs(scriptPath.toString);\nrunner.addArgs(options);\n\nif (detach) {\n runner.setFlag(Config.detached);\n runner.addArgs(\"--logfile=%s\".format(_project.odoo.logfile));\n}\n\nauto pid = runner.spawn();\n\nif (!detach)\n std.process.wait(pid);\n```\n", + "readmeMarkdown": true, + "docFolder": "" + }, + { + "date": "2023-07-11T21:37:33Z", + "version": "0.0.1", + "commitID": "cbeac1d05c47255c30ab89d2fbdf3609f2a967b1", + "info": { + "packageDescriptionFile": "dub.sdl", + "authors": [ + "Dmytro Katyukha" + ], + "license": "MPL-2", + "copyright": "Copyright © 2023, Dmytro Katyukha", + "targetPath": "./build/", + "name": "theprocess", + "description": "The easy way to run external commands", + "dependencies": { + "thepath": ">=0.1.7" + }, + "targetType": "library", + "configurations": [ + { + "targetType": "library", + "name": "library" + }, + { + "targetType": "library", + "name": "sourceLibrary" + }, + { + "dependencies": { + "dshould": ">=1.7.0" + }, + "targetType": "library", + "name": "unittest" + } + ] + }, + "readme": "# The Process\n\nThis lib is designed to be able to easily run external process with complex configuration.\nIt uses builder pattern to configure process (args, env, workdir, etc),\nthus it allows to easily use complex logic to prepare arguments and env for external process.\n\nCurrent stage: ***Alpha***\n\nJust few real examples at the moment:\n\n```d\n// Simply run git add command\nProcess(\"git\")\n .withArgs([\"add\", this.dst_info.path])\n .inWorkDir(this.config.package_dir)\n .execute\n .ensureStatus;\n\n\n// Run Odoo server with different args depending on configuration\nauto runner = Process(venv_path.join(\"bin\", \"run-in-venv\"))\n .inWorkDir(_project.project_root.toString)\n .withEnv(getServerEnv);\n\nif (_project.odoo.server_user)\n runner.setUser(_project.odoo.server_user);\n\nif (coverage.enable) {\n // Run server with coverage mode\n runner.addArgs(\n _project.venv.path.join(\"bin\", \"coverage\").toString,\n \"run\",\n \"--parallel-mode\",\n \"--omit=*/__openerp__.py,*/__manifest__.py\",\n // TODO: Add --data-file option. possibly store it in CoverageOptions\n );\n if (coverage.source.length > 0)\n runner.addArgs(\n \"--source=%s\".format(\n coverage.source.map!(p => p.toString).join(\",\")),\n );\n if (coverage.include.length > 0)\n runner.addArgs(\n \"--include=%s\".format(\n coverage.include.map!(\n p => p.toString ~ \"/*\").join(\",\")),\n );\n}\n\nrunner.addArgs(scriptPath.toString);\nrunner.addArgs(options);\n\nif (detach) {\n runner.setFlag(Config.detached);\n runner.addArgs(\"--logfile=%s\".format(_project.odoo.logfile));\n}\n\nauto pid = runner.spawn();\n\nif (!detach)\n std.process.wait(pid);\n```\n", + "readmeMarkdown": true, + "docFolder": "" + } + ], + "stats": { + "updatedAt": "2023-07-12T14:42:46.231Z", + "downloads": { + "total": 12, + "monthly": 12, + "weekly": 12, + "daily": 12 + }, + "repo": { + "stars": 1, + "watchers": 1, + "forks": 0, + "issues": 0 + }, + "score": 0.5773213505744934 + }, + "errors": [], + "categories": [ + "library" + ], + "updateCounter": 2, + "logo": "000000000000000000000000", + "documentationURL": "", + "textScore": 0 + } +] diff --git a/swh/lister/dlang/tests/test_lister.py b/swh/lister/dlang/tests/test_lister.py new file mode 100644 index 0000000000000000000000000000000000000000..1a3651cf8813ce0248694c16234461c96d32b858 --- /dev/null +++ b/swh/lister/dlang/tests/test_lister.py @@ -0,0 +1,41 @@ +# Copyright (C) 2023 The Software Heritage developers +# See the AUTHORS file at the top-level directory of this distribution +# License: GNU General Public License version 3, or any later version +# See top-level LICENSE file for more information +import iso8601 + +from swh.lister.dlang.lister import DlangLister + +expected_origins = [ + { + "url": "https://github.com/katyukha/TheProcess", + "last_update": "2023-07-12T14:42:46.231Z", + }, + { + "url": "https://gitlab.com/AntonMeep/silly", + "last_update": "2023-07-12T01:32:31.235Z", + }, +] + + +def test_dlang_lister(datadir, requests_mock_datadir, swh_scheduler): + lister = DlangLister(scheduler=swh_scheduler) + res = lister.run() + + assert res.pages == 1 + assert res.origins == 1 + 1 + + scheduler_origins = swh_scheduler.get_listed_origins(lister.lister_obj.id).results + + assert len(scheduler_origins) == len(expected_origins) + assert { + ( + scheduled.visit_type, + scheduled.url, + scheduled.last_update, + ) + for scheduled in scheduler_origins + } == { + ("git", expected["url"], iso8601.parse_date(expected["last_update"])) + for expected in expected_origins + } diff --git a/swh/lister/dlang/tests/test_tasks.py b/swh/lister/dlang/tests/test_tasks.py new file mode 100644 index 0000000000000000000000000000000000000000..4b6f90c1d9dd7a0079e7c439fff2a91d790d43b2 --- /dev/null +++ b/swh/lister/dlang/tests/test_tasks.py @@ -0,0 +1,31 @@ +# Copyright (C) 2023 The Software Heritage developers +# See the AUTHORS file at the top-level directory of this distribution +# License: GNU General Public License version 3, or any later version +# See top-level LICENSE file for more information + +from swh.lister.pattern import ListerStats + + +def test_dlang_ping(swh_scheduler_celery_app, swh_scheduler_celery_worker): + res = swh_scheduler_celery_app.send_task("swh.lister.dlang.tasks.ping") + assert res + res.wait() + assert res.successful() + assert res.result == "OK" + + +def test_dlang_lister(swh_scheduler_celery_app, swh_scheduler_celery_worker, mocker): + # setup the mocked DlangLister + lister = mocker.patch("swh.lister.dlang.tasks.DlangLister") + lister.from_configfile.return_value = lister + stats = ListerStats(pages=42, origins=42) + lister.run.return_value = stats + + res = swh_scheduler_celery_app.send_task("swh.lister.dlang.tasks.DlangListerTask") + assert res + res.wait() + assert res.successful() + assert res.result == stats.dict() + + lister.from_configfile.assert_called_once_with() + lister.run.assert_called_once_with()