Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions pkgs/args/lib/src/parser.dart
Original file line number Diff line number Diff line change
Expand Up @@ -207,6 +207,11 @@ class Parser {
// The first character is a non-flag option, so the rest must be the
// value.
var value = '${lettersAndDigits.substring(1)}$rest';
// If the value starts with '=' (like in -o=value), strip it to match
// the behavior of long options (--option=value).
if (value.startsWith('=')) {
value = value.substring(1);
}
_setOption(_results, first, value, '-$c');
} else {
// If we got some non-flag characters, then it must be a value, but
Expand Down
64 changes: 64 additions & 0 deletions pkgs/args/test/short_flag_equals_test.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
import 'package:args/args.dart';
import 'package:test/test.dart';

void main() {
group('Short flag with equals syntax', () {
test('should parse value correctly without including equals sign', () {
final parser = ArgParser();
parser.addOption('option', abbr: 'o');

// Test long flag with equals
final result1 = parser.parse(['--option=value']);
expect(result1['option'], equals('value'));

// Test short flag with equals - currently fails
final result2 = parser.parse(['-o=value']);
expect(result2['option'], equals('value')); // Currently gets '=value'

// Test short flag with space (this works correctly)
final result3 = parser.parse(['-o', 'value']);
expect(result3['option'], equals('value'));

// All three should produce the same result
expect(result1['option'], equals(result2['option']));
expect(result2['option'], equals(result3['option']));
});

test('should handle complex values with equals', () {
final parser = ArgParser();
parser.addOption('config', abbr: 'c');

final result1 = parser.parse(['--config=key=value']);
final result2 = parser.parse(['-c=key=value']);

expect(result1['config'], equals('key=value'));
expect(result2['config'],
equals('key=value')); // Currently gets '=key=value'
});

test('should handle empty value after equals', () {
final parser = ArgParser();
parser.addOption('value', abbr: 'v');

final result1 = parser.parse(['--value=']);
final result2 = parser.parse(['-v=']);

expect(result1['value'], equals(''));
expect(result2['value'], equals('')); // Currently gets '='
});

test('should work with real-world example (bundle ID)', () {
final parser = ArgParser();
parser.addOption('ios-bundle-id', abbr: 'i');

final bundleId = 'com.example.app';

final result1 = parser.parse(['--ios-bundle-id=$bundleId']);
final result2 = parser.parse(['-i=$bundleId']);

expect(result1['ios-bundle-id'], equals(bundleId));
expect(result2['ios-bundle-id'],
equals(bundleId)); // Currently gets '=com.example.app'
});
});
}