|  | // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file | 
|  | // for details. All rights reserved. Use of this source code is governed by a | 
|  | // BSD-style license that can be found in the LICENSE file. | 
|  |  | 
|  | import 'package:analysis_server/protocol/protocol_generated.dart'; | 
|  | import 'package:analysis_server/src/protocol_server.dart'; | 
|  | import 'package:analyzer/file_system/file_system.dart'; | 
|  | import 'package:test/test.dart'; | 
|  | import 'package:test_reflective_loader/test_reflective_loader.dart'; | 
|  |  | 
|  | import 'analysis_server_base.dart'; | 
|  | import 'mocks.dart'; | 
|  |  | 
|  | void main() { | 
|  | defineReflectiveSuite(() { | 
|  | defineReflectiveTests(ExecutionDomainTest); | 
|  | }); | 
|  | // group('ExecutionDomainHandler', () { | 
|  | //   var provider = MemoryResourceProvider(); | 
|  | //   late AnalysisServer server; | 
|  | //   late ExecutionDomainHandler handler; | 
|  | // | 
|  | //   setUp(() { | 
|  | //     server = AnalysisServer( | 
|  | //         MockServerChannel(), | 
|  | //         provider, | 
|  | //         AnalysisServerOptions(), | 
|  | //         DartSdkManager(''), | 
|  | //         CrashReportingAttachmentsBuilder.empty, | 
|  | //         InstrumentationService.NULL_SERVICE); | 
|  | //     handler = ExecutionDomainHandler(server, server.executionContext); | 
|  | //   }); | 
|  | // | 
|  | //  // `TODO`(brianwilkerson) Re-enable these tests if we re-enable the | 
|  | //  // execution.mapUri request. | 
|  | //    group('mapUri', () { | 
|  | //      String contextId; | 
|  | // | 
|  | //      void createExecutionContextIdForFile(String path) { | 
|  | //        Request request = new ExecutionCreateContextParams(path).toRequest('0', clientUriConverter: server.uriConverter); | 
|  | //        Response response = handler.handleRequest(request, NotCancelableToken()); | 
|  | //        expect(response, isResponseSuccess('0')); | 
|  | //        ExecutionCreateContextResult result = | 
|  | //            new ExecutionCreateContextResult.fromResponse(response, clientUriConverter: server.uriConverter); | 
|  | //        contextId = result.id; | 
|  | //      } | 
|  | // | 
|  | //      setUp(() { | 
|  | //        Folder folder = provider.newFile('/a/b.dart', '').parent; | 
|  | //        server.folderMap.putIfAbsent(folder, () { | 
|  | //          SourceFactory factory = | 
|  | //              new SourceFactory([new ResourceUriResolver(provider)]); | 
|  | //          AnalysisContext context = | 
|  | //              AnalysisEngine.instance.createAnalysisContext(); | 
|  | //          context.sourceFactory = factory; | 
|  | //          return context; | 
|  | //        }); | 
|  | //        createExecutionContextIdForFile('/a/b.dart'); | 
|  | //      }); | 
|  | // | 
|  | //      tearDown(() { | 
|  | //        Request request = | 
|  | //            new ExecutionDeleteContextParams(contextId).toRequest('1', clientUriConverter: server.uriConverter); | 
|  | //        Response response = handler.handleRequest(request, NotCancelableToken()); | 
|  | //        expect(response, isResponseSuccess('1')); | 
|  | //      }); | 
|  | // | 
|  | //      group('file to URI', () { | 
|  | //        test('does not exist', () { | 
|  | //          Request request = | 
|  | //              new ExecutionMapUriParams(contextId, file: '/a/c.dart') | 
|  | //                  .toRequest('2', clientUriConverter: server.uriConverter); | 
|  | //          Response response = handler.handleRequest(request, NotCancelableToken()); | 
|  | //          expect(response, isResponseFailure('2')); | 
|  | //        }); | 
|  | // | 
|  | //        test('directory', () { | 
|  | //          provider.newFolder('/a/d'); | 
|  | //          Request request = | 
|  | //              new ExecutionMapUriParams(contextId, file: '/a/d').toRequest('2', clientUriConverter: server.uriConverter); | 
|  | //          Response response = handler.handleRequest(request, NotCancelableToken()); | 
|  | //          expect(response, isResponseFailure('2')); | 
|  | //        }); | 
|  | //      }); | 
|  | // | 
|  | //      group('URI to file', () { | 
|  | //        test('invalid', () { | 
|  | //          Request request = | 
|  | //              new ExecutionMapUriParams(contextId, uri: 'foo:///a/b.dart') | 
|  | //                  .toRequest('2', clientUriConverter: server.uriConverter); | 
|  | //          Response response = handler.handleRequest(request, NotCancelableToken()); | 
|  | //          expect(response, isResponseFailure('2')); | 
|  | //        }); | 
|  | //      }); | 
|  | // | 
|  | //      test('invalid context id', () { | 
|  | //        Request request = | 
|  | //            new ExecutionMapUriParams('xxx', uri: '').toRequest('4', clientUriConverter: server.uriConverter); | 
|  | //        Response response = handler.handleRequest(request, NotCancelableToken()); | 
|  | //        expect(response, isResponseFailure('4')); | 
|  | //      }); | 
|  | // | 
|  | //      test('both file and uri', () { | 
|  | //        Request request = | 
|  | //            new ExecutionMapUriParams('xxx', file: '', uri: '').toRequest('5', clientUriConverter: server.uriConverter); | 
|  | //        Response response = handler.handleRequest(request, NotCancelableToken()); | 
|  | //        expect(response, isResponseFailure('5')); | 
|  | //      }); | 
|  | // | 
|  | //      test('neither file nor uri', () { | 
|  | //        Request request = new ExecutionMapUriParams('xxx').toRequest('6'); | 
|  | //        Response response = handler.handleRequest(request, NotCancelableToken()); | 
|  | //        expect(response, isResponseFailure('6')); | 
|  | //      }); | 
|  | //    }); | 
|  | //   }); | 
|  | } | 
|  |  | 
|  | @reflectiveTest | 
|  | class ExecutionDomainTest extends PubPackageAnalysisServerTest { | 
|  | late String contextId; | 
|  |  | 
|  | @override | 
|  | Future<void> setUp() async { | 
|  | super.setUp(); | 
|  | await setRoots(included: [workspaceRootPath], excluded: []); | 
|  | await _createExecutionContext(testFile); | 
|  | } | 
|  |  | 
|  | @override | 
|  | Future<void> tearDown() async { | 
|  | await _disposeExecutionContext(); | 
|  | await super.tearDown(); | 
|  | } | 
|  |  | 
|  | Future<void> test_createAndDeleteMultipleContexts() async { | 
|  | var request = ExecutionCreateContextParams( | 
|  | '/a/b.dart', | 
|  | ).toRequest('0', clientUriConverter: server.uriConverter); | 
|  | var response = await handleSuccessfulRequest(request); | 
|  | expect(response, isResponseSuccess('0')); | 
|  | var result = ExecutionCreateContextResult.fromResponse( | 
|  | response, | 
|  | clientUriConverter: server.uriConverter, | 
|  | ); | 
|  | var id0 = result.id; | 
|  |  | 
|  | request = ExecutionCreateContextParams( | 
|  | '/c/d.dart', | 
|  | ).toRequest('1', clientUriConverter: server.uriConverter); | 
|  | response = await handleSuccessfulRequest(request); | 
|  | expect(response, isResponseSuccess('1')); | 
|  | result = ExecutionCreateContextResult.fromResponse( | 
|  | response, | 
|  | clientUriConverter: server.uriConverter, | 
|  | ); | 
|  | var id1 = result.id; | 
|  |  | 
|  | expect(id0 == id1, isFalse); | 
|  |  | 
|  | request = ExecutionDeleteContextParams( | 
|  | id0, | 
|  | ).toRequest('2', clientUriConverter: server.uriConverter); | 
|  | response = await handleSuccessfulRequest(request); | 
|  | expect(response, isResponseSuccess('2')); | 
|  |  | 
|  | request = ExecutionDeleteContextParams( | 
|  | id1, | 
|  | ).toRequest('3', clientUriConverter: server.uriConverter); | 
|  | response = await handleSuccessfulRequest(request); | 
|  | expect(response, isResponseSuccess('3')); | 
|  | } | 
|  |  | 
|  | Future<void> test_deleteNonExistentContext() async { | 
|  | var request = ExecutionDeleteContextParams( | 
|  | '13', | 
|  | ).toRequest('0', clientUriConverter: server.uriConverter); | 
|  | var response = await handleSuccessfulRequest(request); | 
|  | // TODO(brianwilkerson): It isn't currently specified to be an error if a | 
|  | // client attempts to delete a context that doesn't exist. Should it be? | 
|  | //        expect(response, isResponseFailure('0')); | 
|  | expect(response, isResponseSuccess('0')); | 
|  | } | 
|  |  | 
|  | Future<void> test_getSuggestions() async { | 
|  | var code = r''' | 
|  | class A { | 
|  | int foo; | 
|  | } | 
|  |  | 
|  | void contextFunction() { | 
|  | var a = A(); | 
|  | // context line | 
|  | } | 
|  | '''; | 
|  |  | 
|  | var path = newFile('/test.dart', '').path; | 
|  | newFile(path, code); | 
|  |  | 
|  | var request = ExecutionGetSuggestionsParams( | 
|  | 'a.', | 
|  | 2, | 
|  | path, | 
|  | code.indexOf('// context line'), | 
|  | <RuntimeCompletionVariable>[], | 
|  | ).toRequest('0', clientUriConverter: server.uriConverter); | 
|  | var response = await handleSuccessfulRequest(request); | 
|  |  | 
|  | var result = ExecutionGetSuggestionsResult.fromResponse( | 
|  | response, | 
|  | clientUriConverter: server.uriConverter, | 
|  | ); | 
|  | //    expect(result.suggestions, isNotEmpty); | 
|  | // | 
|  | //    expect( | 
|  | //        result.suggestions, | 
|  | //        contains( | 
|  | //            predicate<CompletionSuggestion>((s) => s.completion == 'foo'))); | 
|  |  | 
|  | // TODO(brianwilkerson): Restore the expectations above (and delete the line | 
|  | // below) after the functionality has been re-enabled. | 
|  | expect(result.suggestions, isEmpty); | 
|  | } | 
|  |  | 
|  | Future<void> test_mapUri_file() async { | 
|  | var path = newFile('/a/b.dart', '').path; | 
|  | // map the file | 
|  | var result = await _mapUri(file: path); | 
|  | expect(result.file, isNull); | 
|  | expect(result.uri, Uri.file(path).toString()); | 
|  | } | 
|  |  | 
|  | Future<void> test_mapUri_file_dartUriKind() async { | 
|  | var path = (await _mapUri(uri: 'dart:async')).file; | 
|  | // map file | 
|  | var result = await _mapUri(file: path); | 
|  | expect(result.file, isNull); | 
|  | expect(result.uri, 'dart:async'); | 
|  | } | 
|  |  | 
|  | Future<void> test_mapUri_uri() async { | 
|  | var path = newFile('/a/b.dart', '').path; | 
|  | // map the uri | 
|  | var result = await _mapUri(uri: Uri.file(path).toString()); | 
|  | expect(result.file, convertPath('/a/b.dart')); | 
|  | expect(result.uri, isNull); | 
|  | } | 
|  |  | 
|  | Future<void> _createExecutionContext(File file) async { | 
|  | var request = ExecutionCreateContextParams( | 
|  | file.path, | 
|  | ).toRequest('0', clientUriConverter: server.uriConverter); | 
|  | var response = await handleSuccessfulRequest(request); | 
|  | expect(response, isResponseSuccess('0')); | 
|  | var result = ExecutionCreateContextResult.fromResponse( | 
|  | response, | 
|  | clientUriConverter: server.uriConverter, | 
|  | ); | 
|  | contextId = result.id; | 
|  | } | 
|  |  | 
|  | Future<void> _disposeExecutionContext() async { | 
|  | var request = ExecutionDeleteContextParams( | 
|  | contextId, | 
|  | ).toRequest('1', clientUriConverter: server.uriConverter); | 
|  | var response = await handleSuccessfulRequest(request); | 
|  | expect(response, isResponseSuccess('1')); | 
|  | } | 
|  |  | 
|  | Future<ExecutionMapUriResult> _mapUri({String? file, String? uri}) async { | 
|  | var request = ExecutionMapUriParams( | 
|  | contextId, | 
|  | file: file, | 
|  | uri: uri, | 
|  | ).toRequest('2', clientUriConverter: server.uriConverter); | 
|  | var response = await handleSuccessfulRequest(request); | 
|  | expect(response, isResponseSuccess('2')); | 
|  | return ExecutionMapUriResult.fromResponse( | 
|  | response, | 
|  | clientUriConverter: server.uriConverter, | 
|  | ); | 
|  | } | 
|  | } |