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>
* Headers/GNUstepBase/GSIMap.h:
@ -28,7 +40,7 @@
* Source/NSURLProtocol.m: fix leaks due to retain loops.
* 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
its subclasses.

View file

@ -33,6 +33,8 @@
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
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
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);
}
/* Use the system zone info if possible, otherwise, use our installed
info. */
if (tzdir && [[NSFileManager defaultManager] fileExistsAtPath:
[tzdir stringByAppendingPathComponent: name] isDirectory: &isDir] == YES
&& isDir == NO)
if (NO == [[[[NSProcessInfo processInfo] environment]
objectForKey: @"GNUSTEP_BUILTIN_TZ"] boolValue])
{
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)
{
dir = _time_zone_path (ZONES_DIR, nil);
dir = _time_zone_path(ZONES_DIR, nil);
}
return [dir stringByAppendingPathComponent: name];
}
@ -3065,7 +3073,7 @@ getTypeInfo(NSTimeInterval since, GSTimeZone *zone)
NS_DURING
{
size_t nread;
size_t nread;
union input_buffer *up;
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;
NSMutableDictionary *myLocale;
NSCalendarDate *myBirthday;
NSCalendarDate *anotherDay;
NSCalendarDate *anotherDay;
NSTimeZone *tz;
myLocale = westernLocale();
@ -72,21 +73,26 @@ int main()
[tmpArray addObject: @"PM"];
[myLocale setObject: tmpArray forKey: NSAMPMDesignation];
tz = [NSTimeZone timeZoneWithName: @"CET"];
PASS_EQUAL([tz name], @"CET", "got time zone for dates")
myBirthday = [NSCalendarDate dateWithYear: 1974
month: 11
day: 20
hour: 13
minute: 0
second: 0
timeZone: [NSTimeZone timeZoneWithName: @"MET"]];
month: 11
day: 20
hour: 13
minute: 0
second: 0
timeZone: tz];
PASS_EQUAL([myBirthday timeZone], tz, "myBirthday has expected time zone")
anotherDay = [NSCalendarDate dateWithYear: 1974
month: 1
day: 2
hour: 3
minute: 0
second: 0
timeZone: [NSTimeZone timeZoneWithName: @"MET"]];
month: 1
day: 2
hour: 3
minute: 0
second: 0
timeZone: tz];
PASS_EQUAL([anotherDay timeZone], tz, "anotherDay has expected time zone")
PASS([[myBirthday descriptionWithCalendarFormat: @"%%"
locale: myLocale] isEqualToString: @"%"],
@ -168,9 +174,9 @@ int main()
locale: myLocale] isEqualToString: @"1974"],
"%%Y format works in description");
PASS([[myBirthday descriptionWithCalendarFormat: @"%Z"
locale: myLocale] isEqualToString: @"MET"],
"%%Z format works in description");
PASS_EQUAL([myBirthday
descriptionWithCalendarFormat: @"%Z" locale: myLocale],
@"CET", "%%Z format works in description")
PASS([[myBirthday descriptionWithCalendarFormat: @"%z"
locale: myLocale] isEqualToString: @"+0100"],
@ -192,9 +198,9 @@ int main()
locale: myLocale] isEqualToString: @"13%00%00"],
"%%H%%%%%%M%%%%%%S format works in description");
PASS([[myBirthday descriptionWithCalendarFormat: @"%H:%M (%Z)"
locale: myLocale] isEqualToString: @"13:00 (MET)"],
"%%H%%M format works in description");
PASS_EQUAL([myBirthday
descriptionWithCalendarFormat: @"%H:%M (%Z)" locale: myLocale],
@"13:00 (CET)", "%%H%%M format works in description")
PASS([[myBirthday descriptionWithCalendarFormat: @"%R"
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];
PASS(current != nil && [current isKindOfClass: [NSTimeZone class]],
"+defaultTimeZone works");
"+defaultTimeZone works")
current = [NSTimeZone localTimeZone];
PASS(current != nil && [current isKindOfClass: [NSTimeZone class]],
"+localTimeZone works");
"+localTimeZone works")
current = [NSTimeZone systemTimeZone];
PASS(current != nil && [current isKindOfClass: [NSTimeZone class]],
"+systemTimeZone works");
"+systemTimeZone works")
current = [NSTimeZone timeZoneForSecondsFromGMT: 900];
PASS(current != nil && [current isKindOfClass: [NSTimeZone class]],
"+timeZoneForSecondsFromGMT works");
"+timeZoneForSecondsFromGMT: works")
current = [NSTimeZone timeZoneForSecondsFromGMT: 90000];
PASS(current == nil,
"+timeZoneForSecondsFromGMT fails for bad offset");
"+timeZoneForSecondsFromGMT: fails for bad offset")
current = [NSTimeZone timeZoneWithAbbreviation: @"MST"];
PASS(current != nil && [current isKindOfClass: [NSTimeZone class]],
"+timeZoneWithAbbreviation works");
"+timeZoneWithAbbreviation: works")
current = [NSTimeZone timeZoneWithName: @"GB"];
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;
return 0;