{"id":14977581,"url":"https://github.com/fridujo/glacio","last_synced_at":"2025-11-09T09:32:33.008Z","repository":{"id":38813780,"uuid":"145672714","full_name":"fridujo/glacio","owner":"fridujo","description":"Multi-level Gherkin-like language","archived":false,"fork":false,"pushed_at":"2024-08-16T12:24:07.000Z","size":306,"stargazers_count":5,"open_issues_count":18,"forks_count":1,"subscribers_count":2,"default_branch":"master","last_synced_at":"2024-09-29T00:20:20.416Z","etag":null,"topics":["bdd-framework","junit5","spring","substeps","vocabulary"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/fridujo.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2018-08-22T07:28:02.000Z","updated_at":"2024-01-13T23:58:44.000Z","dependencies_parsed_at":"2024-09-18T22:15:55.550Z","dependency_job_id":null,"html_url":"https://github.com/fridujo/glacio","commit_stats":{"total_commits":150,"total_committers":4,"mean_commits":37.5,"dds":"0.44666666666666666","last_synced_commit":"63bd5b174b2c6e6ba7b6ba5612a8dc0853b6f62c"},"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fridujo%2Fglacio","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fridujo%2Fglacio/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fridujo%2Fglacio/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fridujo%2Fglacio/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/fridujo","download_url":"https://codeload.github.com/fridujo/glacio/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":219860180,"owners_count":16556026,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["bdd-framework","junit5","spring","substeps","vocabulary"],"created_at":"2024-09-24T13:55:56.692Z","updated_at":"2025-10-28T04:31:44.178Z","avatar_url":"https://github.com/fridujo.png","language":"Java","readme":"# Glacio\n[![Codacy Badge](https://api.codacy.com/project/badge/Grade/c0142d637ee44a86a201c5caba95a8d9)](https://www.codacy.com/app/ledoyen/glacio?utm_source=github.com\u0026amp;utm_medium=referral\u0026amp;utm_content=fridujo/glacio\u0026amp;utm_campaign=Badge_Grade)\n[![Build Status](https://travis-ci.com/fridujo/glacio.svg?branch=master)](https://travis-ci.com/fridujo/glacio)\n[![codecov](https://codecov.io/gh/fridujo/glacio/branch/master/graph/badge.svg)](https://codecov.io/gh/fridujo/glacio)\n[![Maven Central](https://img.shields.io/maven-central/v/com.github.fridujo/glacio.svg)](https://search.maven.org/#search|ga|1|a:\"glacio\")\n[![License](https://img.shields.io/github/license/fridujo/spring-automocker.svg)](https://opensource.org/licenses/Apache-2.0)\n\nMulti-level [Gherkin](https://docs.cucumber.io/gherkin/reference/)-like language.\n\n# What it is\n\nUsing [Cucumber](https://docs.cucumber.io/), you would write something like the following and let developers translate it however they want:\n```gherkin\nFeature: User login\n\n    Scenario: Successful login\n\n        Given a user on the login page\n        When the user signs in with valid credentials\n        Then the user is logged in\n```\n\nExcept several concepts in this spec are subject to interpretation.\n * what browser is the user using to get to the login page? (firefox, chrome, etc.)\n * are we even executing this test on a fully deployed application or in the context of an integration test? (selenium, mocked application, etc.)\n * what does having valid credentials mean? (inserted into the database on the fly, created through the registration process, using an already existing account, etc.)\n * is real-user sign in required or is an HTTP post on the back API sufficient? (this leads also to test strategy, whether all tests should use a tool like selenium, or API calls are sufficient for most of them)\n * how do we know that the user is logged in? (check the url is `/home`, check the title of the page, check the presence of a cookie, etc.)\n\nUsing Glacio, you have room to answer these uncertainties together with all actors:\n```glacio\nFeature: User login\n\n    Scenario: Successful login\n\n        Given a user with valid credentials\n            Insert generated user with valid credentials in database\n                Generate variable 'username'\n                Generate variable 'password'\n                Execute SQL\n                \"\"\"\n                  INSERT INTO USERS(USERNAME, PASSWORD, ENABLED)\n                    VALUES('${username}', '${password}', 1)\n                \"\"\"\n        And the user in on the login page\n            Open a 'Chrome' browser\n            Navigate to 'https://www.yourapp.com'\n            Click on the 'Sign In' button\n        When the user signs in\n            Fill 'username' input with '${username}'\n            Fill 'password' input with '${password}'\n            Click on the 'Sign In' button\n        Then the user is logged in\n            Relative URL is '/home'\n```\n\nIn the end, like with [Cucumber](https://docs.cucumber.io/), developers will have to code some glue to make leaf-steps runnable.  \nYou can choose how many levels of explanation you have for each step.  \nGo deep enough though and the code base will only contain generic little Lego pieces you can re-use to create new tests that are instantly runnable.\n\n# Where it starts\nThere is a common problem encountered using BDD tools like [Cucumber](https://docs.cucumber.io/).  \nThis is:\n * non-technical actors write specs\n * developers write glue code containing hidden business specificities\n\nThat is an historic clivage which tends to leave grey areas undiscovered until implementation time.  \nFurthermore, non-technical actors can point out relevant aspects of implementation just as developers can do the same about the business part (aka specs).\n\nAs Seb Rose stated in [this article](http://claysnow.co.uk/the-testing-iceberg/), levels of readability can differ from the ones encountered in usual test segregation (unit, integration, acceptance, etc.).\n\n# Motivation\nThis project is intended to solve this issue by supplying a shared medium for all actors to contribute together.  \n\nThe language is inspired by [Gherkin](https://docs.cucumber.io/gherkin/reference/) as it has many qualities (expressiveness, i18n, support of many programming languages).  \n[Substeps framework](http://substeps.github.io/introduction/overview/) is also a source of inspiration, but the goal is to keep the Glacio language expressive by avoiding the need to switch between files to have the complete picture.\n\n# Vocabulary\n\nYou may want to gather your domain vocabulary in one place, to avoid duplication and ambiguous definition (same step labels in different scenarios but with different meanings).\n\nFor this specific use case, like with [Substeps](http://substeps.github.io/introduction/overview/), you can write definitions in `.vocabulary` files.\n\n**user_login.feature**\n```glacio\nFeature: User login\n\n    Scenario Outline: Successful login\n\n        Given a user with valid credentials\n        And the user is on the login page with a \u003cbrowser_type\u003e browser\n        When the user signs in\n        Then the user is logged in\n\n        Examples:\n          | browser_type |\n          | Firefox      |\n          | Chrome       |\n```\n\n**application.vocabulary**\n```markdown\nInsert generated user with valid credentials in database\n    * Generate variable 'username'\n    * Generate variable 'password'\n    * Execute SQL\n      ```sql\n      INSERT INTO USERS(USERNAME, PASSWORD, ENABLED)\n        VALUES('${username}', '${password}', 1)\n      ```\n\na user with valid credentials\n    * Insert generated user with valid credentials in database\n\nthe user is on the login page with a \u003cbrowser_type\u003e browser\n    * Open a '\u003cbrowser_type\u003e' browser\n    * Navigate to 'https://www.yourapp.com'\n    * Click on the 'Sign In' button\n\nthe user signs in\n    * Fill 'username' input with '${username}'\n    * Fill 'password' input with '${password}'\n    * Click on the 'Sign In' button\n\nthe user is logged in\n    * Relative URL is '/home'\n```\n\n\n## Getting Started\n\n### Maven\nAdd the following dependency to your **pom.xml**\n```xml\n\u003cdependency\u003e\n    \u003cgroupId\u003ecom.github.fridujo\u003c/groupId\u003e\n    \u003cartifactId\u003eglacio-junit-engine\u003c/artifactId\u003e\n    \u003cversion\u003e1.0.0-SNAPSHOT\u003c/version\u003e\n    \u003cscope\u003etest\u003c/scope\u003e\n\u003c/dependency\u003e\n```\n\n### Gradle\nAdd the following dependency to your **build.gradle**\n```groovy\nrepositories {\n\tmavenCentral()\n}\n\n// ...\n\ndependencies {\n\t// ...\n\ttestCompile('com.github.fridujo:glacio-junit-engine:1.0.0-SNAPSHOT')\n\t// ...\n}\n```\n\n### Building from Source\n\nYou need [JDK-8](http://jdk.java.net/8/) to build Glacio. The project can be built with Maven using the following command.\n```\nmvn clean package\n```\n\nTests are split in:\n\n* **unit tests** covering features and borderline cases: `mvn test`\n* **mutation tests**, to help understand what is missing in test assertions: `mvn org.pitest:pitest-maven:mutationCoverage`\n\n\n### Installing in the Local Maven Repository\n\nThe project can be installed in a local Maven Repository for usage in other projects via the following command.\n```\nmvn clean install\n```\n\n### Using the latest SNAPSHOT\n\nThe master of the project pushes SNAPSHOTs in Sonatype's repo.\n\nTo use the latest master build add Sonatype OSS snapshot repository, for Maven:\n```\n\u003crepositories\u003e\n    ...\n    \u003crepository\u003e\n        \u003cid\u003esonatype-oss-spanshots\u003c/id\u003e\n        \u003curl\u003ehttps://oss.sonatype.org/content/repositories/snapshots\u003c/url\u003e\n    \u003c/repository\u003e\n\u003c/repositories\u003e\n```\n\nFor Gradle:\n```groovy\nrepositories {\n    // ...\n    maven {\n        url \"https://oss.sonatype.org/content/repositories/snapshots\"\n    }\n}\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffridujo%2Fglacio","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ffridujo%2Fglacio","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffridujo%2Fglacio/lists"}