blob: 6ba8a7eafb42e4fce1d3d8895bb09b122d0a9a80 [file] [log] [blame]
// Copyright (c) 2025, 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 'dart:core';
import 'dart:io';
import 'package:analyzer/dart/analysis/utilities.dart';
import 'package:native_doc_dartifier/src/public_abstractor.dart';
import 'package:native_doc_dartifier/src/rag.dart';
import 'package:test/test.dart';
Future<void> main() async {
final bindingsFile = File('test/dartify_simple_cases/bindings.dart');
if (!await bindingsFile.exists()) {
stderr.writeln('File not found: ');
exit(1);
}
final bindings = await bindingsFile.readAsString();
final abstractor = PublicAbstractor();
parseString(content: bindings).unit.visitChildren(abstractor);
final classesSummary =
abstractor
.getBindingsClassesSummary()
.map((c) => c.toDartLikeRepresentation())
.toList();
print('Total Number of Classes: ${classesSummary.length}');
final rag = await RAG.create();
await rag.addAllDocumentsToRag(classesSummary);
group('Normal RAG Query', () {
test('Snippet that uses Accumulator only', () async {
const javaSnippet = '''
Boolean overloadedMethods() {
Accumulator acc1 = new Accumulator();
acc1.add(10);
acc1.add(10, 10);
acc1.add(10, 10, 10);
Accumulator acc2 = new Accumulator(20);
acc2.add(acc1);
Accumulator acc3 = new Accumulator(acc2);
return acc3.accumulator == 80;
}
''';
final documents = await rag.queryRAG(javaSnippet, numRetrievedDocs: 2);
final ragSummary = documents.join('\n');
print('Query Results:');
for (var i = 0; i < documents.length; i++) {
print(documents[i].split('\n')[0]);
}
expect(ragSummary.contains('class Accumulator'), isTrue);
});
test('Snippet that uses Example only', () async {
const javaSnippet = '''
Boolean useEnums() {
Example example = new Example();
Boolean isTrueUsage = example.enumValueToString(Operation.ADD) == "Addition";
return isTrueUsage;
}''';
final documents = await rag.queryRAG(javaSnippet, numRetrievedDocs: 2);
final ragSummary = documents.join('\n');
print('Query Results:');
for (var i = 0; i < documents.length; i++) {
print(documents[i].split('\n')[0]);
}
expect(ragSummary.contains('class Example'), isTrue);
});
});
}