Skip to content

Commit

Permalink
Remove external libraries from server dependency (#16)
Browse files Browse the repository at this point in the history
* Remove uuid and quiver dependency

* Remove json_serializable and json_annotation dependencies

* bump version

---------

Co-authored-by: saikrishna321 <saikrishna321@yahoo.com>
  • Loading branch information
sudharsan-selvaraj and saikrishna321 committed Jul 3, 2024
1 parent 712ded3 commit 444e996
Show file tree
Hide file tree
Showing 37 changed files with 315 additions and 598 deletions.
82 changes: 1 addition & 81 deletions demo-app/pubspec.lock
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ packages:
path: "../server"
relative: true
source: path
version: "0.0.11"
version: "0.0.13"
args:
dependency: transitive
description:
Expand Down Expand Up @@ -120,14 +120,6 @@ packages:
url: "https://pub.dev"
source: hosted
version: "3.0.3"
csv:
dependency: transitive
description:
name: csv
sha256: c6aa2679b2a18cb57652920f674488d89712efaf4d3fdf2e537215b35fc19d6c
url: "https://pub.dev"
source: hosted
version: "6.0.0"
cupertino_icons:
dependency: "direct main"
description:
Expand All @@ -136,14 +128,6 @@ packages:
url: "https://pub.dev"
source: hosted
version: "1.0.8"
dart_ping:
dependency: transitive
description:
name: dart_ping
sha256: "2f5418d0a5c64e53486caaac78677b25725b1e13c33c5be834ce874ea18bd24f"
url: "https://pub.dev"
source: hosted
version: "9.0.1"
dart_style:
dependency: transitive
description:
Expand Down Expand Up @@ -176,14 +160,6 @@ packages:
url: "https://pub.dev"
source: hosted
version: "7.0.0"
fixnum:
dependency: transitive
description:
name: fixnum
sha256: "25517a4deb0c03aa0f32fd12db525856438902d9c16536311e76cdc57b31d7d1"
url: "https://pub.dev"
source: hosted
version: "1.1.0"
flutter:
dependency: "direct main"
description: flutter
Expand Down Expand Up @@ -358,22 +334,6 @@ packages:
url: "https://pub.dev"
source: hosted
version: "1.0.0"
multicast_dns:
dependency: transitive
description:
name: multicast_dns
sha256: "316cc47a958d4bd3c67bd238fe8b44fdfb6133bad89cb191c0c3bd3edb14e296"
url: "https://pub.dev"
source: hosted
version: "0.3.2+6"
network_tools:
dependency: transitive
description:
name: network_tools
sha256: cf5726a3c3edd82de5f6d6511cb618259a083225ccc2bdb8a55d87b37014cadf
url: "https://pub.dev"
source: hosted
version: "5.0.2"
package_config:
dependency: transitive
description:
Expand Down Expand Up @@ -526,14 +486,6 @@ packages:
url: "https://pub.dev"
source: hosted
version: "5.0.2"
process_run:
dependency: transitive
description:
name: process_run
sha256: "8d9c6198b98fbbfb511edd42e7364e24d85c163e47398919871b952dc86a423e"
url: "https://pub.dev"
source: hosted
version: "0.14.2"
pub_semver:
dependency: transitive
description:
Expand All @@ -558,14 +510,6 @@ packages:
url: "https://pub.dev"
source: hosted
version: "3.2.1"
sembast:
dependency: transitive
description:
name: sembast
sha256: "2a768b145bee5c72ae78c2641842ee348a6d345172af1070a497293c44f65ae1"
url: "https://pub.dev"
source: hosted
version: "3.7.1+2"
shelf:
dependency: transitive
description:
Expand Down Expand Up @@ -643,14 +587,6 @@ packages:
url: "https://pub.dev"
source: hosted
version: "1.10.0"
sprintf:
dependency: transitive
description:
name: sprintf
sha256: "1fc9ffe69d4df602376b52949af107d8f5703b77cda567c4d7d86a0693120f23"
url: "https://pub.dev"
source: hosted
version: "7.0.0"
stack_trace:
dependency: transitive
description:
Expand Down Expand Up @@ -723,14 +659,6 @@ packages:
url: "https://pub.dev"
source: hosted
version: "1.3.2"
universal_io:
dependency: transitive
description:
name: universal_io
sha256: "1722b2dcc462b4b2f3ee7d188dad008b6eb4c40bbd03a3de451d82c78bba9aad"
url: "https://pub.dev"
source: hosted
version: "2.2.2"
url_launcher:
dependency: "direct main"
description:
Expand Down Expand Up @@ -795,14 +723,6 @@ packages:
url: "https://pub.dev"
source: hosted
version: "3.1.1"
uuid:
dependency: transitive
description:
name: uuid
sha256: "814e9e88f21a176ae1359149021870e87f7cddaf633ab678a5d2b0bff7fd1ba8"
url: "https://pub.dev"
source: hosted
version: "4.4.0"
vector_math:
dependency: transitive
description:
Expand Down
10 changes: 5 additions & 5 deletions server/lib/src/driver.dart
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
import 'package:appium_flutter_server/src/exceptions/no_driver_exception.dart';
import 'package:appium_flutter_server/src/models/session.dart';
import 'package:appium_flutter_server/src/utils/test_utils.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:integration_test/integration_test.dart';
import 'package:package_info_plus/package_info_plus.dart';
import 'package:uuid/uuid.dart';

class FlutterDriver {
late WidgetTester _tester;
Expand All @@ -24,17 +24,17 @@ class FlutterDriver {

void initialize(
{required WidgetTester tester,
required IntegrationTestWidgetsFlutterBinding binding,
required PackageInfo appInfo,
required String serverVersion}) async {
required IntegrationTestWidgetsFlutterBinding binding,
required PackageInfo appInfo,
required String serverVersion}) async {
_tester = tester;
_binding = binding;
_appInfo = appInfo;
_serverVersion = serverVersion;
}

String initializeSession(Map<String, dynamic> capabilities) {
_session = Session(const Uuid().v4(), capabilities);
_session = Session(generateUUID(), capabilities);
return _session!.sessionId;
}

Expand Down
1 change: 0 additions & 1 deletion server/lib/src/handler/get_rect.dart
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
import 'dart:math';

import 'package:appium_flutter_server/src/driver.dart';
import 'package:appium_flutter_server/src/handler/request/request_handler.dart';
Expand Down
1 change: 0 additions & 1 deletion server/lib/src/handler/get_size.dart
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
import 'dart:math';

import 'package:appium_flutter_server/src/driver.dart';
import 'package:appium_flutter_server/src/handler/request/request_handler.dart';
Expand Down
6 changes: 2 additions & 4 deletions server/lib/src/handler/wait/base_wait.dart
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,8 @@ import 'package:appium_flutter_server/src/models/api/wait.dart';
import 'package:appium_flutter_server/src/utils/element_helper.dart';
import 'package:flutter_test/flutter_test.dart';

import 'package:uuid/uuid.dart';

abstract class BaseWaithHandler extends RequestHandler {
static final Duration defaultWaitTimeout = Duration(seconds: 5);
static const Duration defaultWaitTimeout = Duration(seconds: 5);

BaseWaithHandler(super.route);

Expand All @@ -25,7 +23,7 @@ abstract class BaseWaithHandler extends RequestHandler {
if (model.locator != null) {
Finder finder = await ElementHelper.locateElement(model.locator!,
evaluatePresence: false);
return FlutterElement(finder, Uuid().v4());
return FlutterElement.fromBy(finder);
}
throw FlutterAutomationException(
"Wait method requires a valid element id or locator strategy");
Expand Down
14 changes: 7 additions & 7 deletions server/lib/src/internal/element_cache.dart
Original file line number Diff line number Diff line change
@@ -1,23 +1,23 @@
import 'package:appium_flutter_server/src/exceptions/stale_element_reference_exception.dart';
import 'package:appium_flutter_server/src/internal/flutter_element.dart';
import 'package:appium_flutter_server/src/internal/flutter_finder_strategy.dart';
import 'package:appium_flutter_server/src/internal/lru_cache.dart';
import 'package:appium_flutter_server/src/logger.dart';
import 'package:appium_flutter_server/src/utils/element_helper.dart';
import 'package:appium_flutter_server/src/utils/test_utils.dart';
import 'package:flutter/widgets.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:synchronized/extension.dart';
import 'package:quiver/collection.dart';

class ElementsCache {
late LruMap<String, FlutterElement> cache;
late LRUCache<String, FlutterElement> cache;

ElementsCache(int cacheSize) {
cache = LruMap(maximumSize: cacheSize);
cache = LRUCache(cacheSize);
}

Future<FlutterElement> get(String id, {bool evaluatePresence = true}) async {
return synchronized(() async {
FlutterElement? element = cache[id];
FlutterElement? element = cache.get(id);
if (element == null) {
try {
element = await FlutterFinderStrategy.findElement(id);
Expand All @@ -44,8 +44,8 @@ class ElementsCache {
{bool isSingle = true, String? contextId}) {
return synchronized(() {
FlutterElement flutterElement = FlutterElement.childElement(
by, ElementHelper.generateUuid(by), contextId);
cache[flutterElement.id] = flutterElement;
by, generateUUIDFromFinder(by), contextId);
cache.put(flutterElement.id, flutterElement);
return flutterElement;
});
}
Expand Down
4 changes: 2 additions & 2 deletions server/lib/src/internal/flutter_element.dart
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import 'package:appium_flutter_server/src/utils/test_utils.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:uuid/uuid.dart';

class FlutterElement {
final Finder _by;
Expand All @@ -8,7 +8,7 @@ class FlutterElement {

FlutterElement(this._by, this._id);

FlutterElement.fromBy({required Finder by}) : this(by, Uuid().v4());
FlutterElement.fromBy(Finder by) : this(by, generateUUIDFromFinder(by));

FlutterElement.childElement(
this._by,
Expand Down
4 changes: 1 addition & 3 deletions server/lib/src/internal/flutter_finder_strategy.dart
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@ import 'package:appium_flutter_server/src/logger.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter/widgets.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:uuid/uuid.dart';

class FlutterFinderStrategy {
static Future<FlutterElement> findElement(String elementId) async {
Expand Down Expand Up @@ -59,8 +58,7 @@ class FlutterFinderStrategy {
"Unable to locate element with strategy: ${strategy['finderType']}");
}

return FlutterElement(
ensureElementPresent ? by.at(0) : by, const Uuid().v4());
return FlutterElement.fromBy(ensureElementPresent ? by.at(0) : by);
}

static Finder? _byValueKey(Map<String, dynamic> strategy) {
Expand Down
27 changes: 27 additions & 0 deletions server/lib/src/internal/lru_cache.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
import 'dart:collection';

class LRUCache<K, V> {
final int _capacity;
final Map<K, V> _cache = LinkedHashMap<K, V>();

LRUCache(this._capacity);

void put(K key, V value) {
if (_cache.containsKey(key)) {
_cache.remove(key);
} else if (_cache.length >= _capacity) {
var oldestKey = _cache.keys.first;
_cache.remove(oldestKey);
}
_cache[key] = value;
}

V? get(K key) {
if (_cache.containsKey(key)) {
var value = _cache.remove(key)!;
_cache[key] = value;
return value;
}
return null;
}
}
13 changes: 6 additions & 7 deletions server/lib/src/models/api/create_session.dart
Original file line number Diff line number Diff line change
@@ -1,14 +1,13 @@
import 'package:json_annotation/json_annotation.dart';

part 'generated/create_session.g.dart';

@JsonSerializable()
class CreateSessionModel {
Map<String, dynamic>? capabilities;
CreateSessionModel({required this.capabilities});

factory CreateSessionModel.fromJson(Map<String, dynamic> json) =>
_$CreateSessionModelFromJson(json);
CreateSessionModel(
capabilities: json['capabilities'] as Map<String, dynamic>?,
);

Map<String, dynamic> toJson() => _$CreateSessionModelToJson(this);
Map<String, dynamic> toJson() => <String, dynamic>{
'capabilities': capabilities,
};
}
21 changes: 11 additions & 10 deletions server/lib/src/models/api/drag_drop.dart
Original file line number Diff line number Diff line change
@@ -1,22 +1,23 @@
import 'package:appium_flutter_server/src/models/api/find_element.dart';
import 'package:json_annotation/json_annotation.dart';
import 'package:appium_flutter_server/src/models/api/element.dart';

part 'generated/drag_drop.g.dart';

@JsonSerializable()
class DragAndDropModel {
ElementModel source;
ElementModel target;
int? dragDuration;

DragAndDropModel(
{required this.source,
required this.target,
this.dragDuration});
{required this.source, required this.target, this.dragDuration});

factory DragAndDropModel.fromJson(Map<String, dynamic> json) =>
_$DragAndDropModelFromJson(json);
DragAndDropModel(
source: ElementModel.fromJson(json['source'] as Map<String, dynamic>),
target: ElementModel.fromJson(json['target'] as Map<String, dynamic>),
dragDuration: (json['dragDuration'] as num?)?.toInt(),
);

Map<String, dynamic> toJson() => _$DragAndDropModelToJson(this);
Map<String, dynamic> toJson() => <String, dynamic>{
'source': source,
'target': target,
'dragDuration': dragDuration,
};
}
Loading

0 comments on commit 444e996

Please sign in to comment.