williaml33moore / bathtub Goto Github PK
View Code? Open in Web Editor NEWThis project forked from everactive/bathtub
BDD Gherkin implementation in native SystemVerilog, based on UVM.
Home Page: https://bathtubBDD.dev
License: MIT License
This project forked from everactive/bathtub
BDD Gherkin implementation in native SystemVerilog, based on UVM.
Home Page: https://bathtubBDD.dev
License: MIT License
In the pages
branch, the docs
directory contains some files that should not be published to the web page.
Exclude them.
Copy all Monos theme _includes
to my repo.
Add {{ site.baseurl }}
as needed to fix broken URLs.
baseurl
is set to bathtub
since this is a project site, not a user site.
The new parser structure enables this feature.
If I can parse strings instead of files, I can run powerful unit tests on the parser.
Refactor Gherkin parser into its own class which implements the Visitor interface.Big change.
[] In progress
Don't have Bathtub throw fatal errors when steps don't exist. Instead throw normal errors, keep running. This is useful for interactive runs that might just require editing the feature file and rerunning.
Refer to Wikimedia Universal Code of Conduct
Theme has a bug where the Category features should really be Tags. The screenshots in the original jekyll-theme-monos
repo show that the navbar
section used to be called "Tags."
The problem is that a post can only have one category, and an array of n
categories is supposed to be treated as a hierarchy with depth n
.
The fix is to rename everything "category," including file names, to "tag."
Create interface classes for all Gherkin classes. Replace aggregates with uvm_pool
objects. Supply accessors for their elements.Decided not to use uvm_pool
. Native queues are fine.
[] To-do
Ideas:
Make Gherkin objects immutable.Each has a new()
constructor which constructs an empty element.But each also has a create_new()
constructor with a complete set of arguments which are sufficient to create a new fully populated object with deep copies of all the arguments.
Accessors in the interfaces are getters only, no setters.
All members are protected.Gherkin parser uses new()
to construct an empty element sufficient to call accept()
on. All it's used for is visitor pattern double dispatch, then it's discarded. Parser collects element sub-elements recursively, then finally calls create_new()
.
Consider having getters for aggregates that return uvm_queue
and dynamic arrays.e.g. function uvm_queue#(step) get_steps_as_queue()
and function void get_steps_as_array(ref step[])
;A wrinkle is that visit tasks don't return values. We can simulate returning values by supplying a uvm_queue
for every function and use it as a stack. Each visitor function will push its return object onto its stack and the calling function can retrieve it. A bit Byzantine but it should work. We appear to be stretching the Visitor pattern to its limit. Got this to work with the return value stack but ultimately resolved this issue by changing parser so that it no longer implements Visitor pattern.
[] To-do
Gherkin visitor methods are currently tasks. Consider adding a parallel set of visitor functions.
task visit()
task accept()
function void fn_visit()
or visit_fn()
function void fn_accept()
or accept_fn()
Gherkin printer could probably use the functions.
[] Considering
Hardest part will be coming up with a unique class name from the string. Maybe just replace spaces with underscores and prepend a backslash.
bathtub
repo main
branch, commit logo from the pages
branch so it's available in the main
branch for the README
.bathtub
main
branch, rename unit test directory to test
.bathtub
main
branch, add scripts
directory for future use.main
branch changes into pages
.https://edaplayground.com/x/Prp5
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.