javajsongroovycucumber-jvmfileparsing

How to parse Cucumber feature file in java or groovy?


I need to parse .feature files and produce Json data. I am currently able to read the steps using regular expressions, But i want to parse entire feature file.

Path path= Paths.get("path to feature file").toAbsolutePath();
    try {
        File file = new File(path.toString())
                    try {
                        List<String> data = Files.readAllLines(file);

                        data.forEach(line -> {
                            Matcher stepMatcher = Pattern.compile("\\b(Given|When|Then|And|But)(.*)").matcher(line);
                            if (stepMatcher.find()) {
                                System.out.println(line);
                            }
                        });
                    } catch (Exception e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }

Solution

  • I got the answer in google forms. the Answer is

    public void readFeatureFile() {
        Path fpath= Paths.get("path to file").toAbsolutePath();
        String path = fpath.toString();
        String gherkin;
        try {
    
            gherkin = FixJava.readReader(new InputStreamReader(new FileInputStream(path), "UTF-8"));
            System.out.println("gherkin...\n" + gherkin);
            StringBuilder json = new StringBuilder();
            System.out.println("json: '" + json + "'");
            JSONFormatter formatter = new JSONFormatter(json);
            System.out.println("formatter: " + formatter.toString());
            Parser parser = new Parser(formatter);
            System.out.println("parser: " + parser.toString());
            parser.parse(gherkin, path, 0);
            System.out.println("json: '" + json + "'"); 
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (RuntimeException e) {
            e.printStackTrace();
        }
    }
    

    check out this url for the discussion discussion link