Merge branch 'master' into weakref

This commit is contained in:
rfm 2024-12-31 14:33:53 +00:00
commit 5a9eeec452
6 changed files with 69 additions and 35 deletions

View file

@ -1,3 +1,15 @@
2024-12-31 Richard Frith-Macdonald <rfm@gnu.org>
* Source/NSTimeZone.m: Add GNUSTEP_BUILTIN_TZ environment variable to
force the use of the IANA standard based time zone files we provide
in the distribution rather than the system supplied time zone data.
This allows us to standardise test behavior across different systems.
* Tests/base/NSCalendarDate/TestInfo: set GNUSTEP_BUILTIN_TZ=1
* Tests/base/NSCalendarDate/test02.m: Change from using the MET zone
to using CET for tests since the IANA data has changed to make MET
behave aas CET.
* Tests/base/NSTimeZone/TestInfo: set GNUSTEP_BUILTIN_TZ=1
2024-12-27 Richard Frith-Macdonald <rfm@gnu.org> 2024-12-27 Richard Frith-Macdonald <rfm@gnu.org>
* Headers/GNUstepBase/GSIMap.h: * Headers/GNUstepBase/GSIMap.h:
@ -28,7 +40,7 @@
* Source/NSURLProtocol.m: fix leaks due to retain loops. * Source/NSURLProtocol.m: fix leaks due to retain loops.
* Source/Additions/NSObject+GNUstepBase.m: fix issues in new * Source/Additions/NSObject+GNUstepBase.m: fix issues in new
-trackOownership mechanism to log tracked instances at exist and to -trackOwnership mechanism to log tracked instances at exist and to
handle cases where we track instances of a class and instances of handle cases where we track instances of a class and instances of
its subclasses. its subclasses.

View file

@ -33,6 +33,8 @@
Time zone names can be different from system to system, but usually Time zone names can be different from system to system, but usually
the user has already set up his timezone independant of GNUstep, so we the user has already set up his timezone independant of GNUstep, so we
should respect that information. should respect that information.
For testing purposes, the GNUSTEP_BUILTIN_TZ environment variable can
be set to force the system independent data to be used.
We do not use a dictionary for storing time zones, since such a We do not use a dictionary for storing time zones, since such a
dictionary would be VERY large (~500K). And we would have to use a dictionary would be VERY large (~500K). And we would have to use a
@ -2500,17 +2502,23 @@ static NSString *zoneDirs[] = {
} }
GS_MUTEX_UNLOCK(zone_mutex); GS_MUTEX_UNLOCK(zone_mutex);
} }
/* Use the system zone info if possible, otherwise, use our installed
info. */ if (NO == [[[[NSProcessInfo processInfo] environment]
if (tzdir && [[NSFileManager defaultManager] fileExistsAtPath: objectForKey: @"GNUSTEP_BUILTIN_TZ"] boolValue])
[tzdir stringByAppendingPathComponent: name] isDirectory: &isDir] == YES
&& isDir == NO)
{ {
dir = tzdir; /* Use the system zone info if possible, otherwise, use our installed
* info.
*/
if (tzdir && [[NSFileManager defaultManager] fileExistsAtPath:
[tzdir stringByAppendingPathComponent: name] isDirectory: &isDir]
&& isDir == NO)
{
dir = tzdir;
}
} }
if (dir == nil) if (dir == nil)
{ {
dir = _time_zone_path (ZONES_DIR, nil); dir = _time_zone_path(ZONES_DIR, nil);
} }
return [dir stringByAppendingPathComponent: name]; return [dir stringByAppendingPathComponent: name];
} }
@ -3065,7 +3073,7 @@ getTypeInfo(NSTimeInterval since, GSTimeZone *zone)
NS_DURING NS_DURING
{ {
size_t nread; size_t nread;
union input_buffer *up; union input_buffer *up;
lsp = malloc(sizeof(*lsp)); lsp = malloc(sizeof(*lsp));

View file

@ -0,0 +1,2 @@
# On unix systems force testing using our inbuilt time zone data.
export GNUSTEP_BUILTIN_TZ=1

View file

@ -13,7 +13,8 @@ int main()
NSMutableArray *tmpArray; NSMutableArray *tmpArray;
NSMutableDictionary *myLocale; NSMutableDictionary *myLocale;
NSCalendarDate *myBirthday; NSCalendarDate *myBirthday;
NSCalendarDate *anotherDay; NSCalendarDate *anotherDay;
NSTimeZone *tz;
myLocale = westernLocale(); myLocale = westernLocale();
@ -72,21 +73,26 @@ int main()
[tmpArray addObject: @"PM"]; [tmpArray addObject: @"PM"];
[myLocale setObject: tmpArray forKey: NSAMPMDesignation]; [myLocale setObject: tmpArray forKey: NSAMPMDesignation];
tz = [NSTimeZone timeZoneWithName: @"CET"];
PASS_EQUAL([tz name], @"CET", "got time zone for dates")
myBirthday = [NSCalendarDate dateWithYear: 1974 myBirthday = [NSCalendarDate dateWithYear: 1974
month: 11 month: 11
day: 20 day: 20
hour: 13 hour: 13
minute: 0 minute: 0
second: 0 second: 0
timeZone: [NSTimeZone timeZoneWithName: @"MET"]]; timeZone: tz];
PASS_EQUAL([myBirthday timeZone], tz, "myBirthday has expected time zone")
anotherDay = [NSCalendarDate dateWithYear: 1974 anotherDay = [NSCalendarDate dateWithYear: 1974
month: 1 month: 1
day: 2 day: 2
hour: 3 hour: 3
minute: 0 minute: 0
second: 0 second: 0
timeZone: [NSTimeZone timeZoneWithName: @"MET"]]; timeZone: tz];
PASS_EQUAL([anotherDay timeZone], tz, "anotherDay has expected time zone")
PASS([[myBirthday descriptionWithCalendarFormat: @"%%" PASS([[myBirthday descriptionWithCalendarFormat: @"%%"
locale: myLocale] isEqualToString: @"%"], locale: myLocale] isEqualToString: @"%"],
@ -168,9 +174,9 @@ int main()
locale: myLocale] isEqualToString: @"1974"], locale: myLocale] isEqualToString: @"1974"],
"%%Y format works in description"); "%%Y format works in description");
PASS([[myBirthday descriptionWithCalendarFormat: @"%Z" PASS_EQUAL([myBirthday
locale: myLocale] isEqualToString: @"MET"], descriptionWithCalendarFormat: @"%Z" locale: myLocale],
"%%Z format works in description"); @"CET", "%%Z format works in description")
PASS([[myBirthday descriptionWithCalendarFormat: @"%z" PASS([[myBirthday descriptionWithCalendarFormat: @"%z"
locale: myLocale] isEqualToString: @"+0100"], locale: myLocale] isEqualToString: @"+0100"],
@ -192,9 +198,9 @@ int main()
locale: myLocale] isEqualToString: @"13%00%00"], locale: myLocale] isEqualToString: @"13%00%00"],
"%%H%%%%%%M%%%%%%S format works in description"); "%%H%%%%%%M%%%%%%S format works in description");
PASS([[myBirthday descriptionWithCalendarFormat: @"%H:%M (%Z)" PASS_EQUAL([myBirthday
locale: myLocale] isEqualToString: @"13:00 (MET)"], descriptionWithCalendarFormat: @"%H:%M (%Z)" locale: myLocale],
"%%H%%M format works in description"); @"13:00 (CET)", "%%H%%M format works in description")
PASS([[myBirthday descriptionWithCalendarFormat: @"%R" PASS([[myBirthday descriptionWithCalendarFormat: @"%R"
locale: myLocale] isEqualToString: @"13:00"], locale: myLocale] isEqualToString: @"13:00"],

View file

@ -0,0 +1,3 @@
# On unix systems force testing using our inbuilt time zone data.
export GNUSTEP_BUILTIN_TZ=1

View file

@ -9,31 +9,34 @@ int main()
current = [NSTimeZone defaultTimeZone]; current = [NSTimeZone defaultTimeZone];
PASS(current != nil && [current isKindOfClass: [NSTimeZone class]], PASS(current != nil && [current isKindOfClass: [NSTimeZone class]],
"+defaultTimeZone works"); "+defaultTimeZone works")
current = [NSTimeZone localTimeZone]; current = [NSTimeZone localTimeZone];
PASS(current != nil && [current isKindOfClass: [NSTimeZone class]], PASS(current != nil && [current isKindOfClass: [NSTimeZone class]],
"+localTimeZone works"); "+localTimeZone works")
current = [NSTimeZone systemTimeZone]; current = [NSTimeZone systemTimeZone];
PASS(current != nil && [current isKindOfClass: [NSTimeZone class]], PASS(current != nil && [current isKindOfClass: [NSTimeZone class]],
"+systemTimeZone works"); "+systemTimeZone works")
current = [NSTimeZone timeZoneForSecondsFromGMT: 900]; current = [NSTimeZone timeZoneForSecondsFromGMT: 900];
PASS(current != nil && [current isKindOfClass: [NSTimeZone class]], PASS(current != nil && [current isKindOfClass: [NSTimeZone class]],
"+timeZoneForSecondsFromGMT works"); "+timeZoneForSecondsFromGMT: works")
current = [NSTimeZone timeZoneForSecondsFromGMT: 90000]; current = [NSTimeZone timeZoneForSecondsFromGMT: 90000];
PASS(current == nil, PASS(current == nil,
"+timeZoneForSecondsFromGMT fails for bad offset"); "+timeZoneForSecondsFromGMT: fails for bad offset")
current = [NSTimeZone timeZoneWithAbbreviation: @"MST"]; current = [NSTimeZone timeZoneWithAbbreviation: @"MST"];
PASS(current != nil && [current isKindOfClass: [NSTimeZone class]], PASS(current != nil && [current isKindOfClass: [NSTimeZone class]],
"+timeZoneWithAbbreviation works"); "+timeZoneWithAbbreviation: works")
current = [NSTimeZone timeZoneWithName: @"GB"]; current = [NSTimeZone timeZoneWithName: @"GB"];
PASS(current != nil && [current isKindOfClass: [NSTimeZone class]], PASS(current != nil && [current isKindOfClass: [NSTimeZone class]],
"+timeZoneWithName works"); "+timeZoneWithName: works")
current = [NSTimeZone timeZoneWithName: @"MET"];
PASS_EQUAL([current name], @"MET", "+timeZoneWithName: preserved name")
[arp release]; arp = nil; [arp release]; arp = nil;
return 0; return 0;