LCOV - code coverage report
Current view: top level - src/models - string_extensions.dart (source / functions) Coverage Total Hit
Test: filtered_lcov.info Lines: 100.0 % 27 27
Test Date: 2024-10-02 13:53:24 Functions: - 0 0

            Line data    Source code
       1              : import 'dart:convert';
       2              : import 'dart:math';
       3              : 
       4              : /// Extension for strings.
       5              : extension StringExtensions on String {
       6              :   /// Try to format embedded JSON in a string.
       7            4 :   String get prettyJson {
       8            4 :     final start = <int>[];
       9            4 :     final end = <int>[];
      10              :     var depth = 0;
      11           12 :     for (var i = 0; i < length; i++) {
      12            8 :       if (this[i] == '{') {
      13            1 :         if (depth == 0) {
      14            1 :           start.add(i);
      15              :         }
      16            1 :         depth++;
      17              :       }
      18           11 :       if (this[i] == '}' && start.length > end.length) {
      19            1 :         depth--;
      20            1 :         if (depth == 0) {
      21            1 :           end.add(i);
      22              :         }
      23              :       }
      24              :     }
      25              : 
      26            4 :     final substrings = <(int, int, bool)>[];
      27              :     var prev = 0;
      28           17 :     for (var i = 0; i < min(start.length, end.length); i++) {
      29              :       substrings
      30            2 :         ..add((prev, start[i], false))
      31            4 :         ..add((start[i], end[i] + 1, true));
      32            2 :       prev = end[i] + 1;
      33              :     }
      34              : 
      35              :     substrings
      36            8 :       ..add((prev, length, false))
      37           12 :       ..removeWhere((tuple) => tuple.$1 == tuple.$2);
      38              : 
      39            4 :     final buffer = StringBuffer();
      40              : 
      41           12 :     for (var i = 0; i < substrings.length; i++) {
      42           12 :       final sub = substring(substrings[i].$1, substrings[i].$2);
      43            4 :       final form = _tryToFormatJson(sub);
      44              : 
      45            4 :       buffer.write(form);
      46              :     }
      47              : 
      48            4 :     return buffer.toString();
      49              :   }
      50              : 
      51            4 :   String _tryToFormatJson(String json) {
      52              :     try {
      53            7 :       return '''\n  ${_jsonEncoder.convert(jsonDecode(json)).replaceAll('\n', '\n  ')}\n''';
      54              :     } catch (e) {
      55              :       return json;
      56              :     }
      57              :   }
      58              : 
      59              :   static const _jsonEncoder = JsonEncoder.withIndent('  ');
      60              : }
        

Generated by: LCOV version 2.1-1