LCOV - code coverage report
Current view: top level - services - tree_service.dart (source / functions) Hit Total Coverage
Test: lcov.info Lines: 2 33 6.1 %
Date: 2021-11-02 09:21:23 Functions: 0 0 -

          Line data    Source code
       1             : import 'dart:collection';
       2             : import 'package:meta/meta.dart';
       3             : import 'package:widgetbook_generator/models/widgetbook_story_data.dart';
       4             : 
       5             : class Widget {
       6           2 :   Widget(this.name);
       7             : 
       8             :   final String name;
       9             :   List<WidgetbookStoryData> stories = <WidgetbookStoryData>[];
      10             : }
      11             : 
      12             : @immutable
      13             : class Folder {
      14           2 :   Folder({
      15             :     required this.name,
      16             :   });
      17             : 
      18             :   final String name;
      19             :   final Map<String, Folder> subFolders = HashMap();
      20             :   final Map<String, Widget> widgets = HashMap();
      21             : 
      22           0 :   @override
      23             :   bool operator ==(Object other) {
      24             :     if (identical(this, other)) return true;
      25             : 
      26           0 :     return other is Folder && other.name == name;
      27             :   }
      28             : 
      29           0 :   @override
      30           0 :   int get hashCode => name.hashCode;
      31             : }
      32             : 
      33             : class TreeService {
      34             :   Map<String, Folder> folders = HashMap();
      35             :   // TODO This is a bit weird but (likely) works
      36             :   Folder rootFolder = Folder(name: 'root');
      37             : 
      38             :   // Returns the lowest folder in the tree
      39             :   // might return null if the file is located in lib folder
      40           0 :   Folder? addFolderByImport(
      41             :     String import,
      42             :   ) {
      43           0 :     var elements = import.split('/').toList();
      44           0 :     elements = elements.skip(1).toList();
      45             :     // TODO improve
      46             :     // This skips the last element
      47           0 :     elements = elements.reversed.skip(1).toList().reversed.toList();
      48           0 :     return addFolder(null, elements);
      49             :   }
      50             : 
      51           0 :   void addStoryToFolder(
      52             :     Folder? folder,
      53             :     WidgetbookStoryData story,
      54             :   ) {
      55           0 :     final widgetName = story.widgetName;
      56             : 
      57           0 :     folder ??= rootFolder;
      58             : 
      59           0 :     final widgets = folder.widgets;
      60           0 :     if (!widgets.containsKey(widgetName)) {
      61           0 :       widgets.putIfAbsent(
      62             :         widgetName,
      63           0 :         () => Widget(widgetName),
      64             :       );
      65             :     }
      66             : 
      67             :     // TODO do we need to check if a story with that name already exist?
      68             :     // it might happen by copy and pasting that stories are duplicated.
      69           0 :     widgets[widgetName]!.stories.add(story);
      70             :   }
      71             : 
      72           0 :   Folder? addFolder(Folder? folder, List<String> paths) {
      73           0 :     if (paths.isEmpty) {
      74             :       return folder;
      75             :     }
      76             : 
      77           0 :     final folderName = paths.first;
      78           0 :     final subFolders = paths.skip(1).toList();
      79             : 
      80             :     if (folder == null) {
      81           0 :       if (!folders.containsKey(folderName)) {
      82           0 :         folders.putIfAbsent(
      83             :           folderName,
      84           0 :           () => Folder(name: folderName),
      85             :         );
      86             :       }
      87             : 
      88           0 :       return addFolder(
      89           0 :         folders[folderName],
      90             :         subFolders,
      91             :       );
      92             :     }
      93             :     // TODO redundant code. needs refactoring.
      94             :     else {
      95           0 :       if (!folder.subFolders.containsKey(folderName)) {
      96           0 :         folder.subFolders.putIfAbsent(
      97             :           folderName,
      98           0 :           () => Folder(name: folderName),
      99             :         );
     100             :       }
     101             : 
     102           0 :       return addFolder(
     103           0 :         folder.subFolders[folderName],
     104             :         subFolders,
     105             :       );
     106             :     }
     107             :   }
     108             : }

Generated by: LCOV version 1.15