diff --git a/.mergify.yml b/.mergify.yml index c8da66b3..bd616d86 100644 --- a/.mergify.yml +++ b/.mergify.yml @@ -25,14 +25,14 @@ pull_request_rules: - name: Backport PR to dev if merging to stable conditions: - base=stable - - "#approved-reviews-by>=2" #Two approvals needed + - "#approved-reviews-by>=1" actions: backport: branches: ["dev"] - - name: Merge pull request on two approvals + - name: Merge pull request on approval conditions: - - "#approved-reviews-by>=2" # Two approvals needed + - "#approved-reviews-by>=1" - -closed - label!=review-required # Only merge PRs that are NOT labeled review-required. actions: diff --git a/lib/analytics/analytics_constants.dart b/lib/analytics/analytics_constants.dart new file mode 100644 index 00000000..756a8546 --- /dev/null +++ b/lib/analytics/analytics_constants.dart @@ -0,0 +1,16 @@ +const RUN_PARABEAC = 'Run Parabeac'; + +/// Interpretation +const INTERPRETATION = 'Interpretation'; +const HANDLE_CHILDREN = 'Handle Children'; +const INTERMEDIATE_SERVICES = 'Intermediate Services'; + +/// Generation +const GENERATION = 'Generation'; +const COMMAND_QUEUE = 'Command Queue'; +const GEN_DRY_RUN = 'Gen AIT Dry Run'; +const GEN_AIT = 'Gen AIT'; + +/// Misc +const PRE_GEN = 'Pre Gen Tasks'; +const POST_GEN = 'Post Gen Tasks'; diff --git a/lib/analytics/sentry_analytics_service.dart b/lib/analytics/sentry_analytics_service.dart new file mode 100644 index 00000000..a072791e --- /dev/null +++ b/lib/analytics/sentry_analytics_service.dart @@ -0,0 +1,56 @@ +import 'package:quick_log/quick_log.dart'; +import 'package:sentry/sentry.dart'; + +/// Class that uses Sentry to log transactions. +/// +/// These transactions are meant to track performance throughout parabeac_core. +class SentryService { + static final _logger = Logger('$SentryService'); + static var transactions = {}; + + /// Starts a main transaction. + /// + /// The [id] is the unique name of the transaction. The [operation] is what is being performed. + /// The optional [description] is used to provide more context on the [operation] within Sentry. + static void startTransaction(String id, String operation, + {String description}) { + if (!transactions.containsKey(id)) { + final transaction = + Sentry.startTransaction(id, operation, description: description); + + transactions[id] = transaction; + } else { + _logger + .error('Transaction $id already exists. Cannot start transaction.'); + } + } + + /// Starts a child transaction from a parent transaction with a unique [id]. + /// + /// The [id] refers to the `parent` transaction. + /// The [operation] is what the `child` transaction is performing, and must be unique. + /// The optional [description] is used to provide more context on the [operation] within Sentry. + static void startChildTransactionFrom(String id, String operation, + {String description}) { + if (transactions.containsKey(id) && !transactions.containsKey(operation)) { + final transaction = + transactions[id].startChild(operation, description: description); + + transactions[operation] = transaction; + } else { + _logger.error( + 'Transaction \"$id\" does not exist or transaction \"$operation\" already exists. Cannot start child transaction.'); + } + } + + /// Finishes transaction with a unique [id]. + static Future finishTransaction(String id) async { + if (transactions.containsKey(id)) { + await transactions[id].finish(); + transactions.remove(id); + } else { + _logger + .error('Transaction $id does not exist. Cannot finish transaction.'); + } + } +} diff --git a/lib/controllers/interpret.dart b/lib/controllers/interpret.dart index 87799c87..33eb1848 100644 --- a/lib/controllers/interpret.dart +++ b/lib/controllers/interpret.dart @@ -1,3 +1,5 @@ +import 'package:parabeac_core/analytics/analytics_constants.dart'; +import 'package:parabeac_core/analytics/sentry_analytics_service.dart'; import 'package:parabeac_core/controllers/main_info.dart'; import 'package:parabeac_core/generation/prototyping/pb_prototype_linker_service.dart'; import 'package:parabeac_core/interpret_and_optimize/entities/layouts/group/base_group.dart'; @@ -153,6 +155,11 @@ class AITServiceBuilder { var transformation = transformationTuple.item2; var name = transformationTuple.item1; + SentryService.startChildTransactionFrom( + INTERMEDIATE_SERVICES, + name, + description: 'Applying transformation: $name', + ); _stopwatch.start(); log.debug('Started running $name...'); try { @@ -179,10 +186,12 @@ class AITServiceBuilder { log.error('${e.toString()} at $name'); } finally { _stopwatch.stop(); + await SentryService.finishTransaction(name); log.debug( 'Stoped running $name (${_stopwatch.elapsed.inMilliseconds})'); } } + log.fine('Finish transforming $treeName'); return _intermediateTree; } diff --git a/lib/generation/generators/attribute-helper/pb_box_decoration_gen_helper.dart b/lib/generation/generators/attribute-helper/pb_box_decoration_gen_helper.dart index ad0534bc..1ecad30f 100644 --- a/lib/generation/generators/attribute-helper/pb_box_decoration_gen_helper.dart +++ b/lib/generation/generators/attribute-helper/pb_box_decoration_gen_helper.dart @@ -9,42 +9,41 @@ class PBBoxDecorationHelper extends PBAttributesHelper { @override String generate(PBIntermediateNode source, PBContext generatorContext) { - if (source is PBContainer) { - final buffer = StringBuffer(); - buffer.write('decoration: BoxDecoration('); - var borderInfo = source.auxiliaryData.borderInfo; - var effectsInfo = source.auxiliaryData.effects; - var colors = source.auxiliaryData.colors; - if (colors != null && colors.isNotEmpty) { - buffer.write(PBColorGenHelper().generate(source, generatorContext)); + final buffer = StringBuffer(); + buffer.write('decoration: BoxDecoration('); + var borderInfo = source.auxiliaryData.borderInfo; + var effectsInfo = source.auxiliaryData.effects; + var colors = source.auxiliaryData.colors; + if (colors != null && colors.isNotEmpty) { + buffer.write(PBColorGenHelper().generate(source, generatorContext)); + } + if (borderInfo != null) { + if (borderInfo.borderRadius != null) { + // Write border radius if it exists + buffer.write( + 'borderRadius: BorderRadius.all(Radius.circular(${borderInfo.borderRadius})),'); + } else if (borderInfo.type == 'circle') { + buffer.write('shape: BoxShape.circle,'); } - if (borderInfo != null) { - if (borderInfo.borderRadius != null) { - // Write border radius if it exists - buffer.write( - 'borderRadius: BorderRadius.all(Radius.circular(${borderInfo.borderRadius})),'); - } else if (borderInfo.type == 'circle') { - buffer.write('shape: BoxShape.circle,'); - } - // Write border outline properties if applicable - if (borderInfo.thickness > 0 && borderInfo.visible) { - buffer.write('border: Border.all('); - if (borderInfo.color != null) { - buffer.write('color: Color(${borderInfo.color.toString()}),'); - } - buffer.write('width: ${borderInfo.thickness},'); - buffer.write('),'); // end of Border.all( + // Write border outline properties if applicable + if (borderInfo.thickness > 0 && borderInfo.visible) { + buffer.write('border: Border.all('); + if (borderInfo.color != null) { + buffer.write('color: Color(${borderInfo.color.toString()}),'); } + buffer.write('width: ${borderInfo.thickness},'); + buffer.write('),'); // end of Border.all( } + } - if (effectsInfo != null && - effectsInfo.isNotEmpty && - effectsInfo.first.type.toLowerCase().contains('shadow')) { - buffer.write('boxShadow: ['); + if (effectsInfo != null && + effectsInfo.isNotEmpty && + effectsInfo.first.type.toLowerCase().contains('shadow')) { + buffer.write('boxShadow: ['); - for (var effect in effectsInfo) { - buffer.write(''' + for (var effect in effectsInfo) { + buffer.write(''' BoxShadow( ${PBColorGenHelper().getHexColor(effect.color)} spreadRadius: ${effect.radius}, @@ -52,14 +51,12 @@ class PBBoxDecorationHelper extends PBAttributesHelper { offset: Offset(${effect.offset['x']}, ${effect.offset['y']}), ), '''); - } - - buffer.write('],'); } - buffer.write('),'); - return buffer.toString(); + buffer.write('],'); } - return ''; + buffer.write('),'); + + return buffer.toString(); } } diff --git a/lib/generation/generators/symbols/pb_mastersym_gen.dart b/lib/generation/generators/symbols/pb_mastersym_gen.dart index e3bd1aaa..43006061 100644 --- a/lib/generation/generators/symbols/pb_mastersym_gen.dart +++ b/lib/generation/generators/symbols/pb_mastersym_gen.dart @@ -1,3 +1,4 @@ +import 'package:parabeac_core/generation/generators/attribute-helper/pb_box_decoration_gen_helper.dart'; import 'package:parabeac_core/generation/generators/pb_generator.dart'; import 'package:parabeac_core/generation/generators/value_objects/template_strategy/stateful_template_strategy.dart'; import 'package:parabeac_core/interpret_and_optimize/entities/pb_shared_master_node.dart'; @@ -30,7 +31,10 @@ class PBMasterSymbolGenerator extends PBGenerator { if (generatedWidget == null || generatedWidget.isEmpty) { return ''; } + var decoration = PBBoxDecorationHelper().generate(source, context); + buffer.write('Container($decoration child:'); buffer.write(generatedWidget); + buffer.write(')'); return buffer.toString(); } else { return ''; diff --git a/lib/interpret_and_optimize/entities/inherited_circle.g.dart b/lib/interpret_and_optimize/entities/inherited_circle.g.dart index 34d31b8b..998f7e66 100644 --- a/lib/interpret_and_optimize/entities/inherited_circle.g.dart +++ b/lib/interpret_and_optimize/entities/inherited_circle.g.dart @@ -18,7 +18,6 @@ InheritedCircle _$InheritedCircleFromJson(Map json) { : PBIntermediateConstraints.fromJson( json['constraints'] as Map), ) - ..subsemantic = json['subsemantic'] as String ..layoutMainAxisSizing = _$enumDecodeNullable( _$ParentLayoutSizingEnumMap, json['layoutMainAxisSizing']) ..layoutCrossAxisSizing = _$enumDecodeNullable( @@ -32,7 +31,6 @@ InheritedCircle _$InheritedCircleFromJson(Map json) { Map _$InheritedCircleToJson(InheritedCircle instance) => { - 'subsemantic': instance.subsemantic, 'UUID': instance.UUID, 'constraints': instance.constraints, 'layoutMainAxisSizing': diff --git a/lib/interpret_and_optimize/entities/inherited_material.g.dart b/lib/interpret_and_optimize/entities/inherited_material.g.dart index 59775aad..57eb1116 100644 --- a/lib/interpret_and_optimize/entities/inherited_material.g.dart +++ b/lib/interpret_and_optimize/entities/inherited_material.g.dart @@ -17,7 +17,6 @@ InheritedMaterial _$InheritedMaterialFromJson(Map json) { json['prototypeNodeUUID'] as String), constraints: json['constraints'], ) - ..subsemantic = json['subsemantic'] as String ..layoutMainAxisSizing = _$enumDecodeNullable( _$ParentLayoutSizingEnumMap, json['layoutMainAxisSizing']) ..layoutCrossAxisSizing = _$enumDecodeNullable( @@ -31,7 +30,6 @@ InheritedMaterial _$InheritedMaterialFromJson(Map json) { Map _$InheritedMaterialToJson(InheritedMaterial instance) => { - 'subsemantic': instance.subsemantic, 'UUID': instance.UUID, 'constraints': instance.constraints, 'layoutMainAxisSizing': diff --git a/lib/interpret_and_optimize/entities/inherited_scaffold.g.dart b/lib/interpret_and_optimize/entities/inherited_scaffold.g.dart index c558535e..7ea77c08 100644 --- a/lib/interpret_and_optimize/entities/inherited_scaffold.g.dart +++ b/lib/interpret_and_optimize/entities/inherited_scaffold.g.dart @@ -20,7 +20,6 @@ InheritedScaffold _$InheritedScaffoldFromJson(Map json) { : PBIntermediateConstraints.fromJson( json['constraints'] as Map), ) - ..subsemantic = json['subsemantic'] as String ..layoutMainAxisSizing = _$enumDecodeNullable( _$ParentLayoutSizingEnumMap, json['layoutMainAxisSizing']) ..layoutCrossAxisSizing = _$enumDecodeNullable( @@ -34,7 +33,6 @@ InheritedScaffold _$InheritedScaffoldFromJson(Map json) { Map _$InheritedScaffoldToJson(InheritedScaffold instance) => { - 'subsemantic': instance.subsemantic, 'UUID': instance.UUID, 'constraints': instance.constraints, 'layoutMainAxisSizing': diff --git a/lib/interpret_and_optimize/entities/subclasses/pb_intermediate_node.g.dart b/lib/interpret_and_optimize/entities/subclasses/pb_intermediate_node.g.dart index 2d452eca..671d8efd 100644 --- a/lib/interpret_and_optimize/entities/subclasses/pb_intermediate_node.g.dart +++ b/lib/interpret_and_optimize/entities/subclasses/pb_intermediate_node.g.dart @@ -8,7 +8,6 @@ part of 'pb_intermediate_node.dart'; Map _$PBIntermediateNodeToJson(PBIntermediateNode instance) => { - 'subsemantic': instance.subsemantic, 'UUID': instance.UUID, 'constraints': instance.constraints?.toJson(), 'layoutMainAxisSizing': @@ -18,8 +17,6 @@ Map _$PBIntermediateNodeToJson(PBIntermediateNode instance) => 'boundaryRectangle': Rectangle3D.toJson(instance.frame), 'style': instance.auxiliaryData?.toJson(), 'name': instance.name, - 'hashCode': instance.hashCode, - 'id': instance.id, }; const _$ParentLayoutSizingEnumMap = { diff --git a/lib/interpret_and_optimize/helpers/pb_intermediate_node_tree.dart b/lib/interpret_and_optimize/helpers/pb_intermediate_node_tree.dart index d41752cc..18635b88 100644 --- a/lib/interpret_and_optimize/helpers/pb_intermediate_node_tree.dart +++ b/lib/interpret_and_optimize/helpers/pb_intermediate_node_tree.dart @@ -128,7 +128,9 @@ class PBIntermediateTree extends DirectedGraph { /// Finds a [PBIntermediateNode] that is a child of `parent` of `type` in the [PBIntermediateTree], containing `name`. /// /// Returns null if not found. - PBIntermediateNode findChild(PBIntermediateNode parent, String name, Type type) { + @Deprecated('Use `this.where()` instead') + PBIntermediateNode findChild( + PBIntermediateNode parent, String name, Type type) { /// Check if the node is a match if (parent.name.contains(name) && parent.runtimeType == type) { return parent; @@ -260,6 +262,25 @@ class PBIntermediateTree extends DirectedGraph { return true; } + /// Inserts [insertee] between [parent] and [child]. + /// + /// As a side effect, [insertee] will be the new parent of [child]. + /// Additionally, [insertee] will be the new child of [parent]. + void injectBetween( + {PBIntermediateNode parent, + PBIntermediateNode child, + PBIntermediateNode insertee}) { + assert(parent != null && child != null && insertee != null); + + addEdges(insertee, [child]); + removeEdges(parent, [child]); + addEdges(parent, [insertee]); + + if(child.parent != insertee || insertee.parent != parent) { + _logger.warning('Injecting `insertee` may have had side effects on the graph.'); + } + } + /// Checks if the [PBIntermediateTree] is a [TREE_TYPE.SCREEN], /// meaning that the [rootNode] is of type [InheritedScaffold] bool isScreen() => tree_type == TREE_TYPE.SCREEN; diff --git a/lib/interpret_and_optimize/services/pb_layout_generation_service.dart b/lib/interpret_and_optimize/services/pb_layout_generation_service.dart index d4573196..5b021c42 100644 --- a/lib/interpret_and_optimize/services/pb_layout_generation_service.dart +++ b/lib/interpret_and_optimize/services/pb_layout_generation_service.dart @@ -9,6 +9,7 @@ import 'package:parabeac_core/interpret_and_optimize/entities/layouts/rules/layo import 'package:parabeac_core/interpret_and_optimize/entities/layouts/rules/stack_reduction_visual_rule.dart'; import 'package:parabeac_core/interpret_and_optimize/entities/layouts/stack.dart'; import 'package:parabeac_core/interpret_and_optimize/entities/layouts/group/group.dart'; +import 'package:parabeac_core/interpret_and_optimize/entities/pb_shared_master_node.dart'; import 'package:parabeac_core/interpret_and_optimize/entities/subclasses/pb_intermediate_constraints.dart'; import 'package:parabeac_core/interpret_and_optimize/entities/subclasses/pb_intermediate_node.dart'; import 'package:parabeac_core/interpret_and_optimize/entities/subclasses/pb_layout_intermediate_node.dart'; @@ -73,6 +74,9 @@ class PBLayoutGenerationService extends AITHandler { _applyPostConditionRules(tree.rootNode, context); _wrapLayout(tree, context); + if (tree.rootNode is PBSharedMasterNode) { + _applyComponentRules(tree, tree.rootNode); + } return Future.value(tree); } catch (e, stackTrace) { await Sentry.captureException(e, stackTrace: stackTrace); @@ -82,6 +86,31 @@ class PBLayoutGenerationService extends AITHandler { } } + /// Method that applies specific layout rules that only apply to the [PBSharedMasterNode]s. + /// + /// Namely, when a [PBSharedMasterNode] has only one child, we need to inject + /// a stack to ensure alignment. + void _applyComponentRules( + PBIntermediateTree tree, PBSharedMasterNode component) { + if (tree.childrenOf(component).length == 1 && + tree.childrenOf(component).first is! Group) { + var child = tree.childrenOf(component).first; + + /// TODO: Improve the way we create Stacks + var stack = PBIntermediateStackLayout( + name: component.name, + constraints: component.constraints.copyWith(), + ) + ..auxiliaryData = component.auxiliaryData + ..frame = component.frame.copyWith() + ..layoutCrossAxisSizing = component.layoutCrossAxisSizing + ..layoutMainAxisSizing = component.layoutMainAxisSizing; + + /// Insert the stack below the component. + tree.injectBetween(insertee: stack, parent: component, child: child); + } + } + void _wrapLayout(PBIntermediateTree tree, PBContext context) { // Get all the LayoutIntermediateNodes from the tree tree.whereType().forEach((tempGroup) { @@ -200,7 +229,15 @@ class PBLayoutGenerationService extends AITHandler { /// This conditional statement is to not mixup the elements that pertain to different [currentNode.attributeName]. /// For example, if [currentNode.attributeName] is an `appBar` and [nextNode.attributeName] is a `stack`, /// then you would not generate a [PBLayoutIntermediateNode] to encapsulate them both. - if (currentNode.attributeName != nextNode.attributeName) { + /// + /// currentNode and parent shall be skipped if they are either a Row or Column + /// because they should not be interpreted as Stack even though, their children + /// are too close to each other. + if (currentNode.attributeName != nextNode.attributeName || + currentNode is PBIntermediateColumnLayout || + currentNode is PBIntermediateRowLayout || + parent is PBIntermediateColumnLayout || + parent is PBIntermediateRowLayout) { break; } if (layout.satisfyRules(context, currentNode, nextNode) && diff --git a/lib/main.dart b/lib/main.dart index d1ec724f..15529209 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -1,6 +1,8 @@ import 'dart:async'; import 'dart:convert'; import 'dart:io'; +import 'package:parabeac_core/analytics/analytics_constants.dart'; +import 'package:parabeac_core/analytics/sentry_analytics_service.dart'; import 'package:parabeac_core/generation/flutter_project_builder/post_gen_tasks/comp_isolation/isolation_post_gen_task.dart'; import 'package:parabeac_core/generation/generators/util/pb_generation_view_data.dart'; import 'package:parabeac_core/interpret_and_optimize/entities/pb_shared_master_node.dart'; @@ -67,10 +69,11 @@ final parser = ArgParser() Future main(List args) async { await runZonedGuarded(() async { - await Sentry.init( - (p0) => p0.dsn = - 'https://6e011ce0d8cd4b7fb0ff284a23c5cb37@o433482.ingest.sentry.io/5388747', - ); + await Sentry.init((p0) { + p0.dsn = + 'https://6e011ce0d8cd4b7fb0ff284a23c5cb37@o433482.ingest.sentry.io/5388747'; + p0.tracesSampleRate = 1.0; + }); await runParabeac(args); }, (error, stackTrace) async { await Sentry.captureException(error); @@ -80,6 +83,13 @@ Future main(List args) async { } Future runParabeac(List args) async { + // Start sentry transaction + SentryService.startTransaction( + RUN_PARABEAC, + 'Conversion', + description: 'Total runtime of parabeac_core.', + ); + await checkConfigFile(); var log = Logger('Main'); var pubspec = File('pubspec.yaml'); @@ -140,6 +150,7 @@ ${parser.usage} // Exit if only generating PBDL if (MainInfo().exportPBDL) { exitCode = 0; + await SentryService.finishTransaction(RUN_PARABEAC); return; } var pbProject = PBProject.fromJson(pbdl.toJson()); @@ -168,7 +179,13 @@ ${parser.usage} MainInfo().configuration.generationConfiguration, fileSystemAnalyzer, project: pbProject); + SentryService.startChildTransactionFrom( + RUN_PARABEAC, + PRE_GEN, + description: 'Tasks to be done before generating the project.', + ); await fpb.preGenTasks(); + await SentryService.finishTransaction(PRE_GEN); /// Get ComponentIsolationService (if any), and add it to the list of services var isolationConfiguration = ComponentIsolationConfiguration.getConfiguration( @@ -184,6 +201,13 @@ ${parser.usage} var trees = []; + SentryService.startChildTransactionFrom( + RUN_PARABEAC, + INTERPRETATION, + description: + 'Runs services that interpret and optimize PBIntermediateNodes.', + ); + for (var tree in pbProject.forest) { var context = PBContext(processInfo.configuration); context.project = pbProject; @@ -195,27 +219,81 @@ ${parser.usage} context.tree = tree; tree.context = context; + SentryService.startChildTransactionFrom( + INTERPRETATION, + HANDLE_CHILDREN, + description: 'Lets each node in the tree detect and handle its children.', + ); + tree.forEach((child) => child.handleChildren(context)); + await SentryService.finishTransaction(HANDLE_CHILDREN); + + SentryService.startChildTransactionFrom( + INTERPRETATION, + INTERMEDIATE_SERVICES, + description: + 'Runs a variety of services to the tree to map it closely to Flutter.', + ); + var candidateTree = await interpretService.interpretAndOptimize(tree, context, pbProject); + await SentryService.finishTransaction(INTERMEDIATE_SERVICES); + if (candidateTree != null) { trees.add(candidateTree); } } + await SentryService.finishTransaction(INTERPRETATION); + + SentryService.startChildTransactionFrom( + RUN_PARABEAC, + GENERATION, + description: + 'Tasks that happen after interpretation of trees. These have to do with generating code, writing files, etc.', + ); + + SentryService.startChildTransactionFrom( + GENERATION, + COMMAND_QUEUE, + description: + 'Run command queue, which contains tasks like writing screens, symbols, etc.', + ); fpb.runCommandQueue(); + await SentryService.finishTransaction(COMMAND_QUEUE); + SentryService.startChildTransactionFrom( + GENERATION, + GEN_DRY_RUN, + description: 'Dry run to gather necessary information from trees.', + ); for (var tree in trees) { await fpb.genAITree(tree, tree.context, true); } + await SentryService.finishTransaction(GEN_DRY_RUN); + SentryService.startChildTransactionFrom( + GENERATION, + GEN_AIT, + description: 'Generates the code inside each tree.', + ); for (var tree in trees) { await fpb.genAITree(tree, tree.context, false); } + await SentryService.finishTransaction(GEN_AIT); + await SentryService.finishTransaction(GENERATION); + SentryService.startChildTransactionFrom( + RUN_PARABEAC, + POST_GEN, + description: 'Executes post generation tasks.', + ); fpb.executePostGenTasks(); + await SentryService.finishTransaction(POST_GEN); + + await SentryService.finishTransaction(RUN_PARABEAC); exitCode = 0; } diff --git a/pubspec.yaml b/pubspec.yaml index 8837c2e7..d8988eec 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -1,7 +1,7 @@ name: parabeac_core description: Continuous Design / Continuous Integration for Figma-to-Flutter -version: 2.6.1 +version: 2.7.0 # homepage: https://www.example.com environment: diff --git a/test/assets/SymbolTest-simp.sketch b/test/assets/SymbolTest-simp.sketch deleted file mode 100644 index 5e3cbde6..00000000 Binary files a/test/assets/SymbolTest-simp.sketch and /dev/null differ diff --git a/test/assets/SymbolTest.sketch b/test/assets/SymbolTest.sketch deleted file mode 100644 index 08a0ef4a..00000000 Binary files a/test/assets/SymbolTest.sketch and /dev/null differ diff --git a/test/assets/Unit Design System.sketch b/test/assets/Unit Design System.sketch deleted file mode 100644 index 1dab2c99..00000000 Binary files a/test/assets/Unit Design System.sketch and /dev/null differ diff --git a/test/assets/parabeac_demo_alt.sketch b/test/assets/parabeac_demo_alt.sketch deleted file mode 100644 index d77903ff..00000000 Binary files a/test/assets/parabeac_demo_alt.sketch and /dev/null differ diff --git a/test/golden/all_tests.dart b/test/golden/all_tests.dart new file mode 100644 index 00000000..9c35883f --- /dev/null +++ b/test/golden/all_tests.dart @@ -0,0 +1,6 @@ +import 'styling_test.dart' as styling_test; +void main(List args) { + /// TODO: When we add more tests, here we can run parabeac core and pass as arguments + /// the location of the generated file as parameter. + styling_test.main(); // TODO: Pass arguments +} \ No newline at end of file diff --git a/test/golden/golden_files/styling/helloworld.golden b/test/golden/golden_files/styling/helloworld.golden new file mode 100644 index 00000000..4c5e73a4 --- /dev/null +++ b/test/golden/golden_files/styling/helloworld.golden @@ -0,0 +1,57 @@ +// ********************************************************************************* +// PARABEAC-GENERATED CODE. DO NOT MODIFY. +// +// FOR MORE INFORMATION ON HOW TO USE PARABEAC, PLEASE VISIT docs.parabeac.com +// ********************************************************************************* + +import 'package:flutter/material.dart'; +import 'package:auto_size_text/auto_size_text.dart'; + +class Helloworld extends StatefulWidget { + final constraints; + final String? ovrHelloworld; + const Helloworld( + this.constraints, { + Key? key, + this.ovrHelloworld, + }) : super(key: key); + @override + _Helloworld createState() => _Helloworld(); +} + +class _Helloworld extends State { + _Helloworld(); + + @override + Widget build(BuildContext context) { + return Container( + decoration: BoxDecoration(), + child: Stack(children: [ + Positioned( + left: widget.constraints.maxWidth * 0.297, + width: widget.constraints.maxWidth * 0.41, + top: widget.constraints.maxHeight * 0.345, + height: widget.constraints.maxHeight * 0.221, + child: Container( + width: widget.constraints.maxWidth * 0.410, + height: widget.constraints.maxHeight * 0.221, + child: AutoSizeText( + widget.ovrHelloworld ?? 'Hello world', + style: TextStyle( + fontFamily: 'Roboto', + fontSize: 20.0, + fontWeight: FontWeight.w400, + letterSpacing: 0.0, + color: Colors.black, + ), + textAlign: TextAlign.left, + )), + ), + ])); + } + + @override + void dispose() { + super.dispose(); + } +} diff --git a/test/golden/golden_files/styling/primary_button.golden b/test/golden/golden_files/styling/primary_button.golden new file mode 100644 index 00000000..3fa9e8bc --- /dev/null +++ b/test/golden/golden_files/styling/primary_button.golden @@ -0,0 +1,60 @@ +// ********************************************************************************* +// PARABEAC-GENERATED CODE. DO NOT MODIFY. +// +// FOR MORE INFORMATION ON HOW TO USE PARABEAC, PLEASE VISIT docs.parabeac.com +// ********************************************************************************* + +import 'package:flutter/material.dart'; +import 'package:auto_size_text/auto_size_text.dart'; + +class PrimaryButton extends StatefulWidget { + final constraints; + final String? ovrClickMe; + const PrimaryButton( + this.constraints, { + Key? key, + this.ovrClickMe, + }) : super(key: key); + @override + _PrimaryButton createState() => _PrimaryButton(); +} + +class _PrimaryButton extends State { + _PrimaryButton(); + + @override + Widget build(BuildContext context) { + return Container( + decoration: BoxDecoration( + color: Color(0xff59afff), + borderRadius: BorderRadius.all(Radius.circular(20.0)), + ), + child: Stack(children: [ + Positioned( + left: widget.constraints.maxWidth * 0.336, + width: widget.constraints.maxWidth * 0.328, + top: widget.constraints.maxHeight * 0.39, + height: widget.constraints.maxHeight * 0.23, + child: Container( + width: widget.constraints.maxWidth * 0.328, + height: widget.constraints.maxHeight * 0.230, + child: AutoSizeText( + widget.ovrClickMe ?? 'Click Me', + style: TextStyle( + fontFamily: 'Roboto', + fontSize: 20.0, + fontWeight: FontWeight.w400, + letterSpacing: 0.0, + color: Colors.white, + ), + textAlign: TextAlign.left, + )), + ), + ])); + } + + @override + void dispose() { + super.dispose(); + } +} diff --git a/test/golden/golden_files/styling/primary_button_rect.golden b/test/golden/golden_files/styling/primary_button_rect.golden new file mode 100644 index 00000000..f1aa5585 --- /dev/null +++ b/test/golden/golden_files/styling/primary_button_rect.golden @@ -0,0 +1,81 @@ +// ********************************************************************************* +// PARABEAC-GENERATED CODE. DO NOT MODIFY. +// +// FOR MORE INFORMATION ON HOW TO USE PARABEAC, PLEASE VISIT docs.parabeac.com +// ********************************************************************************* + +import 'package:flutter/material.dart'; +import 'package:auto_size_text/auto_size_text.dart'; + +class PrimaryButtonRect extends StatefulWidget { + final constraints; + final String? ovrClickMe; + const PrimaryButtonRect( + this.constraints, { + Key? key, + this.ovrClickMe, + }) : super(key: key); + @override + _PrimaryButtonRect createState() => _PrimaryButtonRect(); +} + +class _PrimaryButtonRect extends State { + _PrimaryButtonRect(); + + @override + Widget build(BuildContext context) { + return Container( + decoration: BoxDecoration( + borderRadius: BorderRadius.all(Radius.circular(20.0)), + ), + child: Stack(children: [ + Positioned( + left: 0, + width: widget.constraints.maxWidth * 1.0, + top: 0, + height: widget.constraints.maxHeight * 1.0, + child: Stack(children: [ + Positioned( + left: 0, + width: 235.0, + top: 0, + height: 100.0, + child: Container( + width: widget.constraints.maxWidth * 1.000, + height: widget.constraints.maxHeight * 1.000, + decoration: BoxDecoration( + color: Color(0xff59afff), + borderRadius: BorderRadius.all(Radius.circular(20.0)), + ), + ), + ), + Positioned( + left: widget.constraints.maxWidth * 0.336, + width: widget.constraints.maxWidth * 0.328, + top: widget.constraints.maxHeight * 0.39, + height: widget.constraints.maxHeight * 0.23, + child: Container( + width: widget.constraints.maxWidth * 0.328, + height: widget.constraints.maxHeight * 0.230, + child: AutoSizeText( + widget.ovrClickMe ?? 'Click Me', + style: TextStyle( + fontFamily: 'Roboto', + fontSize: 20.0, + fontWeight: FontWeight.w400, + letterSpacing: 0.0, + color: Colors.white, + ), + textAlign: TextAlign.left, + )), + ), + ]), + ), + ])); + } + + @override + void dispose() { + super.dispose(); + } +} diff --git a/test/golden/golden_files/styling/secondary_button.golden b/test/golden/golden_files/styling/secondary_button.golden new file mode 100644 index 00000000..022be494 --- /dev/null +++ b/test/golden/golden_files/styling/secondary_button.golden @@ -0,0 +1,64 @@ +// ********************************************************************************* +// PARABEAC-GENERATED CODE. DO NOT MODIFY. +// +// FOR MORE INFORMATION ON HOW TO USE PARABEAC, PLEASE VISIT docs.parabeac.com +// ********************************************************************************* + +import 'package:flutter/material.dart'; +import 'package:auto_size_text/auto_size_text.dart'; + +class SecondaryButton extends StatefulWidget { + final constraints; + final String? ovrClickMe; + const SecondaryButton( + this.constraints, { + Key? key, + this.ovrClickMe, + }) : super(key: key); + @override + _SecondaryButton createState() => _SecondaryButton(); +} + +class _SecondaryButton extends State { + _SecondaryButton(); + + @override + Widget build(BuildContext context) { + return Container( + decoration: BoxDecoration( + color: Colors.white, + borderRadius: BorderRadius.all(Radius.circular(20.0)), + border: Border.all( + color: Color(0xff000000), + width: 2.0, + ), + ), + child: Stack(children: [ + Positioned( + left: widget.constraints.maxWidth * 0.336, + width: widget.constraints.maxWidth * 0.328, + top: widget.constraints.maxHeight * 0.39, + height: widget.constraints.maxHeight * 0.23, + child: Container( + width: widget.constraints.maxWidth * 0.328, + height: widget.constraints.maxHeight * 0.230, + child: AutoSizeText( + widget.ovrClickMe ?? 'Click Me', + style: TextStyle( + fontFamily: 'Roboto', + fontSize: 20.0, + fontWeight: FontWeight.w400, + letterSpacing: 0.0, + color: Colors.black, + ), + textAlign: TextAlign.left, + )), + ), + ])); + } + + @override + void dispose() { + super.dispose(); + } +} diff --git a/test/golden/golden_files/styling/styling.golden b/test/golden/golden_files/styling/styling.golden new file mode 100644 index 00000000..3b135c39 --- /dev/null +++ b/test/golden/golden_files/styling/styling.golden @@ -0,0 +1,431 @@ +// ********************************************************************************* +// PARABEAC-GENERATED CODE. DO NOT MODIFY. +// +// FOR MORE INFORMATION ON HOW TO USE PARABEAC, PLEASE VISIT docs.parabeac.com +// ********************************************************************************* + +import 'package:flutter/material.dart'; +import 'package:flutter_svg/flutter_svg.dart'; +import 'package:auto_size_text/auto_size_text.dart'; + +class StylingScreen extends StatefulWidget { + const StylingScreen({ + Key? key, + }) : super(key: key); + @override + _StylingScreen createState() => _StylingScreen(); +} + +class _StylingScreen extends State { + _StylingScreen(); + + @override + Widget build(BuildContext context) { + return Material( + color: Colors.white, + child: Stack(children: [ + Positioned( + left: 0, + width: 197.0, + top: 0, + height: 124.0, + child: Container( + width: 197.000, + height: 124.000, + decoration: BoxDecoration( + gradient: LinearGradient( + begin: Alignment(1.0000000596046466, -0.999999849557967), + end: Alignment(-1.0, 1.0000002100466796), + colors: [ + Color(0xffff0000), + Color(0x00c4c4c4), + ], + stops: [ + 0.0, + 1.0, + ], + tileMode: TileMode.clamp, + ), + ), + ), + ), + Positioned( + left: 0, + width: 197.0, + top: 154.0, + height: 120.0, + child: Container( + width: 197.000, + height: 120.000, + decoration: BoxDecoration( + color: Color(0x70991d66), + ), + ), + ), + Positioned( + left: 0, + width: 197.0, + top: 304.0, + height: 120.0, + child: Image.asset( + 'assets/images/circleradius.png', + package: 'golden_testing_project', + width: 197.000, + height: 120.000, + fit: BoxFit.none, + ), + ), + Positioned( + left: 0, + width: 197.0, + top: 454.0, + height: 120.0, + child: Image.asset( + 'assets/images/diamond.png', + package: 'golden_testing_project', + width: 197.000, + height: 120.000, + fit: BoxFit.none, + ), + ), + Positioned( + left: 0, + width: 197.0, + top: 604.0, + height: 120.0, + child: Container( + width: 197.000, + height: 120.000, + decoration: BoxDecoration( + color: Color(0x99b63a4c), + ), + ), + ), + Positioned( + left: 0, + width: 197.0, + top: 754.0, + height: 120.0, + child: Container( + width: 197.000, + height: 120.000, + decoration: BoxDecoration( + color: Color(0x99378c59), + border: Border.all( + color: Color(0xff0085ff), + width: 3.0, + ), + ), + ), + ), + Positioned( + left: 231.0, + width: 197.0, + top: 754.0, + height: 120.0, + child: Container( + width: 197.000, + height: 120.000, + decoration: BoxDecoration( + color: Color(0x99378c59), + border: Border.all( + color: Color(0xff0085ff), + width: 3.0, + ), + boxShadow: [ + BoxShadow( + color: Color(0x40000000), + spreadRadius: 4.0, + blurRadius: 4.0, + offset: Offset(-5.0, 4.0), + ), + ], + ), + ), + ), + Positioned( + left: 231.0, + width: 197.0, + top: 604.0, + height: 120.0, + child: Image.asset( + 'assets/images/2stroke.png', + package: 'golden_testing_project', + width: 197.000, + height: 120.000, + fit: BoxFit.none, + ), + ), + Positioned( + left: 231.0, + width: 197.0, + top: 454.0, + height: 120.0, + child: Container( + width: 197.000, + height: 120.000, + decoration: BoxDecoration( + color: Color(0x99378c59), + border: Border.all( + color: Color(0xff0085ff), + width: 3.0, + ), + ), + ), + ), + Positioned( + left: 231.0, + width: 197.0, + top: 304.0, + height: 120.0, + child: Container( + width: 197.000, + height: 120.000, + decoration: BoxDecoration( + color: Color(0x99378c59), + border: Border.all( + color: Color(0xff0085ff), + width: 3.0, + ), + boxShadow: [ + BoxShadow( + color: Color(0x40000000), + spreadRadius: 4.0, + blurRadius: 4.0, + offset: Offset(-5.0, 4.0), + ), + ], + ), + ), + ), + Positioned( + left: 231.0, + width: 197.0, + top: 154.0, + height: 120.0, + child: Image.asset( + 'assets/images/imagewithtint.png', + package: 'golden_testing_project', + width: 197.000, + height: 120.000, + fit: BoxFit.none, + ), + ), + Positioned( + left: 231.0, + width: 197.0, + top: 4.0, + height: 120.0, + child: Container( + width: 197.000, + height: 120.000, + decoration: BoxDecoration( + color: Color(0x99378c59), + border: Border.all( + color: Color(0xff0085ff), + width: 3.0, + ), + boxShadow: [ + BoxShadow( + color: Color(0x40000000), + spreadRadius: 4.0, + blurRadius: 4.0, + offset: Offset(-5.0, 4.0), + ), + ], + ), + ), + ), + Positioned( + left: 495.0, + width: 133.0, + top: 0, + height: 124.0, + child: Image.asset( + 'assets/images/ellipse1.png', + package: 'golden_testing_project', + width: 133.000, + height: 124.000, + fit: BoxFit.none, + ), + ), + Positioned( + left: 495.0, + width: 142.0, + top: 154.0, + height: 120.0, + child: SvgPicture.asset( + 'assets/images/polygon1.svg', + package: 'golden_testing_project', + width: 142.000, + height: 120.000, + fit: BoxFit.none, + ), + ), + Positioned( + left: 507.0, + width: 110.0, + top: 304.0, + height: 126.0, + child: SvgPicture.asset( + 'assets/images/star1.svg', + package: 'golden_testing_project', + width: 110.000, + height: 126.000, + fit: BoxFit.none, + ), + ), + Positioned( + left: 507.0, + width: 109.5, + top: 467.5, + height: 102.5, + child: SvgPicture.asset( + 'assets/images/vector1.svg', + package: 'golden_testing_project', + width: 109.500, + height: 102.500, + fit: BoxFit.none, + ), + ), + Positioned( + left: 483.0, + width: 154.0, + top: 604.0, + height: 118.0, + child: SvgPicture.asset( + 'assets/images/emptyframe.svg', + package: 'golden_testing_project', + width: 154.000, + height: 118.000, + fit: BoxFit.none, + ), + ), + Positioned( + left: 483.0, + width: 154.0, + top: 754.0, + height: 118.0, + child: Container( + width: 154.000, + height: 118.000, + decoration: BoxDecoration( + color: Color(0x99cd4900), + ), + child: Stack(children: [ + Positioned( + left: 39.0, + width: 67.0, + top: 42.0, + height: 42.0, + child: Container( + width: 67.000, + height: 42.000, + child: AutoSizeText( + 'Howdy', + style: TextStyle( + fontFamily: 'Roboto', + fontSize: 12.0, + fontWeight: FontWeight.w400, + letterSpacing: 0.0, + color: Colors.black, + ), + textAlign: TextAlign.left, + )), + ), + ])), + ), + Positioned( + left: 703.0, + width: 154.0, + top: 3.0, + height: 118.0, + child: Container( + width: 154.000, + height: 118.000, + decoration: BoxDecoration( + gradient: LinearGradient( + begin: Alignment(0.0, -1.0), + end: Alignment(0.0, 0.9999999999999998), + colors: [ + Color(0xff0038ff), + Color(0x0052ff00), + ], + stops: [ + 0.0, + 1.0, + ], + tileMode: TileMode.clamp, + ), + ), + child: Stack(children: [ + Positioned( + left: 39.0, + width: 67.0, + top: 42.0, + height: 42.0, + child: Container( + width: 67.000, + height: 42.000, + child: AutoSizeText( + 'Howdy', + style: TextStyle( + fontFamily: 'Roboto', + fontSize: 12.0, + fontWeight: FontWeight.w400, + letterSpacing: 0.0, + color: Colors.black, + ), + textAlign: TextAlign.left, + )), + ), + ])), + ), + Positioned( + left: 764.0, + width: 1.0, + top: 235.0, + height: 77.007, + child: SvgPicture.asset( + 'assets/images/line1.svg', + package: 'golden_testing_project', + width: 1.000, + height: 77.007, + fit: BoxFit.none, + ), + ), + Positioned( + left: 764.0, + width: 1.0, + top: 341.0, + height: 89.0, + child: SvgPicture.asset( + 'assets/images/line2.svg', + package: 'golden_testing_project', + width: 1.000, + height: 89.000, + fit: BoxFit.none, + ), + ), + Positioned( + left: 748.0, + width: 176.0, + top: 607.0, + height: 127.0, + child: Image.asset( + 'assets/images/rectangle1.png', + package: 'golden_testing_project', + width: 176.000, + height: 127.000, + fit: BoxFit.none, + ), + ), + ]), + ); + } + + @override + void dispose() { + super.dispose(); + } +} diff --git a/test/golden/styling_test.dart b/test/golden/styling_test.dart new file mode 100644 index 00000000..f033eb5a --- /dev/null +++ b/test/golden/styling_test.dart @@ -0,0 +1,92 @@ +import 'dart:io'; +import 'package:path/path.dart' as path; + +import 'package:test/test.dart'; + +void main() { + final projectName = 'golden_testing_project'; + final basePath = path.join(path.current, 'test', 'golden'); + final runtimeFilePath = path.join(basePath, projectName, 'lib'); + final goldenFilesPath = path.join(basePath, 'golden_files', 'styling'); + group('Styling Golden Test', () { + setUp(() async { + // Run Parabeac core to generate test file + await Process.run('dart', [ + 'parabeac.dart', + '-f', + 'AVFG9SWJOzJ4VAfM7uMVzr', + '-k', + '346172-e6b93eec-364f-4baa-bee8-24bf1e4d26da', + '-n', + '$projectName', + '-o', + '$basePath' + ]); + }); + test('Generating Styling and Comparing Golden File', () async { + /// Screen containing styling frames and rectangles + final goldenScreen = File(path.join(goldenFilesPath, 'styling.golden')); + + /// Empty frame containing single text that says "Hello World" + final helloWorldFrame = + File(path.join(goldenFilesPath, 'helloworld.golden')); + + /// Component that uses Color grouping directly on the component. + final primaryButton = + File(path.join(goldenFilesPath, 'primary_button.golden')); + + /// Component that uses Color grouping through a rectangle inside the component. + final primaryButtonRect = + File(path.join(goldenFilesPath, 'primary_button_rect.golden')); + + /// Component that uses a secondary Color grouping directly on the component. + final secondaryButton = + File(path.join(goldenFilesPath, 'secondary_button.golden')); + final goldenFiles = [ + goldenScreen, + helloWorldFrame, + primaryButton, + primaryButtonRect, + secondaryButton + ]; + + /// Runtime files corresponding to the above golden files + final widgetPath = path.join(runtimeFilePath, 'widgets', 'styling'); + final runtimeFile = File(path.join( + runtimeFilePath, 'screens', 'styling', 'styling_screen.g.dart')); + final helloWorldRuntimeFile = + File(path.join(widgetPath, 'helloworld.g.dart')); + final primaryButtonRuntimeFile = + File(path.join(widgetPath, 'primary_button.g.dart')); + final primaryButtonRectRuntimeFile = + File(path.join(widgetPath, 'primary_button_rect.g.dart')); + final secondaryButtonRuntimeFile = + File(path.join(widgetPath, 'secondary_button.g.dart')); + final runtimeFiles = [ + runtimeFile, + helloWorldRuntimeFile, + primaryButtonRuntimeFile, + primaryButtonRectRuntimeFile, + secondaryButtonRuntimeFile + ]; + + /// Iterate through golden/runtime files and compare them + for (var i = 0; i < goldenFiles.length; i++) { + var goldenFile = goldenFiles[i]; + var runtimeFile = runtimeFiles[i]; + var goldenFileLines = goldenFile.readAsLinesSync(); + var runtimeFileLines = runtimeFile.readAsLinesSync(); + + for (var j = 0; j < goldenFileLines.length; j++) { + expect(runtimeFileLines[j], goldenFileLines[j], + reason: 'File ${path.basename(goldenFile.path)} Line $j'); + } + } + }); + + tearDown(() async { + // Remove temporary project + await Process.start('rm', ['-rf', path.join(basePath, projectName)]); + }); + }); +} diff --git a/test/lib/controllers/interpret_test.dart b/test/lib/controllers/interpret_test.dart deleted file mode 100644 index eeec726e..00000000 --- a/test/lib/controllers/interpret_test.dart +++ /dev/null @@ -1,26 +0,0 @@ -import 'package:mockito/mockito.dart'; -import 'package:parabeac_core/controllers/interpret.dart'; -import 'package:parabeac_core/input/sketch/helper/sketch_project.dart'; -import 'package:parabeac_core/interpret_and_optimize/helpers/pb_configuration.dart'; -import 'package:test/test.dart'; - -class MockSketchProject extends Mock implements SketchProject {} - -void main() { - var interpret = Interpret(); - test('Interpret should instantiate', () { - var nameOfProject = 'test Project'; - interpret = Interpret(); - interpret.init(nameOfProject, PBConfiguration.genericConfiguration()); - expect(interpret, isNotNull); - }); - - test('Should return a PBIntermediateTree from a SketchNodeTree', () { - var intermediateTree = - interpret.interpretAndOptimize(MockSketchProject(), '', ''); - expect(intermediateTree, isNotNull); - }); - - test('interpret and optimize method should return a PBIntermediateNode', - () {}); -} diff --git a/test/lib/generation/commands/add_constant_command_test.dart b/test/lib/generation/commands/add_constant_command_test.dart deleted file mode 100644 index 55ddc99f..00000000 --- a/test/lib/generation/commands/add_constant_command_test.dart +++ /dev/null @@ -1,46 +0,0 @@ -import 'dart:io'; - -import 'package:mockito/mockito.dart'; -import 'package:parabeac_core/generation/generators/value_objects/file_structure_strategy/commands/add_constant_command.dart'; -import 'package:parabeac_core/generation/generators/value_objects/file_structure_strategy/commands/file_structure_command.dart'; -import 'package:parabeac_core/generation/generators/value_objects/file_structure_strategy/pb_file_structure_strategy.dart'; -import 'package:test/test.dart'; - -class MockFSStrategy extends Mock implements FileStructureStrategy {} - -void main() { - group('Add Constant Command', () { - var strategy; - FileStructureCommand const1; - var const1V = ['c1', 'String', '\'test\'']; - - FileStructureCommand const2; - var const2V = ['c2', 'int', '20']; - - setUp(() { - strategy = MockFSStrategy(); - const1 = AddConstantCommand('UUID', const1V[0], const1V[1], const1V[2]); - const2 = AddConstantCommand('UUID', const2V[0], const2V[1], const2V[2]); - when(strategy.GENERATED_PROJECT_PATH).thenReturn('temp/'); - }); - test('Testing Adding Constants To Project', () async { - await const1.write(strategy); - await const2.write(strategy); - - var verification = - verify(strategy.appendDataToFile(captureAny, any, any)); - - var capturedFuncs = verification.captured.whereType(); - - var data = capturedFuncs - .map((ModFile mod) => mod([])) - .reduce((value, element) => value + element); - - expect(verification.callCount, 2); - expect(data, [ - 'const ${const1V[1]} ${const1V[0]} = ${const1V[2]};', - 'const ${const2V[1]} ${const2V[0]} = ${const2V[2]};' - ]); - }); - }); -} diff --git a/test/lib/generation/commands/add_dependency_command_test.dart b/test/lib/generation/commands/add_dependency_command_test.dart deleted file mode 100644 index e1afe79c..00000000 --- a/test/lib/generation/commands/add_dependency_command_test.dart +++ /dev/null @@ -1,41 +0,0 @@ -import 'dart:io'; - -import 'package:mockito/mockito.dart'; -import 'package:parabeac_core/generation/generators/value_objects/file_structure_strategy/commands/add_dependency_command.dart'; -import 'package:parabeac_core/generation/generators/value_objects/file_structure_strategy/pb_file_structure_strategy.dart'; -import 'package:test/test.dart'; - -class MockFSStrategy extends Mock implements FileStructureStrategy {} - -class MockFile extends Mock implements File {} - -void main() { - group('Add Dependency Command', () { - AddDependencyCommand command; - FileStructureStrategy strategy; - var package; - var version; - - setUp(() { - package = 'auto_size_text'; - version = '^2.1.0'; - command = AddDependencyCommand('UUID', package, version); - strategy = MockFSStrategy(); - }); - - test('Testing the addition of package and asset path', () { - command.write(strategy); - var captured = verify(strategy.appendDataToFile(captureAny, any, any, - createFileIfNotFound: false)) - .captured - .first as ModFile; - expect(captured(['dependencies:', 'flutter:', ' assets:']), [ - 'dependencies:', - '$package: $version', - 'flutter:', - ' assets:', - '\t\t- assets/images/' - ]); - }); - }); -} diff --git a/test/lib/generation/commands/write_screen_command_test.dart b/test/lib/generation/commands/write_screen_command_test.dart deleted file mode 100644 index ce39f4bb..00000000 --- a/test/lib/generation/commands/write_screen_command_test.dart +++ /dev/null @@ -1,63 +0,0 @@ -import 'dart:io'; - -import 'package:mockito/mockito.dart'; -import 'package:parabeac_core/generation/generators/value_objects/file_structure_strategy/commands/file_structure_command.dart'; -import 'package:parabeac_core/generation/generators/value_objects/file_structure_strategy/commands/write_screen_command.dart'; -import 'package:parabeac_core/generation/generators/value_objects/file_structure_strategy/pb_file_structure_strategy.dart'; -import 'package:test/test.dart'; - -class MockFSStrategy extends Mock implements FileStructureStrategy {} - -void main() { - final path = '${Directory.current.path}/test/lib/generation/commands/'; - final screenData = ''' - import 'package:flutter/material.dart'; - - class TestScreen extends StatefulWidget { - const TestScreen() : super(); - @override - _TestScreen createState() => _TestScreen(); - } - - class _TestScreen extends State { - _TestScreen(); - - @override - Widget build(BuildContext context) { - return Scaffold( - body: Container(), - ); - } - - @override - void dispose() { - super.dispose(); - } - } - '''; - group('Add Screen Command', () { - FileStructureCommand command; - FileStructureStrategy strategy; - - setUp(() { - command = WriteScreenCommand('UUID', 'test_screen.dart', '', screenData); - strategy = MockFSStrategy(); - when(strategy.GENERATED_PROJECT_PATH).thenReturn('temp/'); - }); - - test('Testing writing a screen', () async { - await command.write(strategy); - var verification = verify(strategy.writeDataToFile( - captureAny, any, captureAny, - UUID: anyNamed('UUID'))); - - /// Make sure we are writting to the file using the strategy - expect(verification.captured.first, screenData); - expect(verification.callCount, 1); - - ///Make sure that we are using the same name for the file that is going to - ///be written into the file system. - expect(verification.captured.contains('test_screen.dart'), isTrue); - }); - }); -} diff --git a/test/lib/generation/commands/write_symbol_command_test.dart b/test/lib/generation/commands/write_symbol_command_test.dart deleted file mode 100644 index 8d7b51d2..00000000 --- a/test/lib/generation/commands/write_symbol_command_test.dart +++ /dev/null @@ -1,55 +0,0 @@ -import 'package:mockito/mockito.dart'; -import 'package:parabeac_core/generation/generators/value_objects/file_structure_strategy/commands/file_structure_command.dart'; -import 'package:parabeac_core/generation/generators/value_objects/file_structure_strategy/commands/write_symbol_command.dart'; -import 'package:parabeac_core/generation/generators/value_objects/file_structure_strategy/pb_file_structure_strategy.dart'; -import 'package:test/test.dart'; - -class MockFSStrategy extends Mock implements FileStructureStrategy {} - -void main() { - final symData = ''' - import 'package:flutter/material.dart'; - - class TestSymbol extends State { - TestSymbol(); - - @override - Widget build(BuildContext context) { - return Scaffold( - body: Container(), - ); - } - - @override - void dispose() { - super.dispose(); - } - } - '''; - group('Add Symbol Command', () { - FileStructureCommand command; - FileStructureStrategy strategy; - - setUp(() { - command = WriteSymbolCommand('UUID', 'test_symbol.dart', symData); - strategy = MockFSStrategy(); - when(strategy.GENERATED_PROJECT_PATH).thenReturn('temp/'); - }); - - test('Makes sure that the command is using the strategy to write a file', - () async { - await command.write(strategy); - var verification = verify(strategy.writeDataToFile( - captureAny, any, captureAny, - UUID: anyNamed('UUID'))); - - /// Make sure we are writting to the file using the strategy - expect(verification.captured.first, symData); - expect(verification.callCount, 1); - - ///Make sure that we are using the same name for the file that is going to - ///be written into the file system. - expect(verification.captured.contains('test_symbol.dart'), isTrue); - }); - }); -} diff --git a/test/lib/generation/file_system_analyzer_test.dart b/test/lib/generation/file_system_analyzer_test.dart deleted file mode 100644 index f3b114bc..00000000 --- a/test/lib/generation/file_system_analyzer_test.dart +++ /dev/null @@ -1,84 +0,0 @@ -import 'dart:async'; - -import 'package:file/file.dart'; -import 'package:file/memory.dart'; -import 'package:parabeac_core/generation/flutter_project_builder/file_system_analyzer.dart'; -import 'package:test/test.dart'; -import 'package:path/path.dart' as p; - -void main() { - group('$FileSystemAnalyzer functions on the current FileSystem', () { - /// Stream used to expose the [FileSystem.opHandle] constructor method - /// to al the test that might want to use it. - StreamController fileSystemUpdates; - FileSystemAnalyzer fileSystemAnalyzer; - FileSystem fileSystem; - final projectPath = 'Path/to/project/'; - setUp(() async { - ///contexting - fileSystemUpdates = StreamController.broadcast(); - fileSystem = MemoryFileSystem.test( - opHandle: (context, operation) => fileSystemUpdates.add(operation)); - await fileSystem.currentDirectory - .childDirectory(projectPath) - .create(recursive: true); - - fileSystemAnalyzer = - FileSystemAnalyzer(projectPath, fileSystem: fileSystem); - }); - - test( - '$FileSystemAnalyzer checking for the existince of a project directory', - () async { - /// create some files within the [projectPath] that we can test the indexing of its files. - var isProjectAvailable = await fileSystemAnalyzer.projectExist(); - expect(isProjectAvailable, true); - }); - - test( - '$FileSystemAnalyzer indexing files within the project path that is passed to it.', - () async { - var cDir = fileSystem.currentDirectory; - var testingExtension = '.dart'; - var testingExtension2 = '.js'; - var files = [ - './example_directory/some_file.dart', - './parabeac_file.g.dart', - './inside/multiple/directories/inside.dart', - './testing_extension/should_be_ignored.txt', - './another_extension/test/.gitignore', - './testing_raw_extension_input/index.js' - ].map((file) => p.join(projectPath, p.normalize(file))); - - /// Setting up the files within the [fileSystem.currentDirectory] - files.forEach((file) { - cDir.childFile(file).createSync(recursive: true); - }); - - /// [fileSystemAnalyzer] should strip anything that is not the actual file extension - fileSystemAnalyzer.addFileExtension('extension$testingExtension'); - expect(fileSystemAnalyzer.extensions.contains(testingExtension), true); - - // [fileSystemAnalyzer] should also accept raw extension - fileSystemAnalyzer.addFileExtension(testingExtension2); - expect(fileSystemAnalyzer.extensions.contains(testingExtension2), true); - - await fileSystemAnalyzer.indexProjectFiles(); - - expect( - files.where((path) { - var ext = p.extension(path); - return ext == testingExtension || ext == testingExtension2; - }).length, - fileSystemAnalyzer.paths.length, - reason: - '$FileSystemAnalyzer should contain one less than the number of files because of the extension filter we set (.dart files).'); - fileSystemAnalyzer.paths.forEach((indexedFile) { - var pathFound = files.contains(indexedFile); - expect(pathFound, true, - reason: - '$FileSystemAnalyzer should index all of the files within directory'); - }); - }); - }); -} diff --git a/test/lib/generation/file_system_test.dart b/test/lib/generation/file_system_test.dart deleted file mode 100644 index b09e490e..00000000 --- a/test/lib/generation/file_system_test.dart +++ /dev/null @@ -1,157 +0,0 @@ -import 'dart:io'; - -import 'package:mockito/mockito.dart'; -import 'package:parabeac_core/generation/flutter_project_builder/file_system_analyzer.dart'; -import 'package:parabeac_core/generation/generators/value_objects/file_structure_strategy/commands/write_screen_command.dart'; -import 'package:parabeac_core/generation/generators/value_objects/file_structure_strategy/file_ownership_policy.dart'; -import 'package:parabeac_core/generation/generators/value_objects/file_structure_strategy/pb_file_structure_strategy.dart'; -import 'package:parabeac_core/interpret_and_optimize/helpers/pb_project.dart'; -import 'package:parabeac_core/generation/generators/writers/pb_page_writer.dart'; -import 'package:test/test.dart'; -import 'package:path/path.dart' as p; - -class FileSystemAnalyzerMock extends Mock implements FileSystemAnalyzer {} - -class FileMock extends Mock implements File { - @override - String path; -} - -class PageWriterMock extends Mock implements PBPageWriter {} - -class ProjectMock extends Mock implements PBProject {} - -/// Its a [FileStructureStrategy] deticated for testing some of the methods for [FileStructureStrategy], as -/// I can not just use [Mock] on a particular methods [FileStructureStrategy.getFile]. -class FileStructureSystemMock extends FileStructureStrategy { - final FileMock file; - final FileSystemAnalyzer analyzer; - String path; - FileStructureSystemMock(String GENERATED_PROJECT_PATH, - PBPageWriter pageWriter, PBProject pbProject, this.file, this.analyzer) - : super(GENERATED_PROJECT_PATH, pageWriter, pbProject, analyzer); - - @override - File getFile(String directory, String name) { - file.path = p.join(directory, name); - return file; - } -} - -void main() { - group( - '$FileOwnershipPolicy returning the proper extension given an existing file extension', - () { - String existingFileExtension; - FileOwnershipPolicy ownershipPolicy; - setUp(() { - ownershipPolicy = DotGFileOwnershipPolicy(); - }); - - test('Testing the .g extension modification', () { - existingFileExtension = '.dart'; - var extDevFile = existingFileExtension; - var pbcDevFile = '.g$existingFileExtension'; - - var reasonMessage = (actualExt, ownership, correctExt) => - 'Not returning the correct file extension ($correctExt) when its $ownership own by passing $actualExt'; - - var actualDevExt = ownershipPolicy.getFileExtension( - FileOwnership.DEV, existingFileExtension); - expect(actualDevExt, extDevFile, - reason: reasonMessage(actualDevExt, FileOwnership.DEV, extDevFile)); - - var actualPBCExt = ownershipPolicy.getFileExtension( - FileOwnership.PBC, existingFileExtension); - expect(actualPBCExt, pbcDevFile, - reason: reasonMessage( - actualPBCExt, FileOwnership.PBC, existingFileExtension)); - }); - }); - - group( - '$FileStructureStrategy only re-writing files that are [${FileOwnership.PBC}] owned and only once for [${FileOwnership.DEV}]', - () { - final generatedProjectPath = '/GeneratedProjectPath/'; - FileSystemAnalyzer analyzer; - FileStructureStrategy fileStructureStrategy; - File fileMock; - - /// Simple function to [verify] the arguments or call count of calling - /// [File.writeAsStringSync]. - /// - /// Because of no calls to a method and calling [verify] will cause an error, therefore, - /// if the caller of the [commandVerification] funciton expects no calls, then it would have to pass - /// `true` for [noCalls]. This flag will force the function to call [verifyNever] instead of [verify] - var commandVerification = - (List paths, FileOwnership ownership, {bool noCalls = false}) { - reset(fileMock); - paths.forEach((path) { - var baseName = p.basename(path); - var ext = p.extension(path); - - /// Files like `.gitignore` are going to be evaluated to [ext.isEmpty] by [p.extension], - /// therefore, I am padding the [baseName] - ext = ext.isEmpty ? baseName : ext; - - var command = WriteScreenCommand('UUID_$baseName', - baseName == ext ? '' : baseName, p.dirname(path), 'CODE_$baseName', - ownership: ownership, fileExtension: ext); - fileStructureStrategy.commandCreated(command); - }); - return noCalls - ? verifyNever(fileMock.writeAsStringSync(any)) - : verify(fileMock.writeAsStringSync(any)); - }; - - var devFiles = [ - './some_dev_files/dev_file.dart', - './other_dev_files/main.dart', - './random_dev_files/readme.md', - './random_dev_files/.gitignore', - ]; - - var pbcFiles = [ - './files_to_replace/another_depth/screen_one.g.dart', - './files_to_replace/another_depth/screen_two.g.dart' - ]; - - /// Contains both the [devFiles] and the [pbcFiles]. - List existingFiles; - setUp(() { - /// Adding the [generatedProjectPath] to [devFiles] & [pbcFiles]. - var addingGenProjectPath = - (path) => p.normalize(p.join(generatedProjectPath, path)); - pbcFiles = pbcFiles.map(addingGenProjectPath).toList(); - devFiles = devFiles.map(addingGenProjectPath).toList(); - - existingFiles = pbcFiles + devFiles; - analyzer = FileSystemAnalyzerMock(); - - fileMock = FileMock(); - fileStructureStrategy = FileStructureSystemMock(generatedProjectPath, - PageWriterMock(), ProjectMock(), fileMock, analyzer); - - when(analyzer.paths).thenReturn(existingFiles); - when(analyzer.containsFile(any)).thenAnswer((realInvocation) => - existingFiles.contains(realInvocation.positionalArguments.first)); - }); - - test('$FileStructureStrategy replacing only [${FileOwnership.PBC}]', () { - var verification = commandVerification(pbcFiles, FileOwnership.PBC); - expect(verification.callCount, pbcFiles.length, - reason: - '$FileStructureStrategy did not replace the correct amount of files (${devFiles.length}), it only replaced ${verification.callCount}'); - }); - - test( - '$FileStructureStrategy not replacing [${FileOwnership.DEV}] owned files', - () { - var verification = - commandVerification(devFiles, FileOwnership.DEV, noCalls: true); - expect(verification.callCount, 0, - reason: - '$FileStructureStrategy should not be able to replace the ${FileOwnership.DEV} files, which its doing.'); - }); - }); -} diff --git a/test/lib/generation/generator_test.dart b/test/lib/generation/generator_test.dart deleted file mode 100644 index c544d6dc..00000000 --- a/test/lib/generation/generator_test.dart +++ /dev/null @@ -1,108 +0,0 @@ -import 'dart:math'; - -import 'package:parabeac_core/generation/flutter_project_builder/import_helper.dart'; -import 'package:parabeac_core/generation/generators/pb_flutter_generator.dart'; -import 'package:parabeac_core/generation/generators/util/pb_generation_project_data.dart'; -import 'package:parabeac_core/generation/generators/util/pb_generation_view_data.dart'; -import 'package:parabeac_core/generation/generators/visual-widgets/pb_container_gen.dart'; -import 'package:parabeac_core/generation/generators/visual-widgets/pb_text_gen.dart'; -import 'package:parabeac_core/interpret_and_optimize/entities/inherited_container.dart'; -import 'package:parabeac_core/interpret_and_optimize/entities/inherited_text.dart'; -import 'package:parabeac_core/interpret_and_optimize/helpers/pb_context.dart'; -import 'package:parabeac_core/interpret_and_optimize/helpers/pb_project.dart'; -import 'package:parabeac_core/interpret_and_optimize/state_management/intermediate_auxillary_data.dart'; -import 'package:test/test.dart'; -import 'package:mockito/mockito.dart'; - -class MockInheritedContainer extends Mock implements InheritedContainer {} - -class MockInheritedText extends Mock implements InheritedText {} - -class MockManager extends Mock implements PBFlutterGenerator {} - -class MockContext extends Mock implements PBContext {} - -class MockData extends Mock implements IntermediateAuxiliaryData {} - -class MockPBContext extends Mock implements PBContext {} - -class MockProject extends Mock implements PBProject {} - -class MockGenProjectData extends Mock implements PBGenerationProjectData {} - -class MockPBGenViewData extends Mock implements PBGenerationViewData {} - -void main() { - group('Generator test', () { - var mockManager, mockGenerator, mockTextGenerator; - var mockInheritedContainer, mockInheritedText; - var mockContext, mockData; - var mockPBContext; - var mockProject; - var mockGenProjectData; - var mockGenViewData; - setUp(() { - mockInheritedContainer = MockInheritedContainer(); - mockInheritedText = MockInheritedText(); - mockContext = MockContext(); - mockData = MockData(); - mockPBContext = MockPBContext(); - mockProject = MockProject(); - mockGenProjectData = MockGenProjectData(); - mockGenViewData = MockPBGenViewData(); - - when(mockInheritedContainer.child).thenReturn(mockInheritedText); - - when((mockInheritedContainer as MockInheritedContainer).auxiliaryData) - .thenReturn(mockData); - - when((mockInheritedText as MockInheritedText).currentContext) - .thenReturn(mockPBContext); - - when((mockPBContext as MockPBContext).project).thenReturn(mockProject); - - when((mockProject as MockProject).genProjectData) - .thenReturn(mockGenProjectData); - - when((mockInheritedText as MockInheritedText).managerData) - .thenReturn(mockGenViewData); - - when(mockInheritedContainer.topLeftCorner).thenReturn(Point(0, 0)); - - when(mockInheritedContainer.bottomRightCorner) - .thenReturn(Point(100, 100)); - - when(mockInheritedText.name).thenReturn('Test Name'); - when(mockInheritedText.auxiliaryData).thenReturn(mockData); - - mockTextGenerator = PBTextGen(); - - when(mockInheritedText.generator).thenReturn(mockTextGenerator); - - when(mockInheritedText.isTextParameter).thenReturn(false); - - when(mockInheritedText.text).thenReturn('Test Text'); - - mockManager = PBFlutterGenerator(ImportHelper()); - mockGenerator = PBContainerGenerator(); - }); - - test('', () { - var result = (mockGenerator as PBContainerGenerator) - .generate(mockInheritedContainer, mockContext); - - expect(result != null, true); - expect(result is String, true); - - // Do not modify - expect(result, '''Container(child: AutoSizeText( -'Test Text', -style: TextStyle( -), -))'''); - - // Print statement to check the result visually - // print(result); - }); - }); -} diff --git a/test/lib/generation/import_test.dart b/test/lib/generation/import_test.dart deleted file mode 100644 index 79a30152..00000000 --- a/test/lib/generation/import_test.dart +++ /dev/null @@ -1,120 +0,0 @@ -import 'dart:io'; - -import 'package:mockito/mockito.dart'; -import 'package:parabeac_core/generation/flutter_project_builder/import_helper.dart'; -import 'package:parabeac_core/generation/generators/util/topo_tree_iterator.dart'; -import 'package:parabeac_core/generation/generators/value_objects/file_structure_strategy/commands/write_screen_command.dart'; -import 'package:parabeac_core/generation/generators/value_objects/file_structure_strategy/flutter_file_structure_strategy.dart'; -import 'package:parabeac_core/generation/generators/value_objects/file_structure_strategy/pb_file_structure_strategy.dart'; -import 'package:parabeac_core/interpret_and_optimize/helpers/pb_intermediate_node_tree.dart'; -import 'package:test/test.dart'; -import 'package:parabeac_core/interpret_and_optimize/entities/subclasses/pb_intermediate_node.dart'; - -class NodeMock extends Mock implements PBIntermediateNode {} - -class FileStructureStrategyMock extends Mock implements FileStructureStrategy {} - -class FileMock extends Mock implements File {} - -void main() { - group('[PBIntermediateTree] process order test', () { - PBIntermediateTree tree0, tree1, tree2; - setUp(() { - tree0 = PBIntermediateTree('Tree0'); - tree0.rootNode = NodeMock(); - when(tree0.rootNode.UUID).thenReturn('00-00-01'); - when(tree0.rootNode.name).thenReturn('Tree0'); - - tree1 = PBIntermediateTree('Tree1'); - tree1.rootNode = NodeMock(); - when(tree1.rootNode.UUID).thenReturn('00-00-02'); - when(tree1.rootNode.name).thenReturn('Tree1'); - - tree2 = PBIntermediateTree('Tree2'); - tree2.rootNode = NodeMock(); - when(tree2.rootNode.UUID).thenReturn('00-00-03'); - when(tree2.rootNode.name).thenReturn('Tree2'); - }); - test('Testing how [PBIntermediateTree] are processed.', () { - ///[PBIntermediateTree]s that are going to be generated. The treees inside of the list - ///are dependent on each other, therefore, to ensure import availability, trees need to - ///be written in a certain manner. - var pbIntermeidateTrees = []; - - /// `tree1` is going to depend on `tree0` and `tree0` depends on `tree2`. - /// t1 --> t0 --> t2 - /// The correct order should be: `[t2, t0, t1]`, - /// because t2 has dependets, therefore, it needs to be processed first. - tree1.addDependent(tree0); - tree0.addDependent(tree2); - - //The initial order should't manner the end result - pbIntermeidateTrees.addAll([tree0, tree2, tree1]); - - var dependencyIterator = - IntermediateTopoIterator(pbIntermeidateTrees); - var correctOrder = [tree2, tree0, tree1].iterator; - while (dependencyIterator.moveNext() && correctOrder.moveNext()) { - expect(dependencyIterator.current == correctOrder.current, true, - reason: - 'The [PBIntermediateTree]s are not being processed in the correct order in respect to their dependencies'); - } - }); - - test('Testing cycles in the list [PBIntermediateTree] are processed', () { - ///[PBIntermediateTree]s that are going to be generated. The treees inside of the list - ///are dependent on each other, therefore, to ensure import availability, trees need to - ///be written in a certain manner. - var pbIntermeidateTrees = []; - - /// a cycle between all three [PBIntermediateTree]s - /// - /// - /// `tree1` --> `tree0` --> `tree2` - /// <\ / - /// ---------- - tree1.addDependent(tree0); - tree0.addDependent(tree2); - tree0.addDependent(tree1); - pbIntermeidateTrees.addAll([tree0, tree2, tree1]); - - expect( - () => - IntermediateTopoIterator(pbIntermeidateTrees), - throwsA(isA()), - reason: - '[CyclicDependencyError] is not being thrown when there is a cycle in the graph'); - }); - }); - group('Import paths extraction test', () { - FileStructureStrategy _fileStructureStrategy; - ImportHelper importHelper; - var completePath = - 'desktop/project/lib/screens/homescreen/some_dart_page.dart'; - var genPath = 'desktop/project/'; - setUp(() { - _fileStructureStrategy = FileStructureStrategyMock(); - importHelper = ImportHelper(); - - when(_fileStructureStrategy.writeDataToFile(any, any, any, - UUID: anyNamed('UUID'))) - .thenAnswer((invocation) { - var dir = invocation.positionalArguments[1]; - var name = invocation.positionalArguments[2]; - var uuid = invocation.namedArguments['UUID'] ?? 'UUID'; - importHelper.fileCreated( - FlutterFileStructureStrategy(genPath, null, null) - .getFile(dir, name) - .path, - uuid); - }); - when(_fileStructureStrategy.GENERATED_PROJECT_PATH).thenReturn(genPath); - }); - test('Testing import generation when imports are generated', () async { - var command = WriteScreenCommand( - 'UUID', 'some_dart_page.dart', 'homescreen/', 'dummy code'); - await command.write(_fileStructureStrategy); - expect(importHelper.getImport('UUID').first, completePath); - }); - }); -} diff --git a/test/lib/input_services/appbar_detection_test.dart b/test/lib/input_services/appbar_detection_test.dart deleted file mode 100644 index 475c367e..00000000 --- a/test/lib/input_services/appbar_detection_test.dart +++ /dev/null @@ -1,34 +0,0 @@ -import 'package:mockito/mockito.dart'; -import 'package:parabeac_core/eggs/injected_app_bar.dart'; -import 'package:parabeac_core/input/sketch/entities/layers/abstract_layer.dart'; -import 'package:parabeac_core/input/sketch/entities/objects/frame.dart'; -import 'package:parabeac_core/interpret_and_optimize/helpers/pb_context.dart'; -import 'package:parabeac_core/generation/generators/plugins/pb_plugin_node.dart'; -import 'package:parabeac_core/interpret_and_optimize/helpers/pb_plugin_list_helper.dart'; -import 'package:test/test.dart'; - -class SketchNodeMock extends Mock implements SketchNode {} - -class ContextMock extends Mock implements PBContext {} - -void main() { - group('Detecting appbar from semantic', () { - SketchNodeMock sketchNode; - PBPluginListHelper helper; - ContextMock context; - setUp(() { - context = ContextMock(); - helper = PBPluginListHelper(); - helper.initPlugins(context); - sketchNode = SketchNodeMock(); - when(sketchNode.name).thenReturn('element'); - when(sketchNode.boundaryRectangle) - .thenReturn(Frame(x: 0, y: 0, width: 300, height: 20)); - }); - - test('Checking for appbar', () { - var pNode = helper.returnAllowListNodeIfExists(sketchNode); - expect(pNode.runtimeType, InjectedAppbar); - }); - }); -} diff --git a/test/lib/input_services/edge_adjacent_detection_test.dart b/test/lib/input_services/edge_adjacent_detection_test.dart deleted file mode 100644 index ea623e3e..00000000 --- a/test/lib/input_services/edge_adjacent_detection_test.dart +++ /dev/null @@ -1,142 +0,0 @@ -import 'package:mockito/mockito.dart'; -import 'package:parabeac_core/controllers/main_info.dart'; -import 'package:parabeac_core/generation/generators/visual-widgets/pb_bitmap_gen.dart'; -import 'package:parabeac_core/generation/generators/visual-widgets/pb_container_gen.dart'; -import 'package:parabeac_core/input/sketch/entities/layers/abstract_layer.dart'; -import 'package:parabeac_core/input/sketch/entities/objects/frame.dart'; -import 'package:parabeac_core/input/sketch/entities/style/border.dart'; -import 'package:parabeac_core/input/sketch/entities/style/color.dart'; -import 'package:parabeac_core/input/sketch/entities/style/style.dart'; -import 'package:parabeac_core/interpret_and_optimize/entities/inherited_shape_path.dart'; -import 'package:parabeac_core/interpret_and_optimize/helpers/pb_context.dart'; -import 'package:parabeac_core/input/sketch/entities/layers/shape_path.dart'; -import 'package:test/test.dart'; - -class SketchNodeMock extends Mock implements SketchNode {} - -class ContextMock extends Mock implements PBContext {} - -class ShapePathMock extends Mock implements ShapePath {} - -void main() { - group('Test for detecting a vertical line', () { - ShapePathMock sketchNode; - ContextMock context; - InheritedShapePath shapePath; - - setUp(() { - sketchNode = ShapePathMock(); - context = ContextMock(); - MainInfo().outputPath = ''; - MainInfo().pngPath = ''; - - when(sketchNode.points).thenReturn([ - { - 'point': '{0,0}', - }, - { - 'point': '{0,50}', - }, - ]); - - when(sketchNode.boundaryRectangle) - .thenReturn(Frame(x: 0, y: 0, width: 2, height: 50)); - - when(sketchNode.style).thenReturn(Style( - borders: [ - Border( - color: Color( - a: 1, - r: 1, - g: 1, - b: 1, - ), - ), - ], - )); - - when(sketchNode.UUID).thenReturn(''); - shapePath = - InheritedShapePath(sketchNode, 'testName', currentContext: context); - }); - - test('Detecting line', () { - expect(shapePath.generator.runtimeType, PBContainerGenerator); - }); - }); - - group('Test for detecting a horizontal line', () { - ShapePathMock sketchNode; - ContextMock context; - InheritedShapePath shapePath; - - setUp(() { - sketchNode = ShapePathMock(); - context = ContextMock(); - - when(sketchNode.points).thenReturn([ - { - 'point': '{0,0}', - }, - { - 'point': '{50,0}', - }, - ]); - - when(sketchNode.boundaryRectangle) - .thenReturn(Frame(x: 0, y: 0, width: 50, height: 2)); - - when(sketchNode.style).thenReturn(Style( - borders: [ - Border( - color: Color( - a: 1, - r: 1, - g: 1, - b: 1, - ), - ), - ], - )); - - when(sketchNode.UUID).thenReturn(''); - shapePath = - InheritedShapePath(sketchNode, 'testName', currentContext: context); - }); - - test('Detecting line', () { - expect(shapePath.generator.runtimeType, PBContainerGenerator); - }); - }); - - group('Test for detecting a ShapePath', () { - ShapePathMock sketchNode; - ContextMock context; - InheritedShapePath shapePath; - - setUp(() { - sketchNode = ShapePathMock(); - context = ContextMock(); - - when(sketchNode.points).thenReturn([ - { - 'point': '{0,0}', - }, - { - 'point': '{50,50}', - }, - ]); - - when(sketchNode.boundaryRectangle) - .thenReturn(Frame(x: 0, y: 0, width: 50, height: 50)); - - when(sketchNode.UUID).thenReturn(''); - shapePath = - InheritedShapePath(sketchNode, 'testName', currentContext: context); - }); - - test('Detecting Shape', () { - expect(shapePath.generator.runtimeType, PBBitmapGenerator); - }); - }); -} diff --git a/test/lib/input_services/figma_to_map_test.dart b/test/lib/input_services/figma_to_map_test.dart deleted file mode 100644 index e90a2351..00000000 --- a/test/lib/input_services/figma_to_map_test.dart +++ /dev/null @@ -1,25 +0,0 @@ -import 'dart:io'; -import 'package:parabeac_core/input/figma/helper/api_call_service.dart'; -import 'package:test/test.dart'; - -void main() async { - var figmaFileID = 'https://api.figma.com/v1/files/cmaAGe2hwCp7A5pmEQ2C80'; - var figmaAPIKey = Platform.environment['FIG_API_KEY']; - group( - 'Checking that Figma is getting interpreted as a Map', - () { - setUp(() {}); - test('Figma to Map', () async { - var result = await APICallService.makeAPICall(figmaFileID, figmaAPIKey); - expect(result is Map, true); - expect(result.isNotEmpty, true); - expect(result.containsKey('document'), true); - expect(result['document'].isNotEmpty, true); - expect(result.containsKey('components'), true); - expect(result['document']['type'], 'DOCUMENT'); - expect(result['document']['children'].isNotEmpty, true); - }); - }, - skip: !Platform.environment.containsKey('FIG_API_KEY'), - ); -} diff --git a/test/lib/input_services/input_to_pbdl_test.dart b/test/lib/input_services/input_to_pbdl_test.dart deleted file mode 100644 index 3aac7ee9..00000000 --- a/test/lib/input_services/input_to_pbdl_test.dart +++ /dev/null @@ -1,59 +0,0 @@ -import 'dart:io'; -import 'package:parabeac_core/controllers/figma_controller.dart'; -import 'package:parabeac_core/controllers/main_info.dart'; -import 'package:parabeac_core/controllers/sketch_controller.dart'; -import 'package:parabeac_core/input/figma/helper/api_call_service.dart'; -import 'package:parabeac_core/input/figma/helper/figma_page.dart'; -import 'package:parabeac_core/input/figma/helper/figma_project.dart'; -import 'package:parabeac_core/input/sketch/helper/sketch_page.dart'; -import 'package:parabeac_core/input/sketch/helper/sketch_project.dart'; -import 'package:parabeac_core/input/sketch/services/input_design.dart'; -import 'package:test/test.dart'; - -void main() { - var figmaFileID = 'https://api.figma.com/v1/files/cmaAGe2hwCp7A5pmEQ2C80'; - var figmaAPIKey = Platform.environment['FIG_API_KEY']; - group( - 'Input to PBDL test', - () { - var result; - var outputPath; - var ids; - setUp(() async { - outputPath = '${Directory.current.path}/temp/'; - MainInfo().outputPath = outputPath; - - /// For Figma input - result = await APICallService.makeAPICall(figmaFileID, figmaAPIKey); - - /// For Sketch Input - ids = InputDesignService( - '${Directory.current.path}/test/assets/parabeac_demo_alt.sketch'); - }); - test('Figma Test', () async { - var figmaNodeTree = - FigmaController().generateFigmaTree(result, outputPath); - - expect(figmaNodeTree != null, true); - expect(figmaNodeTree is FigmaProject, true); - expect(figmaNodeTree.pages.isNotEmpty, true); - expect(figmaNodeTree.pages[0] is FigmaPage, true); - }); - test('Sketch Test', () { - var sketchNodeTree = SketchController().generateSketchNodeTree( - ids, ids.metaFileJson['pagesAndArtboards'], outputPath); - - expect(sketchNodeTree != null, true); - expect(sketchNodeTree is SketchProject, true); - expect(sketchNodeTree.pages.isNotEmpty, true); - expect(sketchNodeTree.pages[0] is SketchPage, true); - }); - tearDownAll(() { - Process.runSync( - '${Directory.current.path}/lib/generation/helperScripts/shell-proxy.sh', - ['rm -rf $outputPath']); - }); - }, - skip: !Platform.environment.containsKey('FIG_API_KEY'), - ); -} diff --git a/test/lib/input_services/padding_dynamic_size_test.dart b/test/lib/input_services/padding_dynamic_size_test.dart deleted file mode 100644 index c08eb6d6..00000000 --- a/test/lib/input_services/padding_dynamic_size_test.dart +++ /dev/null @@ -1,48 +0,0 @@ -import 'dart:math'; - -import 'package:mockito/mockito.dart'; -import 'package:parabeac_core/generation/flutter_project_builder/import_helper.dart'; -import 'package:parabeac_core/generation/generators/pb_flutter_generator.dart'; -import 'package:parabeac_core/interpret_and_optimize/entities/alignments/padding.dart'; -import 'package:parabeac_core/interpret_and_optimize/entities/subclasses/pb_intermediate_node.dart'; -import 'package:parabeac_core/interpret_and_optimize/helpers/pb_context.dart'; -import 'package:test/test.dart'; -import 'package:uuid/uuid.dart'; - -class NodeMock extends Mock implements PBIntermediateNode {} - -class ContextMock extends Mock implements PBContext {} - -void main() { - group('Calculating dynamic padding size test', () { - var currentContext, currentChild; - var currentPadding; - - setUp(() { - currentContext = ContextMock(); - when(currentContext.screenTopLeftCorner).thenReturn(Point(215, -295)); - when(currentContext.screenBottomRightCorner).thenReturn(Point(590, 955)); - when(currentContext.generationManager) - .thenReturn(PBFlutterGenerator(ImportHelper())); - - currentChild = NodeMock(); - when(currentChild.currentContext).thenReturn(currentContext); - - ///TODO: Update padding test - // currentPadding = Padding(Uuid().v4(), - // left: 15, - // right: 15, - // bottom: 15, - // top: 15, - // currentContext: currentContext); - }); - test('Calculating dynamic padding size', () { - currentPadding.addChild(currentChild); - currentPadding = currentPadding as Padding; - expect(currentPadding.left, 0.04); - expect(currentPadding.top, 0.012); - expect(currentPadding.right, 0.04); - expect(currentPadding.bottom, 0.012); - }); - }); -} diff --git a/test/lib/input_services/positional_cleansing_service_test.dart b/test/lib/input_services/positional_cleansing_service_test.dart deleted file mode 100644 index 67632caf..00000000 --- a/test/lib/input_services/positional_cleansing_service_test.dart +++ /dev/null @@ -1,62 +0,0 @@ -import 'package:mockito/mockito.dart'; -import 'package:parabeac_core/input/sketch/entities/layers/abstract_group_layer.dart'; -import 'package:parabeac_core/input/sketch/entities/layers/abstract_layer.dart'; -import 'package:parabeac_core/input/sketch/entities/layers/artboard.dart'; -import 'package:parabeac_core/input/sketch/entities/layers/group.dart'; -import 'package:parabeac_core/input/sketch/entities/layers/rectangle.dart'; -import 'package:parabeac_core/input/sketch/entities/objects/frame.dart'; -import 'package:parabeac_core/input/sketch/services/positional_cleansing_service.dart'; -import 'package:parabeac_core/interpret_and_optimize/entities/layouts/temp_group_layout_node.dart'; -import 'package:test/test.dart'; - -class WeatherAPI extends Mock implements TempGroupLayoutNode {} - -class GroupMock extends Mock implements Group {} - -class ArtboardMock extends Mock implements Artboard {} - -class RectangleMock extends Mock implements Rectangle {} - -void main() { - group('Eliminating Offset Test', () { - var groupSketchNode, artboard, rec; - var parentFrame, childFrame; - PositionalCleansingService service; - setUp(() { - service = PositionalCleansingService(); - - ///TLC: (100, 100) BRC: (300, 300) - parentFrame = Frame(x: 100, y: 100, width: 200, height: 200); - - ///TLC: (0, 0) BRC: (100, 100) - childFrame = Frame(x: 0, y: 0, width: 100, height: 100); - - rec = RectangleMock(); - when(rec.boundaryRectangle).thenReturn(childFrame); - var children = [rec]; - - groupSketchNode = GroupMock(); - when(groupSketchNode.children).thenReturn(children); - when(groupSketchNode.boundaryRectangle).thenReturn(parentFrame); - - artboard = ArtboardMock(); - when(artboard.children).thenReturn(children); - when(artboard.boundaryRectangle).thenReturn(parentFrame); - }); - test('Eliminating Artboard Offset Test', () { - var artboardResult = service.eliminateOffset(artboard); - var recResult = (artboardResult as AbstractGroupLayer).children[0]; - var frameR = recResult.boundaryRectangle; - expect(frameR.x, 100); - expect(frameR.y, 100); - }); - - test('Eliminating Group Offset Test', () { - var groupResult = service.eliminateOffset(groupSketchNode); - var recResult = (groupResult as AbstractGroupLayer).children[0]; - var frameR = recResult.boundaryRectangle; - expect(frameR.x, 100); - expect(frameR.y, 100); - }); - }); -} diff --git a/test/lib/interpret_and_optimize/graph_test.dart b/test/lib/interpret_and_optimize/graph_test.dart deleted file mode 100644 index 96fce836..00000000 --- a/test/lib/interpret_and_optimize/graph_test.dart +++ /dev/null @@ -1,40 +0,0 @@ -import 'package:directed_graph/directed_graph.dart'; -import 'package:mockito/mockito.dart'; -import 'package:parabeac_core/interpret_and_optimize/entities/inherited_circle.dart'; -import 'package:parabeac_core/interpret_and_optimize/entities/inherited_container.dart'; -import 'package:parabeac_core/interpret_and_optimize/entities/inherited_scaffold.dart'; -import 'package:parabeac_core/interpret_and_optimize/entities/injected_container.dart'; -import 'package:parabeac_core/interpret_and_optimize/helpers/pb_intermediate_node_tree.dart'; -import 'package:test/test.dart'; - -// import '../output_services/project_builder_test.dart'; - -class MockContainer extends Mock implements InjectedContainer {} - -class MockScaffold extends Mock implements InheritedScaffold {} - -void main() { - group('Testing IntermediateTree', () { - PBIntermediateTree tree; - setUp(() { - tree = PBIntermediateTree( - comparator: (v0, v1) => v0.data.UUID.compareTo(v1.data.UUID)); - }); - - test('', () { - var parent = InheritedContainer('PARENT', null); - var child = InheritedCircle('CHILD', null); - var child2 = InheritedCircle('child2', null); - var child3 = InheritedCircle('CHILD3', null); - - // var vParent =; - // var vChild = ; - - tree.addEdges(AITVertex(parent), - [AITVertex(child), AITVertex(child2), AITVertex(child3)]); - var edges = tree.edges(AITVertex(parent)); - tree.removeEdges(AITVertex(parent)); - print(tree); - }); - }); -} diff --git a/test/lib/interpret_and_optimize/intermediate_tree_test.dart b/test/lib/interpret_and_optimize/intermediate_tree_test.dart deleted file mode 100644 index 9584448b..00000000 --- a/test/lib/interpret_and_optimize/intermediate_tree_test.dart +++ /dev/null @@ -1,175 +0,0 @@ -import 'package:parabeac_core/interpret_and_optimize/entities/subclasses/pb_intermediate_node.dart'; -import 'package:parabeac_core/interpret_and_optimize/helpers/pb_intermediate_node_tree.dart'; -import 'package:test/test.dart'; -import 'package:mockito/mockito.dart'; - -class MockContainer extends Mock implements PBIntermediateNode {} - -class MockContainerBuilder { - static MockContainer buildContainer(String UUID, - {List children, MockContainer parent}) { - var container = MockContainer(); - when(container.UUID).thenReturn(UUID); - when(container.children).thenReturn(children); - when(container.parent).thenReturn(parent); - return container; - } -} - -class TreeBuilder { - num numberOfContainers; - List _containerList; - T rootNode; - - var nodeBuilder; - var rootNodeBuilder; - - TreeBuilder(this.numberOfContainers, - {T Function(int index) this.nodeBuilder, - T Function(List children, T rootNode) this.rootNodeBuilder}) { - nodeBuilder ??= _mockContainerBuilder; - rootNodeBuilder ??= _rootNodeBuilder; - } - - T _mockContainerBuilder(int idx, T rootNode) { - var container = MockContainer(); - - var containerChild = MockContainer(); - when(containerChild.UUID).thenReturn(('C_$idx')); - when(containerChild.parent).thenReturn(container); - - when(container.children).thenReturn([containerChild]); - when(container.UUID).thenReturn('P_$idx'); - when(container.parent).thenReturn(rootNode); - - return container as T; - } - - T _rootNodeBuilder() { - var rootNode = MockContainer(); - when(rootNode.UUID).thenReturn('R_123'); - return rootNode as T; - } - - PBIntermediateTree build() { - rootNode = rootNodeBuilder(); - _containerList = List.generate( - (numberOfContainers ~/ 2), (index) => nodeBuilder(index, rootNode)); - when(rootNode.children).thenReturn(_containerList); - - var tree = PBIntermediateTree(name: 'Example'); - tree.rootNode = rootNode; - - ///Taking into account the [rootNode] - numberOfContainers++; - return tree; - } -} - -void main() { - var numberOfContainers; - var rootNode; - TreeBuilder treeBuilder; - PBIntermediateTree tree; - group('Testing the PBIntermediateTree', () { - setUp(() { - ///This is the tree that is going to be build: - /// [R_123] - /// | - /// [P_0, P_1, P_2, P_3, P_4] - /// | | | | | - /// [C_0][C_1][C_2][C_3][C_4] - /// - - numberOfContainers = 10; - treeBuilder = TreeBuilder(numberOfContainers); - tree = treeBuilder.build(); - rootNode = treeBuilder.rootNode; - }); - - test('Replacement of nodes in [$PBIntermediateNode]', () { - var replacementChild3 = MockContainerBuilder.buildContainer( - 'REPLACEMENT_C3', - parent: null, - children: []); - var parentReplacement4 = MockContainerBuilder.buildContainer( - 'REPLACEMENT_P4', - parent: null, - children: []); - var find = (UUID) => - tree.firstWhere((node) => node.UUID == UUID, orElse: () => null); - - var targetChild3 = find('C_3'); - var targetParent4 = find('P_4'); - var targetChild4 = find('C_4'); - - expect(targetChild3, isNotNull); - expect(targetParent4, isNotNull); - - expect(tree.replaceNode(targetChild3, replacementChild3), isTrue); - expect(find(targetChild3.UUID), isNull); - - expect( - tree.replaceNode(targetParent4, parentReplacement4, - acceptChildren: true), - isTrue); - expect(find(targetParent4.UUID), isNull); - expect(find(targetChild4.UUID), isNotNull, - reason: - 'The ${targetChild4.UUID} is not part of the $parentReplacement4 children'); - - // reset(rootNode); - // reset(containerList); - }); - - test('Testing the removal of nodes from the tree', () { - var child3 = tree.firstWhere((child) => child.UUID == 'C_3'); - var parent4 = tree.firstWhere((parent) => parent.UUID == 'P_4'); - var child4 = tree.firstWhere((child) => child.UUID == 'C_4'); - - expect(child3, isNotNull); - expect(parent4, isNotNull); - expect(child4, isNotNull); - - expect(tree.removeNode(child3), isTrue); - expect( - tree.firstWhere((child) => child.UUID == child3.UUID, - orElse: () => null), - isNull); - - expect(tree.removeNode(parent4, eliminateSubTree: true), isTrue); - expect( - tree.firstWhere((parent) => parent.UUID == parent4.UUID, - orElse: () => null), - isNull); - expect( - tree.firstWhere((child) => child.UUID == child4.UUID, - orElse: () => null), - isNull, - reason: - '${child4.UUID} should have been removed of the ${tree.runtimeType} as consequence of deleting its parent'); - // reset(rootNode); - // reset(containerList); - }); - - test('Testing the traversal of the IntermediateTree', () { - expect(tree.length, treeBuilder.numberOfContainers); - expect(tree.first, rootNode); - }); - - test( - 'Testing [PBIntermediateTree.dist] function, see if it gives the correct distance between two nodes', - () { - var child = tree.firstWhere((node) => node.UUID == 'C_0'); - expect(child, isNotNull); - expect(tree.depthOf(child), 2); - - var parent = tree.firstWhere((node) => node.UUID == 'P_0'); - expect(parent, isNotNull); - expect(tree.depthOf(parent), 1); - - expect(rootNode, isNotNull); - expect(tree.depthOf(rootNode), 0); - }); - }); -} diff --git a/test/lib/interpret_and_optimize/services/interpret_test.dart b/test/lib/interpret_and_optimize/services/interpret_test.dart deleted file mode 100644 index e64b95f9..00000000 --- a/test/lib/interpret_and_optimize/services/interpret_test.dart +++ /dev/null @@ -1,138 +0,0 @@ -import 'dart:io'; -import 'dart:math'; - -import 'package:parabeac_core/controllers/interpret.dart'; -import 'package:parabeac_core/controllers/main_info.dart'; -import 'package:parabeac_core/input/sketch/entities/layers/artboard.dart'; -import 'package:parabeac_core/input/sketch/entities/layers/group.dart'; -import 'package:parabeac_core/input/sketch/entities/layers/sketch_text.dart'; -import 'package:parabeac_core/input/sketch/entities/objects/frame.dart'; -import 'package:parabeac_core/input/sketch/helper/sketch_page.dart'; -import 'package:parabeac_core/input/sketch/helper/sketch_project.dart'; -import 'package:parabeac_core/input/sketch/helper/sketch_screen.dart'; -import 'package:parabeac_core/interpret_and_optimize/entities/inherited_container.dart'; -import 'package:parabeac_core/interpret_and_optimize/entities/layouts/temp_group_layout_node.dart'; -import 'package:parabeac_core/interpret_and_optimize/entities/subclasses/pb_intermediate_node.dart'; -import 'package:parabeac_core/interpret_and_optimize/helpers/pb_configuration.dart'; -import 'package:parabeac_core/interpret_and_optimize/helpers/pb_context.dart'; -import 'package:parabeac_core/interpret_and_optimize/helpers/pb_project.dart'; -import 'package:test/test.dart'; -import 'package:mockito/mockito.dart'; -import 'package:parabeac_core/interpret_and_optimize/entities/inherited_scaffold.dart'; - -class MockProject extends Mock implements SketchProject {} - -class MockPage extends Mock implements SketchPage {} - -class MockScreen extends Mock implements SketchScreen {} - -class MockArtboard extends Mock implements Artboard { - @override - Future interpretNode(PBContext currentContext) { - return Future.value(InheritedScaffold( - this, - currentContext: currentContext, - name: name, - isHomeScreen: isFlowHome, - )); - } -} - -class MockGroup extends Mock implements Group { - @override - Future interpretNode(PBContext currentContext) => - Future.value(TempGroupLayoutNode(this, currentContext, name, - topLeftCorner: Point(boundaryRectangle.x, boundaryRectangle.y), - bottomRightCorner: Point( - boundaryRectangle.x + boundaryRectangle.width, - boundaryRectangle.y + boundaryRectangle.height))); -} - -class MockContainer extends Mock implements SketchText { - @override - Future interpretNode(PBContext currentContext) => - Future.value(InheritedContainer( - this, - Point(boundaryRectangle.x, boundaryRectangle.y), - Point(boundaryRectangle.x + boundaryRectangle.width, - boundaryRectangle.y + boundaryRectangle.height), - name, - currentContext: currentContext, - )); -} - -void main() { - MockProject project; - MockPage page; - MockScreen screen; - MockArtboard artboard; - MockGroup mockGroup; - MockContainer container; - group('Interpret test', () { - setUp(() { - Interpret().init( - '${Directory.current.path}/test/lib/interpret_and_optimize/services', - PBConfiguration.genericConfiguration(), - ); - - MainInfo().configurationType = 'default'; - - project = MockProject(); - page = MockPage(); - screen = MockScreen(); - artboard = MockArtboard(); - mockGroup = MockGroup(); - container = MockContainer(); - - when(project.pages).thenReturn([page]); - when(page.getPageItems()).thenReturn([screen]); - when(screen.AITree).thenReturn(artboard); - when(artboard.children).thenReturn([mockGroup]); - - when(artboard.isVisible).thenReturn(true); - when(artboard.isFlowHome).thenReturn(true); - when(mockGroup.isVisible).thenReturn(true); - when(container.isVisible).thenReturn(true); - - when(artboard.name).thenReturn('testArtboard'); - when(mockGroup.name).thenReturn('testGroup'); - when(container.name).thenReturn('testContainer'); - - when(artboard.pbdlType).thenReturn('artboard'); - when(mockGroup.pbdlType).thenReturn('group'); - when(container.pbdlType).thenReturn('text'); - - when(page.name).thenReturn('testName'); - when(mockGroup.children).thenReturn([container]); - when(mockGroup.boundaryRectangle).thenReturn(Frame( - x: 100, - y: 100, - width: 200, - height: 200, - )); - when(artboard.boundaryRectangle).thenReturn(Frame( - x: 100, - y: 100, - width: 200, - height: 200, - )); - when(container.boundaryRectangle).thenReturn(Frame( - x: 100, - y: 100, - width: 200, - height: 200, - )); - }); - test('', () async { - var mainTree = await Interpret() - .interpretAndOptimize(project, 'projectName', 'projectPath'); - expect(mainTree != null, true); - expect(mainTree is PBProject, true); - expect(mainTree.forest.first.rootNode is InheritedScaffold, true); - // expect(mainTree.forest.first.rootNode.child is InjectedAlign, true); - - ///TODO: Check the type of the leaf node - expect(mainTree.forest.first.rootNode.child.child != null, true); - }); - }); -} diff --git a/test/lib/interpret_and_optimize/services/pb_align_generation_service_test.dart b/test/lib/interpret_and_optimize/services/pb_align_generation_service_test.dart deleted file mode 100644 index ce9451b4..00000000 --- a/test/lib/interpret_and_optimize/services/pb_align_generation_service_test.dart +++ /dev/null @@ -1,93 +0,0 @@ -import 'dart:math'; - -import 'package:mockito/mockito.dart'; -import 'package:parabeac_core/interpret_and_optimize/entities/alignments/injected_positioned.dart'; -import 'package:parabeac_core/interpret_and_optimize/entities/injected_container.dart'; -import 'package:parabeac_core/interpret_and_optimize/entities/layouts/stack.dart'; -import 'package:parabeac_core/interpret_and_optimize/entities/subclasses/pb_intermediate_constraints.dart'; -import 'package:parabeac_core/interpret_and_optimize/entities/subclasses/pb_intermediate_node.dart'; -import 'package:parabeac_core/interpret_and_optimize/helpers/align_strategy.dart'; -import 'package:parabeac_core/interpret_and_optimize/helpers/child_strategy.dart'; -import 'package:parabeac_core/interpret_and_optimize/helpers/pb_configuration.dart'; -import 'package:parabeac_core/interpret_and_optimize/helpers/pb_context.dart'; -import 'package:parabeac_core/interpret_and_optimize/helpers/pb_intermediate_node_tree.dart'; -import 'package:parabeac_core/interpret_and_optimize/services/pb_alignment_generation_service.dart'; -import 'package:test/test.dart'; -import 'package:uuid/uuid.dart'; - -import '../dfs_iterator_test.dart'; - -class MockContext extends Mock implements PBContext {} - -class MockContainer extends Mock implements InjectedContainer {} - -var containerList; -PBIntermediateTree tree; -PBAlignGenerationService alignGenerationService; -PBContext context; - -void main() { - group('Testing the Positions generated for stacks', () { - PBIntermediateStackLayout stack; - setUp(() { - context = PBContext(null); - - tree = TreeBuilder(10, nodeBuilder: (index) { - - /// Constructing the [PBIntermediateTree] with real [InjectedContainer] rather than - /// using the [Mock] - var origin = Point(0, 0); - var container = InjectedContainer( - origin, origin, 'P_$index', 'P_$index', - constraints: PBIntermediateConstraints()); - container.childrenStrategy = OneChildStrategy('child'); - - var containerChild = InjectedContainer( - origin, origin, 'C_$index', 'C_$index', - constraints: PBIntermediateConstraints()); - containerChild.childrenStrategy = OneChildStrategy('child'); - - container.addChild(containerChild); - return container; - }, rootNodeBuilder: (children) { - - /// Constructing a real [InjectedContainer] as [PBIntermediateTree.rootNode] rather - /// than using a [Mock] - var rootNode = PBIntermediateStackLayout(context); - rootNode.constraints = PBIntermediateConstraints(); - rootNode.alignStrategy = NoAlignment(); - - rootNode.replaceChildren(children); - return rootNode; - }).build(); - - context.tree = tree; - alignGenerationService = PBAlignGenerationService(); - }); - - test( - 'When given a node contains contraints that are inheritable after [PBAlignGenerationService]', - () { - var inheritedFixedHeight = 2.0; - var inheritedFixedWidth = 3.0; - - var parent = tree.firstWhere((child) => child?.UUID == 'P_0'); - parent.constraints.fixedHeight = inheritedFixedHeight; - parent.constraints.fixedWidth = inheritedFixedWidth; - alignGenerationService.addAlignmentToLayouts(tree, context); - - - var inheritedConstrainsChild0 = - tree.firstWhere((child) => child.UUID == 'C_0'); - var nonInheritedConstrainsChild = - tree.firstWhere((child) => child.UUID == 'C_1'); - - expect(inheritedConstrainsChild0.constraints.fixedHeight, - inheritedFixedHeight); - expect( - inheritedConstrainsChild0.constraints.fixedWidth, inheritedFixedWidth); - expect(nonInheritedConstrainsChild.constraints.fixedHeight, isNull); - expect(nonInheritedConstrainsChild.constraints.fixedWidth, isNull); - }); - }); -} diff --git a/test/lib/interpret_and_optimize/services/pb_shared_aggregation_service_test.dart b/test/lib/interpret_and_optimize/services/pb_shared_aggregation_service_test.dart deleted file mode 100644 index 82681664..00000000 --- a/test/lib/interpret_and_optimize/services/pb_shared_aggregation_service_test.dart +++ /dev/null @@ -1,102 +0,0 @@ -import 'package:mockito/mockito.dart'; -import 'package:parabeac_core/interpret_and_optimize/entities/pb_shared_master_node.dart'; -import 'package:parabeac_core/interpret_and_optimize/entities/layouts/temp_group_layout_node.dart'; -import 'package:parabeac_core/interpret_and_optimize/entities/pb_shared_instance.dart'; -import 'package:parabeac_core/interpret_and_optimize/helpers/pb_symbol_storage.dart'; -import 'package:parabeac_core/interpret_and_optimize/services/pb_shared_aggregation_service.dart'; -import 'package:test/test.dart'; - -class PBSharedMasterNodeMock extends Mock implements PBSharedMasterNode {} - -class PBTempGroupNodeMock extends Mock implements TempGroupLayoutNode {} - -class PBSharedInstanceIntermediateNodeMock extends Mock - implements PBSharedInstanceIntermediateNode { - @override - String get UUID => 'INSTANCE0_UUID'; -} - -void main() { - group('', () { - final MASTER0_UUID = 'MASTER0_UUID', - MASTER1_UUID = 'MASTER1_UUID', - INSTANCE0_UUID = 'INSTANCE0_UUID'; - PBSharedInterAggregationService pbSharedInterAggregationService; - PBSharedInstanceIntermediateNode instanceNode0; - PBSharedMasterNode masterNode0, masterNode1; - List masterParameters; - List instaceValues; - TempGroupLayoutNode rootNode; - - setUp(() { - pbSharedInterAggregationService = PBSharedInterAggregationService(); - - instanceNode0 = PBSharedInstanceIntermediateNodeMock(); - rootNode = PBTempGroupNodeMock(); - instanceNode0 = PBSharedInstanceIntermediateNodeMock(); - - masterNode0 = PBSharedMasterNodeMock(); - when(masterNode0.UUID).thenReturn(MASTER0_UUID); - - masterNode1 = PBSharedMasterNodeMock(); - when(masterNode1.UUID).thenReturn(MASTER1_UUID); - - var parameterAlternator = false; - masterParameters = []; - instaceValues = []; - - for (var i = 0; i < 2; i++) { - var masterParameter = PBMasterOverride( - 'masterParam', - parameterAlternator ? String : PBSharedInstanceIntermediateNode, - parameterAlternator ? null : instanceNode0, - true, - parameterAlternator ? 'test0' : 'test1', - parameterAlternator ? 'uuid0' : INSTANCE0_UUID, - null, - ); - var instaceParameter = PBInstanceOverride( - parameterAlternator ? String : PBSharedInstanceIntermediateNode, - parameterAlternator ? 'test' : instanceNode0, - null, - 'instanceParam', - ); - - instaceValues.add(instaceParameter); - masterParameters.add(masterParameter); - parameterAlternator = !parameterAlternator; - } - - when(masterNode0.overridableProperties).thenReturn(masterParameters); - when(masterNode1.overridableProperties).thenReturn(masterParameters); - - when(rootNode.children).thenReturn([instanceNode0]); - when(masterNode0.child).thenReturn(rootNode); - when(instanceNode0.sharedParamValues).thenReturn(instaceValues); - }); - - test( - '''Testing that PBSharedInstanceIntermediateNode got its attributes from a - PBSharedMasterNode that has not been processed yet. Once the symbol storage processes the - PBSharedMasterNode the instance node should get its attributes populated from its master - ''', () async { - var name = 'test_name'; - var symbolStorage = PBSymbolStorage(); - - ///Linking the [instanceNode0] and [masterNode1]. - when(instanceNode0.SYMBOL_ID).thenReturn(MASTER1_UUID); - when(masterNode1.SYMBOL_ID).thenReturn(MASTER1_UUID); - when(masterNode0.SYMBOL_ID).thenReturn(MASTER0_UUID); - - pbSharedInterAggregationService.gatherSharedParameters( - masterNode0, masterNode0.child); - expect(masterNode0.overridableProperties[0].type, - PBSharedInstanceIntermediateNode); - expect( - (masterNode0.overridableProperties[0].value - as PBSharedInstanceIntermediateNode) - .functionCallName, - null); - }); - }); -} diff --git a/test/lib/interpret_and_optimize/services/pb_visual_generation_test.dart b/test/lib/interpret_and_optimize/services/pb_visual_generation_test.dart deleted file mode 100644 index 81d7d80f..00000000 --- a/test/lib/interpret_and_optimize/services/pb_visual_generation_test.dart +++ /dev/null @@ -1,94 +0,0 @@ -import 'package:mockito/mockito.dart'; -import 'package:parabeac_core/input/sketch/entities/layers/abstract_group_layer.dart'; -import 'package:parabeac_core/input/sketch/entities/layers/abstract_layer.dart'; -import 'package:parabeac_core/input/sketch/entities/objects/frame.dart'; -import 'package:parabeac_core/input/sketch/entities/style/style.dart'; -import 'package:parabeac_core/interpret_and_optimize/entities/inherited_container.dart'; -import 'package:parabeac_core/interpret_and_optimize/entities/subclasses/pb_intermediate_node.dart'; -import 'package:parabeac_core/interpret_and_optimize/entities/subclasses/pb_layout_intermediate_node.dart'; -import 'package:parabeac_core/interpret_and_optimize/entities/subclasses/pb_visual_intermediate_node.dart'; -import 'package:parabeac_core/interpret_and_optimize/helpers/pb_context.dart'; -import 'package:parabeac_core/interpret_and_optimize/services/pb_visual_generation_service.dart'; -import 'package:test/test.dart'; - -class MockSketchNode extends Mock implements SketchNode {} - -class ContextMock extends Mock implements PBContext {} - -void main() { - var mockRootSketchNode = MockSketchNode(); - var context = ContextMock(); - var vgs = - PBVisualGenerationService(mockRootSketchNode, currentContext: context); - var mockOriginalRef = MockSketchNode(); - - PBIntermediateNode response; - setUpAll(() { - when(mockRootSketchNode.isVisible).thenReturn(true); - when(mockRootSketchNode.name).thenReturn('testing Name'); - when(mockOriginalRef.boundaryRectangle) - .thenReturn(Frame(width: 50, height: 50, x: 0, y: 0)); - when(mockOriginalRef.style).thenReturn(Style(fills: [])); - when(mockRootSketchNode.interpretNode(context)).thenAnswer((_) => - Future.value(InheritedContainer(mockOriginalRef, null, null, 'testName', - currentContext: context))); - }); - test('Should generate IntermediateTree', () async { - response = await vgs.getIntermediateTree(); - expect(response, isNotNull); - }); - - /// This test relies on previous tests running. - test( - 'PBIntermediateNode Tree depth should be the same as the original sketch node tree depth', - () { - var queue = <_DepthTuple>[]; - var sketchNodeDepth = 0; - var intermediateNodeDepth = 0; - - /// Calculate Depth of Sketch Node Tree - queue.add(_DepthTuple(0, mockRootSketchNode)); - while (queue.isNotEmpty) { - var currentNode = queue.removeAt(0); - if (currentNode.node is AbstractGroupLayer && - (currentNode.node as AbstractGroupLayer).children.isNotEmpty) { - for (var child in (currentNode.node as AbstractGroupLayer).children) { - if (currentNode.depth + 1 > sketchNodeDepth) { - sketchNodeDepth = currentNode.depth + 1; - } - queue.add(_DepthTuple(currentNode.depth + 1, child)); - } - } - } - - /// Calculate Depth of Intermediate Node Tree - queue.add(_DepthTuple(0, response)); - while (queue.isNotEmpty) { - var currentNode = queue.removeAt(0); - if (currentNode.node is PBVisualIntermediateNode) { - if ((currentNode.node as PBVisualIntermediateNode).child != null) { - if (currentNode.depth + 1 > intermediateNodeDepth) { - intermediateNodeDepth = currentNode.depth + 1; - } - queue.add(_DepthTuple(currentNode.depth + 1, - (currentNode.node as PBVisualIntermediateNode).child)); - } else if (currentNode.node is PBLayoutIntermediateNode) { - if (currentNode.depth + 1 > intermediateNodeDepth) { - intermediateNodeDepth = currentNode.depth + 1; - } - for (var child - in (currentNode.node as PBLayoutIntermediateNode).children) { - queue.add(_DepthTuple(currentNode.depth + 1, child)); - } - } - } - } - expect(sketchNodeDepth, intermediateNodeDepth); - }); -} - -class _DepthTuple { - final int depth; - final Object node; - _DepthTuple(this.depth, this.node); -} diff --git a/test/lib/interpret_and_optimize/services/prototype_linker_test.dart b/test/lib/interpret_and_optimize/services/prototype_linker_test.dart deleted file mode 100644 index 117d9e5b..00000000 --- a/test/lib/interpret_and_optimize/services/prototype_linker_test.dart +++ /dev/null @@ -1,52 +0,0 @@ -import 'dart:math'; - -import 'package:parabeac_core/generation/prototyping/pb_dest_holder.dart'; -import 'package:parabeac_core/generation/prototyping/pb_prototype_linker_service.dart'; -import 'package:parabeac_core/generation/prototyping/pb_prototype_node.dart'; -import 'package:parabeac_core/interpret_and_optimize/entities/injected_container.dart'; -import 'package:parabeac_core/interpret_and_optimize/helpers/pb_context.dart'; -import 'package:test/test.dart'; -import 'package:mockito/mockito.dart'; - -class MockContainer extends Mock implements InjectedContainer {} - -class MockPrototypeNode extends Mock implements PrototypeNode {} - -class ContextMock extends Mock implements PBContext {} - -void main() { - group('Prototype linker test', () { - PBPrototypeLinkerService _pbPrototypeLinkerService; - InjectedContainer mockNode, mockNode2; - MockPrototypeNode prototypeNode; - var currentContext; - setUp(() { - currentContext = ContextMock(); - when(currentContext.screenTopLeftCorner).thenReturn(Point(215, -295)); - when(currentContext.screenBottomRightCorner).thenReturn(Point(590, 955)); - - _pbPrototypeLinkerService = PBPrototypeLinkerService(); - mockNode = InjectedContainer( - Point(1000, 1000), Point(100, 100), 'testName', '00530055', - currentContext: currentContext); - mockNode2 = InjectedContainer( - Point(1000, 1000), Point(100, 100), 'testName2', '00530055', - currentContext: currentContext); - prototypeNode = MockPrototypeNode(); - - when(prototypeNode.destinationName).thenReturn('mockPage'); - when(prototypeNode.destinationUUID).thenReturn('00530055'); - - mockNode.prototypeNode = prototypeNode; - - mockNode.addChild(mockNode2); - }); - test('', () async { - var result = await _pbPrototypeLinkerService.linkPrototypeNodes(mockNode); - - /// If the child of the result is `PBDestHolder` that means - /// that the replace was done corretly - expect(result.child is PBDestHolder, true); - }); - }); -} diff --git a/test/lib/interpret_and_optimize/services/symbol_link_test.dart b/test/lib/interpret_and_optimize/services/symbol_link_test.dart deleted file mode 100644 index 14311955..00000000 --- a/test/lib/interpret_and_optimize/services/symbol_link_test.dart +++ /dev/null @@ -1,81 +0,0 @@ -import 'dart:math'; - -import 'package:parabeac_core/controllers/main_info.dart'; -import 'package:parabeac_core/input/sketch/entities/layers/symbol_instance.dart'; -import 'package:parabeac_core/input/sketch/entities/layers/symbol_master.dart'; -import 'package:parabeac_core/input/sketch/entities/objects/frame.dart'; -import 'package:parabeac_core/interpret_and_optimize/entities/pb_shared_instance.dart'; -import 'package:parabeac_core/interpret_and_optimize/entities/pb_shared_master_node.dart'; -import 'package:parabeac_core/interpret_and_optimize/helpers/pb_configuration.dart'; -import 'package:parabeac_core/interpret_and_optimize/helpers/pb_context.dart'; -import 'package:parabeac_core/interpret_and_optimize/helpers/pb_intermediate_node_tree.dart'; -import 'package:parabeac_core/interpret_and_optimize/services/pb_symbol_linker_service.dart'; -import 'package:test/test.dart'; -import 'package:mockito/mockito.dart'; - -class MockReference extends Mock implements SymbolMaster {} - -class SecondReference extends Mock implements SymbolInstance {} - -void main() { - group('Symbol link test', () { - PBSymbolLinkerService pbSymbolLinkerService; - PBSharedMasterNode masterNode; - PBSharedInstanceIntermediateNode instanceNode; - MockReference mockReference; - SecondReference secondReference; - setUp(() { - MainInfo().configurationType = 'default'; - mockReference = MockReference(); - pbSymbolLinkerService = PBSymbolLinkerService(); - secondReference = SecondReference(); - - when(mockReference.UUID).thenReturn('010101'); - when(mockReference.boundaryRectangle).thenReturn(Frame( - x: 100, - y: 100, - width: 200, - height: 200, - )); - when(secondReference.UUID).thenReturn('101010'); - when(secondReference.boundaryRectangle).thenReturn(Frame( - x: 100, - y: 100, - width: 200, - height: 200, - )); - var configurations = PBConfiguration.fromJson({ - 'widgetStyle': 'Material', - 'widgetType': 'Stateless', - 'widgetSpacing': 'Expanded', - 'layoutPrecedence': ['column', 'row', 'stack'], - 'state-management': 'none' - }); - - masterNode = PBSharedMasterNode( - mockReference, - '02353', - 'masterTest', - Point(0, 0), - Point(0, 0), - overridableProperties: [], - currentContext: PBContext(configurations, - tree: PBIntermediateTree('Symbol Master')), - ); - instanceNode = PBSharedInstanceIntermediateNode(secondReference, '02353', - sharedParamValues: [], - currentContext: PBContext(configurations, - tree: PBIntermediateTree('SymbolInstance'))); - }); - test( - 'Testing the linking of [PBSharedMasterNode] and [PBSharedInstanceIntermediateNode]', - () async { - await pbSymbolLinkerService.linkSymbols(masterNode); - PBSharedInstanceIntermediateNode result = - await pbSymbolLinkerService.linkSymbols(instanceNode); - - expect(result != null, true); - expect(result.functionCallName, masterNode.name); - }); - }); -} diff --git a/test/lib/layouts/layout_generation_test.dart b/test/lib/layouts/layout_generation_test.dart deleted file mode 100644 index afe35045..00000000 --- a/test/lib/layouts/layout_generation_test.dart +++ /dev/null @@ -1,81 +0,0 @@ -import 'dart:math'; - -import 'package:mockito/mockito.dart'; -import 'package:parabeac_core/controllers/main_info.dart'; -import 'package:parabeac_core/interpret_and_optimize/entities/layouts/column.dart'; -import 'package:parabeac_core/interpret_and_optimize/entities/layouts/temp_group_layout_node.dart'; -import 'package:parabeac_core/interpret_and_optimize/entities/subclasses/pb_attribute.dart'; -import 'package:parabeac_core/interpret_and_optimize/entities/subclasses/pb_intermediate_node.dart'; -import 'package:parabeac_core/interpret_and_optimize/entities/subclasses/pb_layout_intermediate_node.dart'; -import 'package:parabeac_core/interpret_and_optimize/helpers/pb_configuration.dart'; -import 'package:parabeac_core/interpret_and_optimize/helpers/pb_context.dart'; -import 'package:parabeac_core/interpret_and_optimize/services/pb_layout_generation_service.dart'; -import 'package:test/test.dart'; - -class TempGroupMock extends Mock implements TempGroupLayoutNode {} - -class PBIntermediateNodeMock extends Mock implements PBIntermediateNode {} - -void main() { - group('Testing the correct generation of the children in the layout service', - () { - PBIntermediateNodeMock leftItem; - PBIntermediateNodeMock rightItem; - - TempGroupMock tempGroup; - MainInfo().configurationType = 'default'; - var currentContext = PBContext(PBConfiguration.fromJson({ - 'widgetStyle': 'Material', - 'widgetType': 'Stateless', - 'widgetSpacing': 'Expanded', - 'layoutPrecedence': ['column', 'row', 'stack'], - 'state-management': 'none' - })); - - setUp(() { - leftItem = PBIntermediateNodeMock(); - rightItem = PBIntermediateNodeMock(); - - tempGroup = TempGroupMock(); - - when(leftItem.topLeftCorner).thenReturn(Point(0, 0)); - when(leftItem.bottomRightCorner).thenReturn(Point(100, 100)); - when(leftItem.UUID).thenReturn('UUIDleftItem'); - when(leftItem.name).thenReturn('leftItem'); - - when(rightItem.topLeftCorner).thenReturn(Point(0, 150)); - when(rightItem.bottomRightCorner).thenReturn(Point(200, 250)); - when(rightItem.UUID).thenReturn('UUIDrightItem'); - when(rightItem.name).thenReturn('rightItem'); - - when(tempGroup.name).thenReturn('testTempGroup'); - when(tempGroup.currentContext).thenReturn(currentContext); - when(tempGroup.originalRef).thenReturn({}); - when(tempGroup.attributes).thenReturn([ - PBAttribute('children', attributeNodes: [ - leftItem, - rightItem, - ]) - ]); - // Added children here because getter is not called during testing - // due to being Mock - when(tempGroup.children).thenReturn([ - leftItem, - rightItem, - ]); - }); - - test('', () { - var result = PBLayoutGenerationService(currentContext: currentContext) - .extractLayouts(tempGroup); - expect(result.runtimeType, PBIntermediateColumnLayout); - if (result is PBLayoutIntermediateNode) { - expect(result.children != null && result.children.isNotEmpty, true); - expect(result.children[0].topLeftCorner, Point(0, 0)); - expect(result.children[0].bottomRightCorner, Point(100, 100)); - expect(result.children[1].topLeftCorner, Point(0, 150)); - expect(result.children[1].bottomRightCorner, Point(200, 250)); - } - }); - }); -} diff --git a/test/lib/layouts/layout_post_rules_test.dart b/test/lib/layouts/layout_post_rules_test.dart deleted file mode 100644 index ad8d1c6d..00000000 --- a/test/lib/layouts/layout_post_rules_test.dart +++ /dev/null @@ -1,72 +0,0 @@ -import 'dart:math'; - -import 'package:mockito/mockito.dart'; -import 'package:parabeac_core/interpret_and_optimize/entities/inherited_container.dart'; -import 'package:parabeac_core/interpret_and_optimize/entities/inherited_text.dart'; -import 'package:parabeac_core/interpret_and_optimize/entities/layouts/rules/stack_reduction_visual_rule.dart'; -import 'package:parabeac_core/interpret_and_optimize/entities/layouts/stack.dart'; -import 'package:parabeac_core/interpret_and_optimize/entities/subclasses/pb_intermediate_node.dart'; -import 'package:test/test.dart'; - -class InheritedContainerMockWrapper extends Mock implements InheritedContainer { - @override - var child; - @override - void addChild(node) { - child = node; - } -} - -class InheritedContainerMock extends Mock implements InheritedContainer {} - -class StackMock extends Mock implements PBIntermediateStackLayout {} - -class TextMock extends Mock implements InheritedText {} - -void main() { - var stack; - var textNode; - var container, container2; - - group('Layout post rules tests', () { - setUp(() { - stack = StackMock(); - textNode = TextMock(); - container = InheritedContainerMockWrapper(); - container2 = InheritedContainerMock(); - - // Set up stack Hierarchy: - // * Stack - // * container - // * container2 - // * textNode - when(stack.children) - .thenReturn([container, container2]); - when(container2.child).thenReturn(textNode); - - // Set up coordinates so container2 is inside container - when(container.bottomRightCorner).thenReturn(Point(40, 40)); - when(container.topLeftCorner).thenReturn(Point(0, 0)); - when(container2.topLeftCorner).thenReturn(Point(10, 10)); - when(container2.bottomRightCorner).thenReturn(Point(30, 30)); - }); - - test('Testing stack reduction visual rule', () { - var stackReduction = StackReductionVisualRule(); - - var passedRule = stackReduction.testRule(stack, null); - - expect(passedRule, true); - - var result = stackReduction.executeAction(stack, null); - - // Expect the following hierarchy: - // * Container - // * Container - // * Text - expect(result, isA()); - expect(result.child, isA()); - expect(result.child.child, isA()); - }); - }); -} diff --git a/test/lib/middleware/bloc_test.dart b/test/lib/middleware/bloc_test.dart deleted file mode 100644 index c8a7688e..00000000 --- a/test/lib/middleware/bloc_test.dart +++ /dev/null @@ -1,118 +0,0 @@ -import 'dart:io'; - -import 'package:mockito/mockito.dart'; -import 'package:parabeac_core/generation/generators/middleware/state_management/bloc_middleware.dart'; -import 'package:parabeac_core/generation/generators/pb_generation_manager.dart'; -import 'package:parabeac_core/generation/generators/pb_generator.dart'; -import 'package:parabeac_core/generation/generators/util/pb_generation_project_data.dart'; -import 'package:parabeac_core/generation/generators/util/pb_generation_view_data.dart'; -import 'package:parabeac_core/generation/generators/value_objects/file_structure_strategy/flutter_file_structure_strategy.dart'; -import 'package:parabeac_core/generation/generators/value_objects/generation_configuration/bloc_generation_configuration.dart'; -import 'package:parabeac_core/interpret_and_optimize/entities/subclasses/pb_intermediate_node.dart'; -import 'package:parabeac_core/interpret_and_optimize/helpers/pb_context.dart'; -import 'package:parabeac_core/interpret_and_optimize/helpers/pb_intermediate_node_tree.dart'; -import 'package:parabeac_core/interpret_and_optimize/helpers/pb_project.dart'; -import 'package:test/test.dart'; -import 'provider_test.dart'; - -class MockPBGenerationManager extends Mock implements PBGenerationManager {} - -class MockPBIntermediateNode extends Mock implements PBIntermediateNode {} - -class MockContext extends Mock implements PBContext {} - -class MockProject extends Mock implements PBProject {} - -class MockPBGenerationProjectData extends Mock - implements PBGenerationProjectData {} - -class MockPBGenerationViewData extends Mock implements PBGenerationViewData {} - -class MockPBGenerator extends Mock implements PBGenerator {} - -class MockConfig extends Mock implements BLoCGenerationConfiguration {} - -class MockFileStrategy extends Mock implements FlutterFileStructureStrategy {} - -void main() { - group('Middlewares Tests', () { - var mockConfig = MockConfig(); - var mockPBGenerationManager = MockPBGenerationManager(); - var bLoCMiddleware = BLoCMiddleware(mockPBGenerationManager, mockConfig); - var node = MockPBIntermediateNode(); - var node2 = MockPBIntermediateNode(); - var mockContext = MockContext(); - var mockProject = MockProject(); - var mockPBGenerationProjectData = MockPBGenerationProjectData(); - var mockPBGenerationViewData = MockPBGenerationViewData(); - var mockPBGenerator = MockPBGenerator(); - var mockFileStructureStrategy = MockFileStrategy(); - var mockIntermediateAuxiliaryData = MockIntermediateAuxiliaryData(); - var mockDirectedStateGraph = MockDirectedStateGraph(); - var mockIntermediateState = MockIntermediateState(); - var mockIntermediateVariation = MockIntermediateVariation(); - var tree = PBIntermediateTree('tree'); - - setUp(() async { - /// Set up nodes - when(node.name).thenReturn('someElement/blue'); - when(node.generator).thenReturn(mockPBGenerator); - when(node.managerData).thenReturn(mockPBGenerationViewData); - when(node.currentContext).thenReturn(mockContext); - when(node.auxiliaryData).thenReturn(mockIntermediateAuxiliaryData); - // 2 - when(node2.name).thenReturn('someElement/green'); - when(node2.generator).thenReturn(mockPBGenerator); - when(node2.currentContext).thenReturn(mockContext); - - /// IntermediateAuxiliaryData - when(mockIntermediateAuxiliaryData.stateGraph) - .thenReturn(mockDirectedStateGraph); - - /// DirectedStateGraph - when(mockDirectedStateGraph.states).thenReturn([mockIntermediateState]); - - /// IntermediateState - when(mockIntermediateState.variation) - .thenReturn(mockIntermediateVariation); - - /// IntermediateVariation - when(mockIntermediateVariation.node).thenReturn(node2); - - /// Context - when(mockContext.project).thenReturn(mockProject); - when(mockContext.tree).thenReturn(tree); - - // Tree - tree.rootNode = node; - - /// Project - when(mockProject.genProjectData).thenReturn(mockPBGenerationProjectData); - when(mockProject.forest).thenReturn([]); - when(mockConfig.fileStructureStrategy) - .thenReturn(mockFileStructureStrategy); - - /// PBGenerationManager - when(mockPBGenerationManager.generate(node)).thenReturn('codeForBlue\n'); - when(mockPBGenerationManager.generate(node2)) - .thenReturn('codeForGreen\n'); - - /// PBGenerationProjectData - when(mockPBGenerationProjectData.addDependencies(any, any)) - .thenReturn('mockDependency'); - }); - - test('BLoC Strategy Test', () async { - await mockFileStructureStrategy.setUpDirectories(); - var tempNode = await bLoCMiddleware.applyMiddleware(tree); - expect(tempNode, isNull); - - var verification = - verify(mockFileStructureStrategy.commandCreated(captureAny)); - - expect(verification.captured[0].fileName, contains('state')); - expect(verification.captured[1].fileName, contains('event')); - expect(verification.captured[2].fileName, contains('bloc')); - }); - }); -} diff --git a/test/lib/middleware/provider_test.dart b/test/lib/middleware/provider_test.dart deleted file mode 100644 index 629fa867..00000000 --- a/test/lib/middleware/provider_test.dart +++ /dev/null @@ -1,141 +0,0 @@ -import 'package:mockito/mockito.dart'; -import 'package:parabeac_core/generation/generators/middleware/state_management/provider_middleware.dart'; -import 'package:parabeac_core/generation/generators/pb_generation_manager.dart'; -import 'package:parabeac_core/generation/generators/pb_generator.dart'; -import 'package:parabeac_core/generation/generators/util/pb_generation_project_data.dart'; -import 'package:parabeac_core/generation/generators/util/pb_generation_view_data.dart'; -import 'package:parabeac_core/generation/generators/value_objects/file_structure_strategy/provider_file_structure_strategy.dart'; -import 'package:parabeac_core/generation/generators/value_objects/generation_configuration/provider_generation_configuration.dart'; -import 'package:parabeac_core/interpret_and_optimize/entities/subclasses/pb_intermediate_node.dart'; -import 'package:parabeac_core/interpret_and_optimize/helpers/pb_context.dart'; -import 'package:parabeac_core/interpret_and_optimize/helpers/pb_intermediate_node_tree.dart'; -import 'package:parabeac_core/interpret_and_optimize/helpers/pb_project.dart'; -import 'package:parabeac_core/interpret_and_optimize/state_management/directed_state_graph.dart'; -import 'package:parabeac_core/interpret_and_optimize/state_management/intermediate_auxillary_data.dart'; -import 'package:parabeac_core/interpret_and_optimize/state_management/intermediate_state.dart'; -import 'package:parabeac_core/interpret_and_optimize/state_management/intermediate_variation.dart'; -import 'package:test/test.dart'; - -class MockPBGenerationManager extends Mock implements PBGenerationManager {} - -class MockPBIntermediateNode extends Mock implements PBIntermediateNode {} - -class MockContext extends Mock implements PBContext {} - -class MockProject extends Mock implements PBProject {} - -class MockPBGenerationProjectData extends Mock - implements PBGenerationProjectData {} - -class MockPBGenerationViewData extends Mock implements PBGenerationViewData {} - -class MockPBGenerator extends Mock implements PBGenerator {} - -class MockIntermediateAuxiliaryData extends Mock - implements IntermediateAuxiliaryData {} - -class MockDirectedStateGraph extends Mock implements DirectedStateGraph {} - -class MockIntermediateState extends Mock implements IntermediateState {} - -class MockIntermediateVariation extends Mock implements IntermediateVariation {} - -class MockConfig extends Mock implements ProviderGenerationConfiguration {} - -class MockFileStrategy extends Mock implements ProviderFileStructureStrategy {} - -void main() { - final modelPath = 'lib/models/'; - final viewPath = 'lib/widgets'; - group('Middlewares Tests', () { - var mockConfig = MockConfig(); - var mockPBGenerationManager = MockPBGenerationManager(); - var providerMiddleware = - ProviderMiddleware(mockPBGenerationManager, mockConfig); - var node = MockPBIntermediateNode(); - var node2 = MockPBIntermediateNode(); - var mockContext = MockContext(); - var mockProject = MockProject(); - var mockPBGenerationProjectData = MockPBGenerationProjectData(); - var mockPBGenerationViewData = MockPBGenerationViewData(); - var mockPBGenerator = MockPBGenerator(); - var providerFileStructureStrategy = MockFileStrategy(); - - var mockIntermediateAuxiliaryData = MockIntermediateAuxiliaryData(); - var mockDirectedStateGraph = MockDirectedStateGraph(); - var mockIntermediateState = MockIntermediateState(); - var mockIntermediateVariation = MockIntermediateVariation(); - var tree = PBIntermediateTree('test'); - - setUp(() async { - /// Nodes set up - // 1 - when(node.name).thenReturn('someElement/blue'); - when(node.generator).thenReturn(mockPBGenerator); - when(node.auxiliaryData).thenReturn(mockIntermediateAuxiliaryData); - when(node.managerData).thenReturn(mockPBGenerationViewData); - when(node.currentContext).thenReturn(mockContext); - // 2 - when(node2.name).thenReturn('someElement/green'); - when(node2.generator).thenReturn(mockPBGenerator); - when(node2.currentContext).thenReturn(mockContext); - - /// IntermediateAuxiliaryData - when(mockIntermediateAuxiliaryData.stateGraph) - .thenReturn(mockDirectedStateGraph); - - /// DirectedStateGraph - when(mockDirectedStateGraph.states).thenReturn([mockIntermediateState]); - - /// IntermediateState - when(mockIntermediateState.variation) - .thenReturn(mockIntermediateVariation); - - /// IntermediateVariation - when(mockIntermediateVariation.node).thenReturn(node2); - - /// PBGenerator - when(mockPBGenerator.generate(any, any)).thenReturn('code'); - - /// Context - when(mockContext.project).thenReturn(mockProject); - when(mockContext.tree).thenReturn(tree); - - // Tree - tree.rootNode = node; - - /// Project - when(mockProject.genProjectData).thenReturn(mockPBGenerationProjectData); - when(mockProject.forest).thenReturn([]); - - // Configuration - when(mockConfig.fileStructureStrategy) - .thenReturn(providerFileStructureStrategy); - when(mockConfig.registeredModels).thenReturn({}); - - /// PBGenerationManager - when(mockPBGenerationManager.generate(any)).thenReturn('code'); - - /// PBGenerationProjectData - when(mockPBGenerationProjectData.addDependencies('', '')).thenReturn(''); - - // FileStructureStrategy - when(providerFileStructureStrategy.RELATIVE_MODEL_PATH) - .thenReturn(modelPath); - }); - - test('Provider Strategy Test', () async { - await providerFileStructureStrategy.setUpDirectories(); - var tempNode = await providerMiddleware.applyMiddleware(tree); - expect(tempNode, isNull); - var verification = - verify(providerFileStructureStrategy.commandCreated(captureAny)); - - expect(verification.callCount, 3); - - expect(verification.captured[0].symbolPath, contains(modelPath)); - expect(verification.captured[1].symbolPath, contains(viewPath)); - expect(verification.captured[2].symbolPath, contains(viewPath)); - }); - }); -} diff --git a/test/lib/middleware/stateful_test.dart b/test/lib/middleware/stateful_test.dart deleted file mode 100644 index 6997cdcb..00000000 --- a/test/lib/middleware/stateful_test.dart +++ /dev/null @@ -1,118 +0,0 @@ -import 'package:mockito/mockito.dart'; -import 'package:parabeac_core/generation/generators/middleware/state_management/stateful_middleware.dart'; -import 'package:parabeac_core/generation/generators/pb_generation_manager.dart'; -import 'package:parabeac_core/generation/generators/pb_generator.dart'; -import 'package:parabeac_core/generation/generators/util/pb_generation_project_data.dart'; -import 'package:parabeac_core/generation/generators/util/pb_generation_view_data.dart'; -import 'package:parabeac_core/generation/generators/value_objects/file_structure_strategy/flutter_file_structure_strategy.dart'; -import 'package:parabeac_core/generation/generators/value_objects/generation_configuration/provider_generation_configuration.dart'; -import 'package:parabeac_core/interpret_and_optimize/entities/subclasses/pb_intermediate_node.dart'; -import 'package:parabeac_core/interpret_and_optimize/helpers/pb_context.dart'; -import 'package:parabeac_core/interpret_and_optimize/helpers/pb_intermediate_node_tree.dart'; -import 'package:parabeac_core/interpret_and_optimize/helpers/pb_project.dart'; -import 'package:test/test.dart'; -import 'provider_test.dart'; - -class MockPBGenerationManager extends Mock implements PBGenerationManager {} - -class MockPBIntermediateNode extends Mock implements PBIntermediateNode {} - -class MockContext extends Mock implements PBContext {} - -class MockProject extends Mock implements PBProject {} - -class MockPBGenerationProjectData extends Mock - implements PBGenerationProjectData {} - -class MockPBGenerationViewData extends Mock implements PBGenerationViewData {} - -class MockPBGenerator extends Mock implements PBGenerator {} - -class MockConfig extends Mock implements ProviderGenerationConfiguration {} - -class MockFileStrategy extends Mock implements FlutterFileStructureStrategy {} - -void main() { - group('Middlewares Tests', () { - var mockConfig = MockConfig(); - var mockPBGenerationManager = MockPBGenerationManager(); - var bLoCMiddleware = - StatefulMiddleware(mockPBGenerationManager, mockConfig); - var node = MockPBIntermediateNode(); - var node2 = MockPBIntermediateNode(); - var mockContext = MockContext(); - var mockProject = MockProject(); - var mockPBGenerationProjectData = MockPBGenerationProjectData(); - var mockPBGenerationViewData = MockPBGenerationViewData(); - var mockPBGenerator = MockPBGenerator(); - var mockFileStructureStrategy = MockFileStrategy(); - var mockIntermediateAuxiliaryData = MockIntermediateAuxiliaryData(); - var mockDirectedStateGraph = MockDirectedStateGraph(); - var mockIntermediateState = MockIntermediateState(); - var mockIntermediateVariation = MockIntermediateVariation(); - var tree = PBIntermediateTree('test'); - - setUp(() async { - /// Set up nodes - when(node.name).thenReturn('someElement/blue'); - when(node.generator).thenReturn(mockPBGenerator); - when(node.managerData).thenReturn(mockPBGenerationViewData); - when(node.currentContext).thenReturn(mockContext); - when(node.auxiliaryData).thenReturn(mockIntermediateAuxiliaryData); - // 2 - when(node2.name).thenReturn('someElement/green'); - when(node2.currentContext).thenReturn(mockContext); - when(node2.generator).thenReturn(mockPBGenerator); - - /// IntermediateAuxiliaryData - when(mockIntermediateAuxiliaryData.stateGraph) - .thenReturn(mockDirectedStateGraph); - - /// DirectedStateGraph - when(mockDirectedStateGraph.states).thenReturn([mockIntermediateState]); - - /// IntermediateState - when(mockIntermediateState.variation) - .thenReturn(mockIntermediateVariation); - - /// IntermediateVariation - when(mockIntermediateVariation.node).thenReturn(node2); - - /// Context - when(mockContext.project).thenReturn(mockProject); - when(mockContext.tree).thenReturn(tree); - - // Tree - tree.rootNode = node; - - /// Project - when(mockProject.genProjectData).thenReturn(mockPBGenerationProjectData); - when(mockProject.forest).thenReturn([]); - - // Configuration - when(mockConfig.fileStructureStrategy) - .thenReturn(mockFileStructureStrategy); - - /// PBGenerationManager - when(mockPBGenerationManager.generate(node)).thenReturn('codeForBlue\n'); - when(mockPBGenerationManager.generate(node2)) - .thenReturn('codeForGreen\n'); - - /// PBGenerationProjectData - when(mockPBGenerationProjectData.addDependencies(any, any)) - .thenReturn('mockDependency'); - }); - - test('Stateful Strategy Test', () async { - await mockFileStructureStrategy.setUpDirectories(); - var tempNode = await bLoCMiddleware.applyMiddleware(tree); - expect(tempNode, isNull); - - var verification = - verify(mockFileStructureStrategy.commandCreated(captureAny)); - - expect(verification.captured[0].fileName, contains('blue')); - expect(verification.captured[1].fileName, contains('green')); - }); - }); -} diff --git a/test/lib/output_services/dependency_writer_test.dart b/test/lib/output_services/dependency_writer_test.dart deleted file mode 100644 index f8daf78a..00000000 --- a/test/lib/output_services/dependency_writer_test.dart +++ /dev/null @@ -1,34 +0,0 @@ -import 'dart:io'; -import 'package:test/test.dart'; -import 'package:parabeac_core/generation/generators/writers/pb_flutter_writer.dart'; - -void main() { - group('Dependency writer test', () { - var writer; - var yamlAbsPath = - '${Directory.current.path}/test/lib/output_services/tmptst/pubspec.yaml'; - setUp(() async { - Process.runSync('flutter', ['create', 'tmptst'], - workingDirectory: - '${Directory.current.path}/test/lib/output_services/'); - writer = PBFlutterWriter(); - writer.addDependency('http_parser', '^3.1.4'); - writer.addDependency('shelf_proxy', '^0.1.0+7'); - }); - test('Dependency writer test', () async { - await writer.submitDependencies(yamlAbsPath); - var lineHttp = -1; - var lineShelf = -1; - var readYaml = File(yamlAbsPath).readAsLinesSync(); - lineHttp = readYaml.indexOf(' http_parser: ^3.1.4'); - lineShelf = readYaml.indexOf(' shelf_proxy: ^0.1.0+7'); - expect(lineHttp >= 0, true); - expect(lineShelf >= 0, true); - }, timeout: Timeout(Duration(minutes: 1))); - tearDownAll(() { - Process.runSync('rm', ['-r', 'tmptst'], - workingDirectory: - '${Directory.current.path}/test/lib/output_services/'); - }); - }); -} diff --git a/test/lib/output_services/flutter_writer_test.dart b/test/lib/output_services/flutter_writer_test.dart deleted file mode 100644 index c1d422a7..00000000 --- a/test/lib/output_services/flutter_writer_test.dart +++ /dev/null @@ -1,25 +0,0 @@ -import 'package:parabeac_core/generation/generators/writers/pb_flutter_writer.dart'; -import 'package:test/test.dart'; -import 'dart:io'; - -void main() { - group('Flutter writer test', () { - var writer; - var testingPath = - '${Directory.current.path}/test/lib/output_services/test_file.dart'; - setUp(() { - writer = PBFlutterWriter(); - }); - - test('', () async { - writer.write('Code to be written!', testingPath); - - expect(await File(testingPath).exists(), true); - }); - - tearDownAll(() async { - // To delete the testing file once the test is done - await File(testingPath).delete(); - }); - }); -} diff --git a/test/lib/output_services/png_gen_test.dart b/test/lib/output_services/png_gen_test.dart deleted file mode 100644 index 92b86b3a..00000000 --- a/test/lib/output_services/png_gen_test.dart +++ /dev/null @@ -1,110 +0,0 @@ -import 'dart:convert'; -import 'dart:io'; -import 'package:path/path.dart' as p; - -import 'package:parabeac_core/controllers/main_info.dart'; -import 'package:parabeac_core/input/figma/helper/figma_asset_processor.dart'; -import 'package:parabeac_core/input/sketch/helper/sketch_asset_processor.dart'; -import 'package:test/test.dart'; - -void main() async { - var process; - var uuids; - - /// This boolean is used to differentiate between local testing and github testing. - /// This environment variable should only be set in github and the test will fail - /// if this environment variable is enabled locally - var isGithub = Platform.environment.containsKey('PB_IS_GITHUB_TEST') && - Platform.environment['PB_IS_GITHUB_TEST'].contains('true'); - - group('Local Sketch PNG Testing:', () { - setUpAll(() async { - MainInfo().designFilePath = - '${Directory.current.path}/test/assets/parabeac_demo_alt.sketch'; - uuids = [ - '85D93FCD-5A69-4DAF-AE90-351CD9B64554', // Shape Group - 'B12B62C2-D7E3-452E-963E-A24216DD0942', // Shape Path - ]; - - /// Need to ensure Sketch Asset Converter is installed and running - var install = await Process.start('bash', [ - '${Directory.current.path}/pb-scripts/install.sh', - ]); - var exitCode = await install.exitCode; - if (exitCode != 0) { - throw 'install.sh finished with exit code $exitCode'; - } - process = await Process.start('npm', ['run', 'prod'], - workingDirectory: '${Directory.current.path}/SketchAssetConverter'); - - await for (var event in process.stdout.transform(utf8.decoder)) { - if (event.toLowerCase().contains('server is listening on port')) { - break; - } - } - }); - - test('Testing Image Conversion', () async { - for (var uuid in uuids) { - var image = await SketchAssetProcessor().processImage(uuid, 23, 21); - expect(image, isNot(null)); - } - }); - - tearDownAll(() { - process.kill(); - }); - }, skip: isGithub); - - group('Github Sketch PNG Testing:', () { - setUpAll(() async { - MainInfo().designFilePath = - '${Directory.current.path}/test/assets/parabeac_demo_alt.sketch'; - uuids = [ - '85D93FCD-5A69-4DAF-AE90-351CD9B64554', // Shape Group - 'B12B62C2-D7E3-452E-963E-A24216DD0942', // Shape Path - ]; - }); - - test('Testing Image Conversion', () async { - for (var uuid in uuids) { - var image = await SketchAssetProcessor().processImage(uuid, 23, 21); - expect(image, isNot(null)); - } - }); - }, skip: !isGithub); - - group('Figma PNG Testing', () { - setUpAll(() { - MainInfo().figmaKey = Platform.environment['FIG_API_KEY']; - MainInfo().figmaProjectID = 'zXXWPWb5wJXd0ImGUjEU1X'; - MainInfo().outputPath = '${Directory.current.path}/test/tmp/'; - var figmaUuids = [ - '0:12', // Boolean operation - '0:15', // Group - '0:31', // Ellipse - '0:57', // Rectangle - ]; - for (var uuid in figmaUuids) { - FigmaAssetProcessor().processImage(uuid); - } - }); - - test('Testing Image Conversion', () async { - await FigmaAssetProcessor().processImageQueue(); - for (var uuid in FigmaAssetProcessor().uuidQueue) { - expect( - File(p.join(MainInfo().pngPath, - '$uuid.png'.replaceAll(':', '_'))) - .existsSync(), - true); - } - }); - - tearDownAll(() { - Process.runSync('rm', ['-rf', '${Directory.current.path}/test/tmp/']); - }); - }, - skip: !Platform.environment.containsKey('FIG_API_KEY'), - timeout: Timeout(Duration(minutes: 1))); -} diff --git a/test/lib/output_services/project_builder_test.dart b/test/lib/output_services/project_builder_test.dart deleted file mode 100644 index a46d4b6f..00000000 --- a/test/lib/output_services/project_builder_test.dart +++ /dev/null @@ -1,129 +0,0 @@ -import 'dart:io'; -import 'package:parabeac_core/controllers/main_info.dart'; -import 'package:parabeac_core/generation/flutter_project_builder/flutter_project_builder.dart'; -import 'package:parabeac_core/generation/generators/layouts/pb_scaffold_gen.dart'; -import 'package:parabeac_core/generation/generators/util/pb_generation_project_data.dart'; -import 'package:parabeac_core/generation/generators/util/pb_generation_view_data.dart'; -import 'package:parabeac_core/generation/generators/value_objects/file_structure_strategy/flutter_file_structure_strategy.dart'; -import 'package:parabeac_core/generation/generators/value_objects/file_structure_strategy/pb_file_structure_strategy.dart'; -import 'package:parabeac_core/generation/generators/value_objects/generation_configuration/pb_generation_configuration.dart'; -import 'package:parabeac_core/generation/generators/visual-widgets/pb_container_gen.dart'; -import 'package:parabeac_core/generation/generators/writers/pb_flutter_writer.dart'; -import 'package:parabeac_core/interpret_and_optimize/entities/inherited_container.dart'; -import 'package:parabeac_core/interpret_and_optimize/entities/inherited_scaffold.dart'; -import 'package:parabeac_core/interpret_and_optimize/helpers/pb_context.dart'; -import 'package:parabeac_core/interpret_and_optimize/helpers/pb_intermediate_node_tree.dart'; -import 'package:parabeac_core/interpret_and_optimize/helpers/pb_project.dart'; -import 'package:parabeac_core/interpret_and_optimize/state_management/intermediate_auxillary_data.dart'; -import 'package:test/test.dart'; -import 'package:mockito/mockito.dart'; - -class MockIntermediateTree extends Mock implements PBIntermediateTree {} - -class MockScaffold extends Mock implements InheritedScaffold {} - -class MockContainer extends Mock implements InheritedContainer {} - -class MockProject extends Mock implements PBProject {} - -class MockData extends Mock implements IntermediateAuxiliaryData {} - -class MockContext extends Mock implements PBContext {} - -class MockConfig extends Mock implements GenerationConfiguration {} - -void main() { - group('Project Builder Test', () { - var projectBuilder; - - var outputPath = - '${Directory.current.path}/test/lib/output_services/temp2/'; - - MockIntermediateTree intermediateTree; - - MockScaffold scaffold; - - MockContainer container; - - MockProject project; - - PBContainerGenerator containerGenerator; - - PBScaffoldGenerator scaffoldGenerator; - - MockData mockData; - - FileStructureStrategy fss; - - MockContext context; - - setUp(() async { - var mockConfig = MockConfig(); - MainInfo().cwd = Directory.current; - MainInfo().outputPath = - '${Directory.current.path}/test/lib/output_services/'; - - project = MockProject(); - intermediateTree = MockIntermediateTree(); - scaffold = MockScaffold(); - container = MockContainer(); - mockData = MockData(); - context = MockContext(); - - containerGenerator = PBContainerGenerator(); - scaffoldGenerator = PBScaffoldGenerator(); - - when(intermediateTree.rootNode).thenReturn(scaffold); - when(intermediateTree.name).thenReturn('testTree'); - when(intermediateTree.generationViewData).thenReturn(PBGenerationViewData()); - when(intermediateTree.dependentsOn) - .thenReturn([].iterator); - - when(project.projectName).thenReturn( - '${Directory.current.path}/test/lib/output_services/temp2/'); - when(project.forest).thenReturn([intermediateTree]); - when(project.genProjectData).thenReturn(PBGenerationProjectData()); - when(project.projectAbsPath).thenReturn(outputPath); - when(project.genProjectData).thenReturn(PBGenerationProjectData()); - - when(context.project).thenReturn(project); - - when(scaffold.child).thenReturn(container); - when(scaffold.isHomeScreen).thenReturn(false); - when(scaffold.generator).thenReturn(scaffoldGenerator); - when(scaffold.name).thenReturn('testingPage'); - when(scaffold.managerData).thenReturn(PBGenerationViewData()); - when(scaffold.auxiliaryData).thenReturn(mockData); - when(scaffold.currentContext).thenReturn(context); - - when(container.generator).thenReturn(containerGenerator); - when(container.auxiliaryData).thenReturn(mockData); - when(container.managerData).thenReturn(PBGenerationViewData()); - - fss = - FlutterFileStructureStrategy(outputPath, PBFlutterWriter(), project); - await fss.setUpDirectories(); - when(mockConfig.fileStructureStrategy).thenReturn(fss); - - projectBuilder = FlutterProjectBuilder(mockConfig, - // genProjectAbsPath: Directory.current.path, - project: project, - pageWriter: PBFlutterWriter()); - }); - test( - '', - () async { - /// Check that the Dart file was created - /// It should be a file named `testingPage` - /// Stafefulwidget with a Scaffold and a Container - await projectBuilder.genProjectFiles(); - }, - timeout: Timeout( - Duration(minutes: 1), - ), - ); - tearDownAll(() { - Process.runSync('rm', ['-rf', '$outputPath']); - }); - }); -}